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

標題: ARM UART0中斷例程問題 [打印本頁]

作者: 51黑tt    時間: 2016-3-6 13:22
標題: ARM UART0中斷例程問題
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中斷   讀取數據,接收數據可用
                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相與呢,而不跟別的值相與呢,哪里是不是有這樣的規定必須與0X0E相與啊??謝謝!


最佳答案

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






歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1