2410 I2C 的 ISR,看不懂,帮忙解释一下!

zaodt 2009-06-20 02:53:18
本人在调 CE5.0 + 2410 的 I2C 流驱动,其中 I2C 中断的 ISR 部分有些看不懂,如下:


//
// IIC Interrupt
//
else if ( IntPendVal == INTSRC_IIC )
{
s2410INT->rSRCPND = BIT_IIC; // 清除中断
if (s2410INT->rINTPND & BIT_IIC) s2410INT->rINTPND = BIT_IIC;
s2410INT->rINTMSK = BIT_IIC; // I2C中断禁止

return (SYSINTR_IIC);
}


#define BIT_IIC (0x1<<27)

-----------------------------------------------------------------------

其中【s2410INT->rINTMSK = BIT_IIC;】这句我可以看懂,是屏蔽 I2C 中断;

但是上边两句就看不懂是什么意思了:

s2410INT->rSRCPND = BIT_IIC; // 清除中断
if (s2410INT->rINTPND & BIT_IIC) s2410INT->rINTPND = BIT_IIC;


请大家简单解释一下!多谢!
...全文
222 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
jeanszu 2009-06-24
  • 打赏
  • 举报
回复
向对应的位写一清中断
zhj8727 2009-06-24
  • 打赏
  • 举报
回复
uping
西山锈码 2009-06-23
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 gooogleman 的回复:]
楼主看数据手册啊。

2440/2410 比较奇怪,当发生一次中断后,
要清除中断时要把该位置一的,通常都是置零,所以要特别小心。
if (s2410INT->rINTPND & BIT_IIC) s2410INT->rINTPND = BIT_IIC;


没有什么啊,就是寄存器设置而已。你仔细对比其他的发现是一个样。
[/Quote]
同意gooogleman的见解!
SRCPND 和INTPND 这两个未决寄存器都是通过对其对应位写一次1来清除中断响应的。
wdw1600 2009-06-23
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 xingxing_y 的回复:]
中断源,请求源寄存器清零操作需要向对应位置一的。
[/Quote]
是这样的,2440手册上有说明
LH806732 2009-06-23
  • 打赏
  • 举报
回复
UP
xingxing_y 2009-06-21
  • 打赏
  • 举报
回复
中断源,请求源寄存器清零操作需要向对应位置一的。
xyj0663 2009-06-20
  • 打赏
  • 举报
回复
建议看一下中断处理那一节,里面有说到2410整个的中断是怎么处理的,还有这几个寄存器是怎么用的
gooogleman 2009-06-20
  • 打赏
  • 举报
回复
楼主看数据手册啊。

2440/2410 比较奇怪,当发生一次中断后,
要清除中断时要把该位置一的,通常都是置零,所以要特别小心。
if (s2410INT->rINTPND & BIT_IIC) s2410INT->rINTPND = BIT_IIC;


没有什么啊,就是寄存器设置而已。你仔细对比其他的发现是一个样。

zaodt 2009-06-20
  • 打赏
  • 举报
回复
哦,上边一句有错误,少了一个位或符号,修正如下:

s2410INT->rINTMSK |= BIT_IIC; // I2C中断禁止

19,519

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧