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

2019-07-20 23:22发布

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 刪掉 又開始進去執行了....這是為毛阿....
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
xkwy
1楼-- · 2019-07-21 02:45
下面的不加else试试,毕竟这两个标志位又不是不可能同时置位
civic7366
2楼-- · 2019-07-21 02:51
它中斷標誌很煩阿...一定是1的

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

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

如果第一個不能進 那它還能進中斷....也太怪了 因為我只有ENABLE DIER的bit0...
xuande
3楼-- · 2019-07-21 05:08
 精彩回答 2  元偷偷看……
civic7366
4楼-- · 2019-07-21 09:57
對喔 你講的刪除a 就是原本的code 會進到第2個if

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

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

一周热门 更多>