|
楼主 |
发表于 2012-9-1 09:49:35
|
显示全部楼层
LGT 发表于 2012-8-30 15:28
08A目前不支持你所说的功能。
如果你需要实时的更新E2PROM, 可以考虑先将数据缓存到SRAM中。等到系统处 ...
记得普通的51单片机,写eeprom时,没写入完成,程序可以继续往下跑。而;flash则会完成了之后,程序才可以继续往下跑。
lgt则需要等待最慢20ms,之间不能执行任何代码。这样的死等限制,对于特定的功能,难以实现。
lgt的提供的demo,我还是有点疑问:
void DrvEEPROM_ProgEByte(u16 wAddr, u16 u16Len, u8 *pData)
{
u8 sregval;
u16 i;
// read status register
sregval = SREG;
// clear global interrupt enable
CLI();
// wait for completion of previous write
for(i = 0; i < u16Len; i++)
{
while(EECR & (1 << EEPE));既然写入完成是死等,那还有必要用查询方式来判断是否完成吗?如果判断写入未完成,又跟写入未完成时不能跑任何程序有矛盾
// address
EEARH = (wAddr >> 8) & 0x3;
EEARL = (wAddr) & 0xff;
// data
EEDR = *pData;
// Program Mode
EECR = (EECR & (~DRVEEPROM_MODE_MSK));
// write logical one to EEMWE
// start eeprom write by setting EEWE
asm volatile
(
"sbi 0x1f, %0\n\t" //EECR |= (1 << EEMWE);
"sbi 0x1f, %1\n\t" //EECR |= (1 << EEWE);
::"M"(EEMPE),"M"(EEPE)
); 程序在此等待写入完成吗?
pData++;
wAddr++;
}
//
SREG = sregval;
// wait for completion of This write
while(EECR & (1 << EEPE));
}
|
|