飞羽 发表于 2023-6-1 18:21:10

关于STC8H的PWM的一些疑问

本帖最后由 飞羽 于 2023-6-1 18:21 编辑

现象:设置了PWMA中的PWM3的功能输出,PWM波形输出正常,在未开启CC3IE标志位,开启了CC2IE标志位(大意写错了)
发现在PWMA中断的CC3IF还是会被置1
如下图的P34会被翻转输出



问题:按理在CC3IE为使能情况下,CC3IF理应不会有置1的情况,为什么还是会被置而响应中断?
(我又试了使能CC1IE和CC2IE,一样出现CC3IF出现响应置1)

补充:PWMA_IER = 0x02;(在keil中使能CC1IE的语句),PWM3设置成输出PWM模式,采用向上计数


梁工 发表于 2023-6-1 21:49:40

本帖最后由 梁工 于 2023-6-2 10:45 编辑

当计数值与比较值匹配时会将比较标志置位,但不会发起中断。而进入中断后去查询,则会发现此位为1。
所以,我再允许中断时,用一个变量来标记允许了哪个中断,读取中断标志时,与运算一下即可。
初始化最后:
      PWMA_ISR_En = PWMA_IER;      //设置标志允许通道1~4中断处理
中断中处理:
      u8      sr1;
      sr1 = PWMA_SR1;      //为了快速, 中断标志用一个局部变量处理
      PWMA_SR1 = 0;      //清除中断标志
      PWMA_SR2 = 0;      //清除中断标志
      sr1 &= PWMA_ISR_En;      //每个通道可以单独允许中断处理

      if(sr1 & 0x02)      //通道1中断
      {
      }
      if(sr1 & 0x04)      //通道2中断
      {
      }
      if(sr1 & 0x08)      //通道3中断
      {
      }
      if(sr1 & 0x10)      //通道4中断
      {
      }

飞羽 发表于 2023-6-2 09:55:02

梁工 发表于 2023-6-1 21:49
档计数值与比较值匹配时会将比较标志置位,但不会发起中断。而进入中断后去查询,则会发现此位为1。
所以, ...

了解,也就是我不使能中断,但计数值和比较值也会置1中断标记,导致其他中断响应后,也会认为执行触发

梁工 发表于 2023-6-2 10:46:31

飞羽 发表于 2023-6-2 09:55
了解,也就是我不使能中断,但计数值和比较值也会置1中断标记,导致其他中断响应后,也会认为执行触发 ...

是的,所以要像我的程序那样,将SR1读出来后,屏蔽掉没有允许的中断标志。
页: [1]
查看完整版本: 关于STC8H的PWM的一些疑问