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

    EEPW首頁 > EDA/PCB > 設計應用 > 基于CPLD的RS-232串口通信實現

    基于CPLD的RS-232串口通信實現

    作者: 時間:2012-02-29 來源:網絡 收藏

    通過狀態圖可以方便、準確地得到程序設計框圖如圖4所示。

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

    f.JPG



    3 各模塊設計
    3.1 波特率發生器
    通信必須要設定波特率,本設計采用的波特率為9 600 bit/s。產生波特率的時鐘頻率是越高越好,這樣才可產生較高且精確的波特率。設計選用50M主頻率要產生9600bit/s波特率,每傳送一位數據需要5 208.33個時鐘周期。取一個最接近的數是5 208,則波特率為9 600.61,其誤差約為0.006%,誤碼率很低可以確保通信正常。
    波特率發生器要解決的另一個關鍵性問題是確保準確地捕獲起始位“0”。即時準確地捕獲起始位不僅決定通信是否順暢開始,而且還影響后續的數據采樣過程可靠地進行。方案采取了16分頻的波特率發生器,即通過對50 M總時鐘源分頻,得到一個9 600x16 Hz的時鐘進行數據傳輸,這樣每16個時鐘信號采樣1 bit數據。在Rxd數據接收端口接收到從空閑高電平“1”跳變為起始位低電平“0”信號后,連續8個分頻周期確認是否是起始位。若是連續的低電平則捕獲起始位,自此之后每16個時鐘周期讀取1 bit數據。這種方法不僅確保了起始位的準確捕獲,而且使數據采樣點處于了數據的正中央保證了數據的準確。
    3.2 接收器
    在波特率發生器捕獲起始位并啟動后,接收器將開始工作。其主要工作是接收每一位數據,將串行數據移位存入緩沖寄存器,并在接收完一字節數據后將數據存入鎖存器完成串并轉換,同時發出char_ok信號通知邏輯控制模塊一個字節的數據已經接收完畢。
    接收器的部分程序如下所示:
    g.JPG
    3.3 邏輯處理模塊
    邏輯處理模塊是模擬UART的決策模塊。它主要完成PC機與的握手、數據處理和數據校驗、狀態分析與給收發模塊提供決策。
    PC機要向發數據時,先向發送FF,FF表示PC機要與建立聯系。CPLD收到這個信息后,由邏輯模塊的talk信號通知發射模塊握手情況,發送器通過給PC機反饋信息,DD表示CPLD收到了PC機的要求并同意建立聯系,CC表示握手不成功PC機可以再次發出請求。握手成功后,PC機要向CPLD發出命令字符,E1表示寫,E2表示讀。
    隨后進入數據接收或發送狀態,每個數據包接收完畢后邏輯處理模塊進入下一狀態——數據校驗狀態。根據上文提到的本設計的數據校驗采用和校驗,數據校驗完后邏輯處理模塊會根據校驗結果給出信號check,通知發送模塊Txd發送反饋信息給PC機。
    邏輯控制模塊的部分程序如下所示:
    h.JPG



    關鍵詞: CPLD 232 RS 串口

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 大英县| 赤峰市| 湟中县| 河南省| 普定县| 什邡市| 屯门区| 绿春县| 凤冈县| 通化县| 石林| 宝山区| 高密市| 综艺| 栾川县| 黑山县| 怀仁县| 农安县| 罗田县| 江达县| 汉川市| 孟州市| 文水县| 依兰县| 探索| 叶城县| 上饶市| 邮箱| 龙泉市| 班玛县| 运城市| 陆丰市| 武清区| 咸丰县| 宁武县| 阜南县| 海盐县| 临湘市| 成都市| 光泽县| 和顺县|