发现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。
没来得及测试其他外设是否有这个问题,大家小心了。虽然位带是个好东西,但爱莫能用啊! 这个,勘误表里面有,你仔细看看 哦,那是我粗心了,害我调了好久。
页:
[1]