• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 手機與無線通信 > 設計應用 > 一種基于MAX3232的TMS320F2812異步串行通信系統研究和實現

    一種基于MAX3232的TMS320F2812異步串行通信系統研究和實現

    作者: 時間:2012-03-07 來源:網絡 收藏

    3 軟件設計
    3.1 SCI模塊的初始化
    對DSP芯片的控制是通過對它的寄存器的讀寫來完成的,的SCI模塊包括13個寄存器。要使SCI模塊能夠正常工作,必須對它進行初始化。其中設置主要包括:運行模式、協議、波特率、字符長度、奇/偶校驗、停止位個數、中斷使能及級別確定等。下面為本設計中對SCI模塊的初始化程序:
    void InitSciA ()
    {
    //配置SCITXD和SCIRXD
    EALLOW:
    GpioMuxRegs.CPFMUX.bit.SCITXDA_GPIOF4=1;
    GpioMuxRegs.CPFMUX.bit.SCIRXDA_GPIOF5=1;
    EDIS:
    //軟件復位SCI
    SciaRegs.SCIGTL1.bit.SWRESET=0;
    //設置字符格式、協議、模式
    SciaRegs.SCICCR. bit. SCICHAR=7;
    SciaRegs.SCICCR.bit.PARITYENA=0;
    SciaRegs.SCICCR.bit.LOOPBKENA=0;
    SciaRegs.SCICCR.bit.STOPBITS=0;
    SciaRegs.SCICCR. bit.ADDRIDLE. MODE=0;
    //設置波特率為9600,LSPCLK=30MHz
    SciaRegs.SCIHBAUD=0x0001;
    SciaRegs.SCILBAUD=0x0085;
    //使能發送和接收器
    SciaRegs.SCICTL1.bit.TXENA=1;
    SciaRegs.SCICTL1.bit.RXENA=1;
    //使能中斷
    PieCtrl.PIEIER9. bit.INTx1=1;
    PieCtrl.PIEIER9. bit.INTx2=1;
    //退出復位狀態
    SciaRegs.SCICTL1.bit.SWRESET=1;
    }
    3.2 SCI模塊發送和接收數據的機制
    SCI模塊發送和接收數據有兩種方式:一種是查詢方式,另一種是中斷方式。
    查詢方式:就是程序不斷去查詢各自的狀態標志位。對于發送數據,需要查詢的是TXRDY位,如果該位為1,說明SCITXBUF已經準備好接收下一個發送數據。當數據寫入SCITXBUF后,該位會自動清零,此時如果TXENA=1,發送移位寄存器就會將SCITXBUF中的數據發送出去。而接收數據時需要查詢RXRDY位,當SCIRXBUF已經準備好一個等待CPU讀取的數據時,就會將該位置1,當數據被CPU讀走后,RXRDY會自動清零。
    中斷方式:在該種方式下,需要我們首先使能外設級、PIE級和CPU級中斷。此時TXRDY和RXRDY變成了中斷標志位,當TXRDY為1時,就會產生中斷事件,如果各級中斷都已經使能,則程序會進入相應的中斷處理函數,完成數據的發送。而當RXRDY置位時,就會產生接收中斷,如果各級中斷都已經使能,則程序進入相應的中斷處理函數,完成數據的接收。這里值得注意的是,2812的外設的中斷標志位一定要手動復位,但是SCI模塊是個例外,它的中斷標志位會在響應中斷后自動復位。
    通過對查詢和中斷方式程序的分析可以看出,查詢函數位于主函數的for循環內,通過for循環不斷查詢TXRDY和RXRDY的狀態,因此,程序的運行效率比較低,但是程序比較簡單,易于。對于中斷方式,只要相應的中斷標志位置位,并且所有中斷級都已被使能,就能直接進入中斷處理函數,相應的功能。因此,程序的運行效率高,但程序比較復雜。綜合考慮,最終選取數據接收采用中斷方式,數據發送采用查詢方式。圖2和圖3分別為查詢方式和中斷方式的程序流程圖。

    本文引用地址:http://www.czjhyjcfj.com/article/155198.htm

    b.jpg c.jpg




    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 正安县| 岗巴县| 宁津县| 杭州市| 福海县| 奈曼旗| 和龙市| 兴国县| 桑植县| 桂阳县| 株洲市| 蒙城县| 晋州市| 新安县| 双柏县| 额济纳旗| 天镇县| 洞头县| 安化县| 大新县| 海丰县| 南江县| 安塞县| 宣汉县| 罗定市| 桦南县| 万宁市| 朝阳市| 梧州市| 洞口县| 华亭县| 江源县| 象州县| 博客| 浦江县| 屯留县| 顺平县| 中超| 四川省| 远安县| 南安市|