写外部flash EN25Q16A-104HIP 的函数
uint8 program_data(uint16 flash_addr, uint8 buffer[], uint8 len)
{
uint8 i,flagstatus;
uint16 address;
int8 trycnt=1;
//u16 timeout = 0xFFFF;
retry_lbl:
if(trycnt-- <= 0) return(0);
FLASH->CR1 &= (u8)(~0x01);
FLASH->CR1 |= (u8)0x00;
address = flash_addr;
for(i = 0; i < len; i++)
{
clr_watchdog(NULL);
/* Unlock Program memory */
FLASH_Unlock(FLASH_MEMTYPE_PROG);
*((uint8 *) address) = buffer[i];
while (flagstatus == 0x00)
{
flagstatus = (u8)(FLASH->IAPSR & ((u8)(0x04) |(u8)(0x01)));
//timeout--;
}
FLASH_Lock(FLASH_MEMTYPE_PROG);
address++;
}
address = flash_addr;
for(i = 0; i < len; i++)
{
if(*((u8*) address) != buffer[i]) goto retry_lbl;
address++;
}
return(1);
}
STM8 FLASH
oid flash_write(u16 addr, const void *in, u8 len)
{
//FLASH->CR1 &= (u8) (~0x01);
const u8 *data = (const u8 *)in;
FLASH_Unlock(FLASH_MEMTYPE_PROG);
while (len--)
{
*((u8*) addr++) = *data++;
while (!(u8) (FLASH->IAPSR & ((u8) (0x04) | (u8) (0x01))))
IWDG->KR = IWDG_KEY_REFRESH;
}
FLASH_Lock(FLASH_MEMTYPE_PROG);
}
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』