麻烦帮我看下这个多字节数组的载入问题
本帖最后由 DebugLab 于 2024-11-26 15:50 编辑#define PROGRAM_SIZE_IC_1 5120
#define PROGRAM_ADDR_IC_1 1024
const char Program_Data_IC_1 = {
0x00, 0x00, 0x00, 0x00, 0x01,
//此处省略1022行代码
0x00, 0x00, 0x00, 0x00, 0x01,
};
void dsp_init(void)
{
unsigned int i;
iic_start();
iic_sendbyte(0x8e);
iic_SlaveAck();
iic_sendbyte(PROGRAM_ADDR_IC_1>>8);
iic_SlaveAck();
iic_sendbyte(PROGRAM_ADDR_IC_1&0x00ff);
iic_SlaveAck();
for(i=0;i<PROGRAM_SIZE_IC_1;i++)
{
iic_sendbyte(Program_Data_IC_1);
iic_SlaveAck();
}
iic_stop();
}
现在的问题是在FOR语句内的数据只成功发送了数组内的第一个字节,后面的就没有发了
猜的,没有等到应答,卡在for那里了?你可以仿真看看 应该是主机检查从机的应答,而且你这代码没有出错处理
1000多行对解决问题无意义的代码(已帮您删除),却没有被调用函数的函数体,I2C是如何实现的没有体现
工作正常的I2C程序供参考:
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=4612
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=4613
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=4698
应为
iic_sendbyte(Program_Data_IC_1);
吧 iic_sendbyte(Program_Data_IC_1);
这个是 iic_sendbyte(Program_Data_IC_1);吧 按照楼主位的代码,i值在编译时被优化掉了。就不在产生循环代码。 jwd 发表于 2024-11-26 15:39
猜的,没有等到应答,卡在for那里了?你可以仿真看看
有应答,FOR上面的单字节发送都是正常的 社区闲人 发表于 2024-11-26 16:18
按照楼主位的代码,i值在编译时被优化掉了。就不在产生循环代码。
这个要怎么处理呢,这段函数我是从别的单片机移植过来的,在其它的单片机上是正常的 iic_sendbyte(Program_Data_IC_1);
变成了指针,指向了这个 Program_Data_IC_1 地址,所以发第一个数据{:5_312:}
页:
[1]
2