djyos 发表于 2009-10-11 13:17:19

发现luminary cortex-m3的一个bug

PWM控制器中,PWMxISC(x=0~3)是用来清中断标志的,该寄存器的每一个位对应一个中断触发源,对任意位写1则清除相应的中断标志。例如:
    pg_pwm_reg->PWM0ISC = 8;
可以清除 IntCmpAD 中断标志,其他中断标志则不受影响。
但使用该寄存器的位带地址清除一个中断标志时,却会把所有被允许的中断标志清除,例如:
pg_pwm_reg->PWM0ISC.IntCmpAD的位带地址是0x4250098C,执行
    *(u32*)0x4250098C = 1;
应该只清除 pg_pwm_reg->PWM0RIS.IntCmpAD才对,但事实是把整个PWM0RIS寄存器(在寄存器PWM0INTEN中标记为使能的)位都清零了,用语句:
    pg_pwm_reg->PWM0ISC = 8;
则只清除 pg_pwm_reg->PWM0RIS.IntCmpAD。

没来得及测试其他外设是否有这个问题,大家小心了。虽然位带是个好东西,但爱莫能用啊!

lovecsu 发表于 2009-10-13 02:31:02

这个,勘误表里面有,你仔细看看

djyos 发表于 2009-10-13 15:39:58

哦,那是我粗心了,害我调了好久。
页: [1]
查看完整版本: 发现luminary cortex-m3的一个bug