发现了这样一个情况:
首先配置好:PWM4计数到一定值,比如m,会产生pwm4_INT,配置pwm4_INT触发CLA
然后我的程序是这样执行的:
1.打开pwm4计数,关闭pwm4_INT使能
代码段1
2. 清除pwm4的中断标志,使能pwm4_INT
代码段2
由于代码段1需要用到pwm4干别的事,所以这一阶段要使能计数;但这一阶段不想触发CLA,在代码段2中,当PWM4每次计数到
m时,触发进入CLA
但事实上发现:第2步时,使能中断之后会立刻进入CLA一次,无论此时pwm4的计数值是否达到m,此后正常
很是疑惑
去论坛上看到一个人问,他使用ADC触发CLA的,他的问题是为什么不使能ADC的中断,只开CLA的中断就行?
有个人的解答是,而当有了CLA之后,ADC采样完,产生ADC中断标志,这个标志可以用来触发CLA任务,相当于执行中断服务程序。如此可以释放CPU的负 担,CPU就不用进入去处理这个中断了,因此不打开对应的PIE级别中断和IE级别中断。
看完之后我又看了下我的程序,确实没有关于pwm4中断的配置,也没有中断服务子函数,我想:是不是在代码段1的运行过程中,计数到m,本来应该产生中断的,但中断没使能,造成什么东西被记住了,所以后面一使能中断就进入CLA?而且这个被记住的东西还没法通过清除PWM4的中断标志位消除,正如上面那个解答所说,这里面的PWM4_INT是“徒有虚名”?
大致就类似一个使能中断就进入中断服务子程序的问题一样,只不过这时并没有真正通过PWM4_INT去触发的CLA,所以通过清除PWM4的中断,无法阻止立刻进入CLA
不知道我的猜想对不对,或者诚恳对我所遇到问题的原因进行解答。谢谢。