- 打卡等级:初来乍到
- 打卡总天数:3
- 最近打卡:2026-05-23 08:15:54
注册会员
- 积分
- 85
|
请问我在44M或以上时,其中中断也关了,在大量写入区块数据时写不全,读取时只有前一部分正常随机的,频率低点时都很正常,
我参考的是官方的例程,请问还有什么要注意的问题,谢谢
例子如下
#define ENABLE_IAP 0x80 //if SYSCLK<30MHz 用了
u8 IapReadByte(u16 addr)
{
u8 dat; //数据缓冲区
IAP_CONTR = ENABLE_IAP; //使能IAP
IAP_TPS=44; //设置等待参数44MHz
IAP_CMD = CMD_READ; //设置IAP命令
IAP_ADDRL = addr; //设置IAP低地址
IAP_ADDRH = addr >> 8; //设置IAP高地址
IAP_TRIG = 0x5a; //写触发命令(0x5a)
IAP_TRIG = 0xa5; //写触发命令(0xa5)
_nop_(); //等待ISP/IAP/EEPROM操作完成
dat = IAP_DATA; //读ISP/IAP/EEPROM数据
IapIdle(); //关闭IAP功能
return dat; //返回
}
void IapProgramByte(u16 addr, u8 dat)
{
IAP_CONTR = ENABLE_IAP; //使能IAP
IAP_TPS=44; //设置等待参数48MHz
IAP_CMD = CMD_PROGRAM; //设置IAP命令
IAP_ADDRL = addr; //设置IAP低地址
IAP_ADDRH = addr >> 8; //设置IAP高地址
IAP_DATA = dat; //写ISP/IAP/EEPROM数据
IAP_TRIG = 0x5a; //写触发命令(0x5a)
IAP_TRIG = 0xa5; //写触发命令(0xa5)
_nop_(); //等待ISP/IAP/EEPROM操作完成
_nop_();
while (IAP_CONTR & 0x01); // 等待IAP操作完成
IapIdle();
}
。。。。
EA =0;
IE2 &= ~0x20; //暂停定时器3中断
IE2 &= ~0x40;
IapEraseSector(IAP_ADDRESS+0x200);
IapProgramByte(IAP_ADDRESS+0x200, Gateway_IP[0]);
IapProgramByte(IAP_ADDRESS+0x201, Gateway_IP[1]);
IapProgramByte(IAP_ADDRESS+0x202, Gateway_IP[2]);
IapProgramByte(IAP_ADDRESS+0x203, Gateway_IP[3]);
IapProgramByte(IAP_ADDRESS+0x204, Sub_Mask[0]);
IapProgramByte(IAP_ADDRESS+0x205, Sub_Mask[1]);
IapProgramByte(IAP_ADDRESS+0x206, Sub_Mask[2]);
IapProgramByte(IAP_ADDRESS+0x207, Sub_Mask[3]);
IapProgramByte(IAP_ADDRESS+0x208, IP_Addr[0]);
IapProgramByte(IAP_ADDRESS+0x209, IP_Addr[1]);
IapProgramByte(IAP_ADDRESS+0x20a, IP_Addr[2]);
IapProgramByte(IAP_ADDRESS+0x20b, IP_Addr[3]);
IapProgramByte(IAP_ADDRESS+0x20c, S0_DIP[0]);
IapProgramByte(IAP_ADDRESS+0x20d, S0_DIP[1]);
IapProgramByte(IAP_ADDRESS+0x20e, S0_DIP[2]);
IapProgramByte(IAP_ADDRESS+0x20f, S0_DIP[3]);
{
u8 i;
for (i=0;i<9;i++)
IapProgramByte(IAP_ADDRESS+0x210+i, mqtt_SubscribeTopic[i]);
}
IE2 |= 0x20; //重启定时器3中断
IE2 |= 0x40;
EA = 1;
。。。。
请大佬指教
|
|