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

kelian1213   2009-6-20 14:53 楼主
本人在调 CE5.0 + 2410 的 I2C 流驱动,其中 I2C 中断的 ISR 部分有些看不懂,如下:


  1.         //
  2.         // IIC Interrupt
  3.         //
  4.         else if ( IntPendVal == INTSRC_IIC )
  5.         {
  6.                 s2410INT->rSRCPND = BIT_IIC;        // 清除中断
  7.                 if (s2410INT->rINTPND & BIT_IIC) s2410INT->rINTPND = BIT_IIC;
  8.                 s2410INT->rINTMSK = BIT_IIC;        // I2C中断禁止

  9.                 return (SYSINTR_IIC);
  10.         }


#define    BIT_IIC                (0x1<<27)

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

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

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

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


请大家简单解释一下!多谢!

回复评论 (9)

哦,上边一句有错误,少了一个位或符号,修正如下:

s2410INT->rINTMSK |= BIT_IIC;        // I2C中断禁止
点赞  2009-6-20 14:57
楼主看数据手册啊。

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


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

点赞  2009-6-20 15:05
建议看一下中断处理那一节,里面有说到2410整个的中断是怎么处理的,还有这几个寄存器是怎么用的
点赞  2009-6-20 16:43
中断源,请求源寄存器清零操作需要向对应位置一的。
点赞  2009-6-21 12:43
引用: 引用 4 楼 xingxing_y 的回复:
中断源,请求源寄存器清零操作需要向对应位置一的。

是这样的,2440手册上有说明
点赞  2009-6-23 10:38
引用: 引用 2 楼 gooogleman 的回复:
楼主看数据手册啊。

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


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

同意gooogleman的见解!
SRCPND 和INTPND 这两个未决寄存器都是通过对其对应位写一次1来清除中断响应的。
点赞  2009-6-23 12:53
UP
点赞  2009-6-23 21:10
uping
点赞  2009-6-24 08:42
向对应的位写一清中断
点赞  2009-6-24 10:48
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复