OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4578|回复: 4

讀取TIMx->SR時 有什麼額外操作嗎?

[复制链接]

60

主题

409

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2814
金钱
2814
注册时间
2012-10-17
在线时间
653 小时
发表于 2016-3-21 15:55:43 | 显示全部楼层 |阅读模式
1金钱
void TIM5_IRQHandler(void)
{        
    vu16 testcnt;
   
    testcnt=TIM5->SR;  //這行註解時 CC1IF還是會進去
   
    if(TIM5->SR&1<<0)
    {

        TIM5->SR = ~(1<<0);  //clear UIF
        
    }
    else if(TIM5->SR&1<<1)
        {
            TIM5->SR = ~(1<<1);  //clear CC1IF
            TIM5->DIER &= ~(1<<1); //disable CC1I
        }                  
}


因為本來想CC1I執行一次後關掉 仿真時發現程序還是會跑進去執行 後來加個變數查看SR 發現CC1I進不去了

把debug用的code 刪掉 又開始進去執行了....這是為毛阿....

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

1097

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3571
金钱
3571
注册时间
2014-12-2
在线时间
365 小时
发表于 2016-3-21 19:19:37 | 显示全部楼层
下面的不加else试试,毕竟这两个标志位又不是不可能同时置位
回复

使用道具 举报

60

主题

409

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2814
金钱
2814
注册时间
2012-10-17
在线时间
653 小时
 楼主| 发表于 2016-3-22 08:42:12 | 显示全部楼层
它中斷標誌很煩阿...一定是1的

如果沒有else變成2個都進去 故意加上ELSE想說讓它進第一個就好

結果它還是能進第2個 超沒道理的....因為它會進中斷表示第一個一定能進阿

如果第一個不能進 那它還能進中斷....也太怪了 因為我只有ENABLE DIER的bit0...
回复

使用道具 举报

58

主题

6293

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11475
金钱
11475
注册时间
2014-4-1
在线时间
1297 小时
发表于 2016-3-22 10:12:57 | 显示全部楼层

很多SR寄存器,读过一次以后内容就变了。

所以,以下a、b两句,要么删除a句,要么把b句改为  if (  testcnt &  1 << 0 )  。

a、testcnt=TIM5->SR;&#160;&#160;//這行註解時 CC1IF還是會進去
&#160; &#160;
b、 if(TIM5->SR&1<<0)


回复

使用道具 举报

60

主题

409

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2814
金钱
2814
注册时间
2012-10-17
在线时间
653 小时
 楼主| 发表于 2016-3-22 11:29:08 | 显示全部楼层
對喔 你講的刪除a 就是原本的code 會進到第2個if

b改成那樣我昨天也試過 還是能進第2個if 真的很莫名奇莫...如果大大有空的話可以玩玩看@@

我多加一個 檢查DIER的判斷句讓它確定不要進去  只是不曉得 會不會還是亂進中斷 白白消耗效能
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-26 13:29

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表