// SPIE #define FRAMPORT PORTE // FRAM PORT #define SPIRESET 0 #define SPICS 4 #define SPIMOSI 5 #define SPIMISO 6 #define SPISCK 7 // SPIE(FRAM) void SPIE_init() { FRAMPORT.DIRCLR = (1<<SPIMISO); // SPI FRAMPORT.DIRSET = (1<<SPIMOSI) | (1<<SPISCK) | (1<<SPICS); // SPI FRAMPORT.OUTSET = (1<<SPICS); // SPI , , SPI Mode 0, 4 SPIE.CTRL = SPI_ENABLE_bm | SPI_MASTER_bm | SPI_MODE_0_gc | SPI_PRESCALER_DIV4_gc; } // FRAM void FRAM_WREN() { SPIE_init(); FRAMPORT.OUTCLR = (1<<SPICS); // ChipSelect SPIE.DATA = 0x06; // while( !(SPIE_STATUS & SPI_IF_bm) ); // FRAMPORT.OUTSET = (1<<SPICS); // ChipSelect PORTE.OUTCLR = (1<<SPICS); // ChipSelect SPIE.DATA = 0x02; // while( !(SPIE_STATUS & SPI_IF_bm) ); SPIE.DATA = 0x00; // while( !(SPIE_STATUS & SPI_IF_bm) ); SPIE.DATA = 0x10; // while( !(SPIE_STATUS & SPI_IF_bm) ); SPIE.DATA = Data1; // while( !(SPIE_STATUS & SPI_IF_bm) ); SPIE.DATA = Data2; while( !(SPIE_STATUS & SPI_IF_bm) ); SPIE.DATA = Data3; while( !(SPIE_STATUS & SPI_IF_bm) ); FRAMPORT.OUTSET = (1<<SPICS); // ChipSelect SPIE.CTRL = 0x00; FRAMPORT.OUTCLR = (1<<SPIMOSI) | (1<<SPISCK); } // FRAM void FRAM_RD() { SPIE_init(); FRAMPORT.OUTCLR = (1<<SPICS); // ChipSelect SPIE.DATA = 0x03; while( !(SPIE_STATUS & SPI_IF_bm) ); SPIE.DATA = 0x00; // while( !(SPIE_STATUS & SPI_IF_bm) ); SPIE.DATA = 0x10; // while( !(SPIE_STATUS & SPI_IF_bm) ); SPIE.DATA = 0x00; // while( !(SPIE_STATUS & SPI_IF_bm) ); Data1 = SPIE.DATA; SPIE.DATA = 0x00; while( !(SPIE_STATUS & SPI_IF_bm) ); Data2 = SPIE.DATA; SPIE.DATA = 0x00; while( !(SPIE_STATUS & SPI_IF_bm) ); Data3 = SPIE.DATA; FRAMPORT.OUTSET = (1<<SPICS); // ChipSelect SPIE.CTRL = 0x00; FRAMPORT.OUTCLR = (1<<SPIMOSI) | (1<<SPISCK); // SPI }
void FramErase(void) { SPIE_init(); FRAMPORT.OUTCLR = (1<<SPICS); // ChipSelect SPIE.DATA = 0x06; // WREN while( !(SPIE_STATUS & SPI_IF_bm) ); // FRAMPORT.OUTSET = (1<<SPICS); // ChipSelect PORTE.OUTCLR = (1<<SPICS); // ChipSelect SPIE.DATA = 0x02; // while( !(SPIE_STATUS & SPI_IF_bm) ); SPIE.DATA = 0x00; // while( !(SPIE_STATUS & SPI_IF_bm) ); SPIE.DATA = 0x00; // while( !(SPIE_STATUS & SPI_IF_bm) ); while(FramCounter <= 0x7FFF) { SPIE.DATA = 0x00; while( !(SPIE_STATUS & SPI_IF_bm) ); FramCounter++; } FRAMPORT.OUTSET = (1<<SPICS); // ChipSelect FramCounter = 0; SPIE.CTRL = 0x00; // SPI FRAMPORT.OUTCLR = (1<<SPIMOSI) | (1<<SPISCK); }
Source: https://habr.com/ru/post/320472/
All Articles