/*=====================================================================================================*/ int main( void ) { SystemInit(); GPIO_Config(); LED_R = 0; if(KEY_WU == 1) { Flash_ErasePage(FLASH_PAGE_ADDR(60)); Delay_10ms(100); } LED_R = 1; while(1) { LED_R = ~LED_R; Delay_10ms(10); if(KEY_BO == 1) { // Write Flash Flash_WritePageU8(FLASH_PAGE_ADDR(60), WriteData, 1024); if(CmpArr_U8(WriteData, ReadData, 1024) == SUCCESS) LED_G = 0; } if(KEY_WU == 1) { // Read Flash Flash_ReadPageU8(FLASH_PAGE_ADDR(60), ReadData, 1024); if(CmpArr_U8(WriteData, ReadData, 1024) == SUCCESS) LED_B = 0; } } }
/*=====================================================================================================*/ int main( void ) { HAL_Init(); GPIO_Config(); #if FLASH_RW_U8 Flash_ErasePages(FLASH_PAGE_ADDR(WRITE_PAGE), 1); Flash_WritePageU8(FLASH_PAGE_ADDR(WRITE_PAGE), WriteDataU8, 1024); Flash_ReadPageU8(FLASH_PAGE_ADDR(WRITE_PAGE), ReadDataU8, 1024); if(Cmp_ArrU8(WriteDataU8, ReadDataU8, 1024) != SUCCESS) LED_0_Reset; #endif #if FLASH_RW_U16 Flash_ErasePages(FLASH_PAGE_ADDR(WRITE_PAGE), 1); Flash_WritePageU16(FLASH_PAGE_ADDR(WRITE_PAGE), WriteDataU16, 512); Flash_ReadPageU16(FLASH_PAGE_ADDR(WRITE_PAGE), ReadDataU16, 512); if(Cmp_ArrU16(WriteDataU16, ReadDataU16, 512) != SUCCESS) LED_1_Reset; #endif #if FLASH_RW_U32 Flash_ErasePages(FLASH_PAGE_ADDR(WRITE_PAGE), 1); Flash_WritePageU32(FLASH_PAGE_ADDR(WRITE_PAGE), WriteDataU32, 256); Flash_ReadPageU32(FLASH_PAGE_ADDR(WRITE_PAGE), ReadDataU32, 256); if(Cmp_ArrU32(WriteDataU32, ReadDataU32, 256) != SUCCESS) LED_2_Reset; #endif while (1) { GPIO_A_Toggle; Delay_100ms(1); } }
/*====================================================================================================*/ int main( void ) { GPIO_Config(); #if FLASH_RW_U8 Flash_ErasePage(FLASH_PAGE_ADDR(60)); Flash_WritePageU8(FLASH_PAGE_ADDR(60), WriteDataU8, 1024); Flash_ReadPageU8(FLASH_PAGE_ADDR(60), ReadDataU8, 1024); LED_R = (Cmp_ArrU8(WriteDataU8, ReadDataU8, 1024) == SUCCESS) ? 0 : 1; #endif #if FLASH_RW_U16 Flash_ErasePage(FLASH_PAGE_ADDR(60)); Flash_WritePageU16(FLASH_PAGE_ADDR(60), WriteDataU16, 512); Flash_ReadPageU16(FLASH_PAGE_ADDR(60), ReadDataU16, 512); LED_G = (Cmp_ArrU16(WriteDataU16, ReadDataU16, 512) == SUCCESS) ? 0 : 1; #endif #if FLASH_RW_U32 Flash_ErasePage(FLASH_PAGE_ADDR(60)); Flash_WritePageU32(FLASH_PAGE_ADDR(60), WriteDataU32, 256); Flash_ReadPageU32(FLASH_PAGE_ADDR(60), ReadDataU32, 256); LED_B = (Cmp_ArrU32(WriteDataU32, ReadDataU32, 256) == SUCCESS) ? 0 : 1; #endif Delay_100ms(10); while(1) { LED_R = !LED_R; LED_G = !LED_G; LED_B = !LED_B; Delay_100ms(1); } }
void flash_read_page(size_t bank, size_t page) { uint8_t* ptr = FLASH_CTRL_ADDR; size_t i; /* Return cached result if applicable */ if(flash_current_bank == bank && flash_current_page == page) return; /* Drop cache */ flash_current_bank = -1; flash_current_page = -1; /* wait for pending to complete */ while(FLASH_IS_BUSY); /* Initiate read of page */ *FLASH_REG_READ_PAGE = (uint32_t)FLASH_PAGE_ADDR(bank, page); /* wait for read to complete */ while(FLASH_IS_BUSY); /* Copy to buffer */ for(i=0; i<sizeof(flash_scratch_page); i+=4) *((uint32_t*)(flash_scratch_page+i)) = *((uint32_t*)(ptr+i)); /* Update cache info */ flash_current_bank = bank; flash_current_page = page; }
void flash_flush_page(size_t bank, size_t page) { uint8_t* ptr = FLASH_CTRL_ADDR; size_t i; /* wait for pending to complete */ while(FLASH_IS_BUSY); /* no caching on writes */ for(i=0; i<sizeof(flash_scratch_page); i+=4) *((uint32_t*)(ptr+i)) = *((uint32_t*)(flash_scratch_page+i)); *FLASH_REG_WRITE_PAGE = (uint32_t)FLASH_PAGE_ADDR(bank, page); /* wait for read to complete */ while(FLASH_IS_BUSY); }
/*====================================================================================================*/ int main( void ) { GPIO_Config(); #if FLASH_RW_U8 Flash_ErasePage(FLASH_PAGE_ADDR(FLASH_RW_PAGE)); Flash_WritePageU8(FLASH_PAGE_ADDR(FLASH_RW_PAGE), WriteDataU8, FLASH_RW_SIZE); Flash_ReadPageU8(FLASH_PAGE_ADDR(FLASH_RW_PAGE), ReadDataU8, FLASH_RW_SIZE); if(Cmp_ArrU8(WriteDataU8, ReadDataU8, FLASH_RW_SIZE) == SUCCESS) LED_R_Reset; else LED_R_Set; #endif #if FLASH_RW_U16 Flash_ErasePage(FLASH_PAGE_ADDR(FLASH_RW_PAGE)); Flash_WritePageU16(FLASH_PAGE_ADDR(FLASH_RW_PAGE), WriteDataU16, FLASH_RW_SIZE >> 1); Flash_ReadPageU16(FLASH_PAGE_ADDR(FLASH_RW_PAGE), ReadDataU16, FLASH_RW_SIZE >> 1); if(Cmp_ArrU16(WriteDataU16, ReadDataU16, FLASH_RW_SIZE >> 1) == SUCCESS) LED_G_Reset; else
LED_R_Set; #endif #if FLASH_RW_U16 Flash_ErasePage(FLASH_PAGE_ADDR(FLASH_RW_PAGE)); Flash_WritePageU16(FLASH_PAGE_ADDR(FLASH_RW_PAGE), WriteDataU16, FLASH_RW_SIZE >> 1); Flash_ReadPageU16(FLASH_PAGE_ADDR(FLASH_RW_PAGE), ReadDataU16, FLASH_RW_SIZE >> 1); if(Cmp_ArrU16(WriteDataU16, ReadDataU16, FLASH_RW_SIZE >> 1) == SUCCESS) LED_G_Reset; else LED_G_Set; #endif #if FLASH_RW_U32 Flash_ErasePage(FLASH_PAGE_ADDR(FLASH_RW_PAGE)); Flash_WritePageU32(FLASH_PAGE_ADDR(FLASH_RW_PAGE), WriteDataU32, FLASH_RW_SIZE >> 2); Flash_ReadPageU32(FLASH_PAGE_ADDR(FLASH_RW_PAGE), ReadDataU32, FLASH_RW_SIZE >> 2); if(Cmp_ArrU32(WriteDataU32, ReadDataU32, FLASH_RW_SIZE >> 2) == SUCCESS) LED_B_Reset; else LED_B_Set; #endif Delay_100ms(10); while(1) { LED_R_Toggle; LED_G_Toggle; LED_B_Toggle; Delay_100ms(1); } }