3
18
375
中级会员
正常的I2C从机硬件中断的代码是这样的:
void I2C_ISR_Handler() interrupt I2C_VECTOR { //其它事件处理代码 if (I2CSLST & I2C_RXIF) // 0x20 处理RECV事件 { I2CSLST &= ~(I2C_RXIF | I2C_SLACKO); //SLACKO设置为0,应答ACK //接收数据处理代码 } }
我的问题是:这个SLACK0的应答ACK信号(拉低SDA),是(情况1)在I2CSLST被赋值的那一刻就被发送出去了,还是(情况2)要等到整个中断代码全部执行完毕,在中断返回语句 RETI 执行后才发送?
手册上只非常简单地讲了一句:“SLACKO:从机模式时,准备将要发送出去的 ACK 信号”,并没有说这个“将要”的任何时序问题。而ACK信号产生的时序问题,涉及到如果正确编写硬件I2C中断接收数据处理代码。所以万事不明找论坛,这里大佬荟萃、大神云集,希望能有老师给小弟答疑解惑,非常感谢。
使用道具 举报 送花
79
5131
9132
超级版主
DebugLab
112
2391
6018
版主
本版积分规则 发表回复 回帖后跳转到最后一页
|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )
GMT+8, 2025-6-17 13:19 , Processed in 0.179354 second(s), 71 queries .
Powered by Discuz! X3.5
© 2001-2025 Discuz! Team.