欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1849|回復: 0
打印 上一主題 下一主題
收起左側(cè)

ARM UART0中斷例程問題

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:107189 發(fā)表于 2016-3-6 13:22 | 只看該作者 回帖獎勵 |正序瀏覽 |閱讀模式
void __irq IrqUart0(void)
{
  //  uint8 i;
  //  uint8 RxData;

    OS_ENTER_CRITICAL();

    //判斷是否有中斷掛起,如果有進入中斷
    while( (U0IIR & 0x01) == 0)
    {
       switch( (U0IIR & 0x0E))
        {        
        case 0x06:                         //RLS中斷
            while( (U0LSR &  0x01) == 0);   
       //     RxData = U0RBR;            
            U0THR = 'A';           
             while( (U0LSR & 0x40)==0);            
             break;            
        case 0x04:                     //RDA中斷   讀取數(shù)據(jù),接收數(shù)據(jù)可用
                DealPack();      
                break;      
        case 0x0C:                     //CTI中斷   禁止接收及字符超時中斷
              DealPack();            
              break;      
        case 0x02:                    //THRE中斷
          //  while( (U0LSR &  0x20) == 1);   
          //  RxData = U0RBR;         
            U0THR = 'D';            
             while( (U0LSR & 0x40)==0);
              break;   
        }
    }   
    OS_EXIT_CRITICAL();   
    VICVectAddr = 0;
}
誰哪位大哥幫忙釋一下這個程序,為什么U0IIR與0X0E相與呢,而不跟別的值相與呢,哪里是不是有這樣的規(guī)定必須與0X0E相與啊??謝謝!


最佳答案

你可以查一下ARM資料,在UART0中斷處理的表格中,U0IIR[3:0]為0001時,表示沒有該中斷,最后不為1表示有中斷,所以對應程序看,與0X01與,沒有中斷就不進入while循環(huán)。后面switch( (U0IIR & 0x0E)) 可以寫成switch(U0IIR) 本身沒有錯誤,但對于資深的程序員,這樣的習慣是非常好的。由于判斷前三位,所以就是應該與上1110也就是十六位的E。
程序后面翻譯可以理解為,如果有中斷產(chǎn)生,數(shù)值0X06,4,C,2分別對應相應的功能,就可以判斷具體的中斷原因了。具體功能還是去看ARM的UART0一章便非常清楚了。
如果還有問題可以繼續(xù)提問。希望你滿意。

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表