printf("\nFMC Sample Code Completed.[0x%08x] \n", FMC_Read(DATA_FLASH_TEST_BASE));
//FMC_Close();
SYS_LockReg();
while(1)
{
if(test++>200000)
{
SYS_UnlockReg();
//FMC_Open();
FMC_Erase(DATA_FLASH_TEST_BASE);
FMC_Write(DATA_FLASH_TEST_BASE, testcode++);
test = FMC_Read(DATA_FLASH_TEST_BASE);
printf("test %d \r\n", test);
//FMC_Close();
SYS_LockReg();
//if(test == 30) NVIC_SystemReset();
test = 0;
}
}
언락레지 => FMC_Open=> 지우고 다시 쓰고 다시 FMC_Close=> 락레지
쓰기전에 무조건 지워야 동작됨..
한번 FMC_Open 후 FMC_Close 안하면....계속 사용가능한가?
================ 029FAE 경우 =================
FMC_EnableAPUpdate / FMC_DisableAPUpdate 을 추가해야 저장됨...확인 필요?
int32_t Wirte_Flash_data(int32_t addr, uint32_t data)
{
uint32_t befor_data;
SYS_UnlockReg();
FMC_Open();
befor_data = FMC_Read(addr);
if(befor_data != data) {
FMC_EnableAPUpdate();
FMC_Erase(addr);
FMC_Write(addr, data);
d_msg("Wirte_Flash_addr[0x%08x] bf[%d] new[%d]\r\n", addr, befor_data, data);
FMC_DisableAPUpdate();
}
FMC_Close();
SYS_LockReg();
return data;
}
int32_t Read_Flash_data(int32_t addr)
{
int32_t data = 0, i;
SYS_UnlockReg();
FMC_Open();
data = FMC_Read(addr);
FMC_Close();
SYS_LockReg();
d_msg("Read_Flash_addr[0x%08x] data[%d]\r\n",addr, data);
return data;
}
'Firmware > Nuvoton' 카테고리의 다른 글
GPIO 변수 할당 (0) | 2020.01.02 |
---|---|
Completed Cross-Module-Optimization (Keil 컴파일) MDK-ARM (0) | 2019.05.07 |