|
/*----------------------------
扇區(qū)擦除
----------------------------*/
void IapEraseSector(WORD addr)
{
IAP_CONTR = ENABLE_IAP; //使能IAP
IAP_CMD = CMD_ERASE; //設(shè)置IAP命令
IAP_ADDRL = addr; //設(shè)置IAP低地址
IAP_ADDRH = addr >> 8; //設(shè)置IAP高地址
IAP_TRIG = 0x5a; //寫觸發(fā)命令(0x5a)
IAP_TRIG = 0xa5; //寫觸發(fā)命令(0xa5)
_nop_(); //等待ISP/IAP/EEPROM操作完成
IapIdle();
}
/*----------------------------
//========================================================================
// 函數(shù): void EEPROM_SectorErase(u16 EE_address)
// 描述: 擦除一個(gè)扇區(qū).
// 參數(shù): EE_address: 要擦除的EEPROM的扇區(qū)中的一個(gè)字節(jié)地址.
// 返回: none.
// 版本: V1.0, 2014-6-30
//========================================================================
void EEPROM_SectorErase(u16 EE_address)
{
ISP_ENABLE(); //設(shè)置等待時(shí)間,允許ISP/IAP操作,送一次就夠
ISP_ERASE(); //宏調(diào)用, 送扇區(qū)擦除命令,命令不需改變時(shí),不需重新送命令
//只有扇區(qū)擦除,沒有字節(jié)擦除,512字節(jié)/扇區(qū)。
//扇區(qū)中任意一個(gè)字節(jié)地址都是扇區(qū)地址。
ISP_ADDRH = EE_address / 256; //送扇區(qū)地址高字節(jié)(地址需要改變時(shí)才需重新送地址)
ISP_ADDRL = EE_address % 256; //送扇區(qū)地址低字節(jié)
EEPROM_Trig(); //觸發(fā)EEPROM操作
DisableEEPROM(); //禁止EEPROM操作
}
上面這兩個(gè)扇區(qū)擦除函數(shù)都是stc-isp給出的,對(duì)于IAP和ISP在網(wǎng)看查了好久,還是沒搞清楚它們使用的區(qū)別,請(qǐng)大神們指點(diǎn)一下,謝謝!
比如我想做一個(gè)瓦力機(jī)器人,每塊芯片都是他的一個(gè)大腦記憶細(xì)胞,所以有大量的擦除讀寫操作,那么請(qǐng)問上面兩種函數(shù)哪種更適合呢?
|
|