<strong id="0toem"><dl id="0toem"></dl></strong><b id="0toem"><menuitem id="0toem"></menuitem></b>

      <b id="0toem"><menuitem id="0toem"></menuitem></b>
    1. <code id="0toem"><abbr id="0toem"></abbr></code>
      <strong id="0toem"><dl id="0toem"></dl></strong>
      <kbd id="0toem"></kbd>
              1. <code id="0toem"></code>
                <th id="0toem"><progress id="0toem"></progress></th><strong id="0toem"><form id="0toem"></form></strong>

                <th id="0toem"></th>
              2. 131 1300 0010
                其他
                當(dāng)前位置: 首頁(yè)>> 元件技術(shù)>>其他>>
              3. 導(dǎo)航欄目
              4. 二極管
              5. 整流橋
              6. MOS管
              7. 其他
              8. LPC2138的串口中斷程序設(shè)計(jì)
                LPC2138的串口中斷程序設(shè)計(jì)
              9. LPC2138的串口中斷程序設(shè)計(jì)
              10.   發(fā)布日期: 2019-10-07  瀏覽次數(shù): 1,720

                LPC2138的串口帶有16字節(jié)的接收和發(fā)送FIFO,并且接收FIFO的觸發(fā)點(diǎn)可設(shè)為1,4,8,14字節(jié)。

                1)接收

                 

                當(dāng)接收到的字節(jié)數(shù)達(dá)到設(shè)置的觸發(fā)點(diǎn)(通過(guò)FCR寄存器設(shè)置)時(shí),就會(huì)產(chǎn)生接收中斷;而當(dāng)接收到的字節(jié)數(shù)未能達(dá)到設(shè)置的觸發(fā)點(diǎn)(比如觸發(fā)點(diǎn)設(shè)置為14,但是只接收到了10個(gè)字節(jié)的數(shù)據(jù)),那么經(jīng)過(guò)短暫的等待時(shí)間后會(huì)產(chǎn)生超時(shí)中斷。在這兩種情況下需要正確讀取RBR寄存器,妥善保存接收到的數(shù)據(jù)。
                      舉例來(lái)說(shuō),假設(shè)接收FIFO的觸發(fā)點(diǎn)設(shè)置為14,而要接收的數(shù)據(jù)一共有16字節(jié)。那么接收過(guò)程中會(huì)產(chǎn)生兩次中斷:第一次是當(dāng)接收到第14個(gè)字節(jié)時(shí)產(chǎn)生的接收中斷;之后只剩2個(gè)字節(jié)要接收,達(dá)不到觸發(fā)點(diǎn)14,所以經(jīng)過(guò)等待時(shí)間后會(huì)產(chǎn)生超時(shí)中斷。
                      中斷服務(wù)程序里,對(duì)于這兩種中斷可進(jìn)行如下的處理(假設(shè)使用UART1):


                LPC2138的串口中斷程序設(shè)計(jì)

                switch (U1IIR & 0x0E)
                      {
                      case 0x0C:            // 若為超時(shí)中斷(注意此處不要加break)
                      case 0x04:            // 若為接收中斷
                      while ((U1LSR & 0x01) == 1)             // 若U1RBR包含有效數(shù)據(jù)
                      Rec_Buffer[index++] = U1RBR;    // 保存接收到的數(shù)據(jù)
                      }

                      
                      2)發(fā)送

                發(fā)送FIFO并沒(méi)有觸發(fā)點(diǎn)的問(wèn)題。要發(fā)送數(shù)據(jù)時(shí),首先把數(shù)據(jù)寫(xiě)入THR寄存器,之后MCU會(huì)將其移入發(fā)送FIFO緩沖區(qū)中,一旦THR寄存器被移空,就會(huì)產(chǎn)生發(fā)送中斷。換句話說(shuō),在使能了發(fā)送中斷的情況下,每向THR寄存器寫(xiě)一個(gè)字節(jié)就會(huì)引起一次發(fā)送中斷。所以要發(fā)送一系列的數(shù)據(jù)時(shí),只需要發(fā)送第一個(gè)字節(jié)來(lái)啟動(dòng)發(fā)送過(guò)程,剩余的字節(jié)由中斷服務(wù)程序來(lái)完成就可以了。
                      假設(shè)Send_Length為要發(fā)送的總字節(jié)數(shù),程序中的處理如下:


                      U1THR = Txd_Buffer[0];
                      index = 1;
                      
                      void __irq Uart1_isp(void)                           // 中斷服務(wù)程序
                      {
                            if ((U1IIR & 0x0E) == 0x02)                   // 判斷是否為發(fā)送中斷
                            {
                                  if (index != Send_Length)
                                  {
                                        U1THR = Txd_Buffer[index];
                                        index ++;
                                  }
                            }
                      }


                      個(gè)人覺(jué)得,使能發(fā)送中斷會(huì)導(dǎo)致MCU的工作效率變低。因?yàn)橐坏㏕HR寄存器為空就會(huì)進(jìn)入中斷服務(wù)程序,會(huì)出現(xiàn)連續(xù)的無(wú)效中斷。(如果理解有錯(cuò)誤,還請(qǐng)指正)
                      在不使能發(fā)送中斷的情況下,可用查詢(xún)方式實(shí)現(xiàn)以上的發(fā)送過(guò)程:


                      int i;
                      for (i = 0; i < Send_Length; i++)
                     {
                           U1THR = Txd_Buffer[i];
                           while (!(U1LSR & 0x20));         // 等待當(dāng)前字節(jié)發(fā)送完畢
                      }
                來(lái)源;電子工程網(wǎng)


              11. ·上一篇:
                ·下一篇:
              12. 其他關(guān)聯(lián)資訊
                深圳市日月辰科技有限公司
                地址:深圳市寶安區(qū)松崗鎮(zhèn)潭頭第二工業(yè)城A區(qū)27棟3樓
                電話:0755-2955 6626
                傳真:0755-2978 1585
                手機(jī):131 1300 0010
                郵箱:[email protected]

                深圳市日月辰科技有限公司 版權(quán)所有:Copyright?2010-2023 www.xydibang.com 電話:13113000010 粵ICP備2021111333號(hào)
                <strong id="0toem"><dl id="0toem"></dl></strong><b id="0toem"><menuitem id="0toem"></menuitem></b>

                    <b id="0toem"><menuitem id="0toem"></menuitem></b>
                  1. <code id="0toem"><abbr id="0toem"></abbr></code>
                    <strong id="0toem"><dl id="0toem"></dl></strong>
                    <kbd id="0toem"></kbd>
                            1. <code id="0toem"></code>
                              <th id="0toem"><progress id="0toem"></progress></th><strong id="0toem"><form id="0toem"></form></strong>

                              <th id="0toem"></th>
                            2. 久久久久久久麻豆 | 男女插逼网站 | 日韩一级品电影 | 国产三级久久久精品麻豆三级 | 无码尤物波多野结衣性开放∧V |