新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于PC/104總線的多功能擴展通訊模塊的設計

        基于PC/104總線的多功能擴展通訊模塊的設計

        作者: 時間:2016-12-20 來源:網絡 收藏

          圖2用VHDL語言可以很方便地實現。其具體描述如下:

          SEL(0)<=AEN;

          SEL(1)<=NIOW AND NIOR;

          SEL(2)<=ADDR(0);

          SEL(3)<=ADDR(1);

          SEL(4)<=ADDR(2);

          SEL(5)<=ADDR(3);

          SEL(6)<=ADDR(4);

          SEL(7)<=ADDR(5);

          SEL(8)<=ADDR(6);

          WITH SEL SELECT

          Y<="1111110" WHEN "010001000",//IO/110 地址操縱

          "1111101" WHEN "010001100",//IO/118 數據操縱

          "1111011" WHEN "010010000",//IO/120 串口1

          "1110111" WHEN "010010100",//IO/128 串口2

          "1101111" WHEN "010011000",//IO/130 串口3

          "1011111" WHEN "010011100",//IO/138 串口4

          "0111111" WHEN "010100000",//IO/140 讀中斷號

          "1111111" WHEN OTHERS;

          END BLOCK CODE;

          3.2 104總線與CAN控制器的接口

          如前所述,104總線與ISA總線兼容而與CAN控制器要求的時序不同,設計中將104總線中的BALE、地址和讀寫信號經CPLD邏輯整合后提供給CAN控制器,同時從數據線分時送出操縱地址和操縱數,滿足CAN控制器的時序要求。時序整合的VHDL語言如下:

          ALE<=(NOT Y(0)) AND BALE;

          CSCAN<=Y(1);

          IORCAN<=Y(1) OR NIOR;

          IOWCAN<=Y(1) OR NIOW;

          雙向數據緩沖的VHDL實現可以在很多參考書中找到,此處從略。

          3.3 異步通訊接口電路及中斷共享電路

          16554的接口可與PC104實現無縫連接,CPLD實現選通和讀寫邏輯控制,異步通訊與CAN控制器共用CPLD內的雙向數據緩沖電路。

          異步通訊控制單元16554有很強的中斷能力,四個串行控制用具有各自的中斷引腳,使用靈活。但系統的中斷資源有限,假如每一個控制器都占用一個中斷號,通訊模塊需要占用五個中斷號。為了節約中斷資源,設計中將4個串口控制器共享一個中斷,而CAN總線控制器單獨占用一個中斷。

          為了實現共享,設置了一個中斷向量寄存器,當發生中斷時首先讀取中斷向量寄存器以定位發出中斷的串行口。其原理見圖3。

        中斷共享電路

        圖3 中斷共享電路

          VHDL語言實現如下:

          GMID<=NIOR OR Y(6);

          INTSER<=INTABCD(0) OR INTABCD(1) OR INTABCD(2) OR INTABCD(3);

          INTID<=INTABCD WHEN (GMID=‘0‘)

          ELSE

          "ZZZZ"

        4 結論

          本設計利用CPLD實現了104總線和CAN控制器之間的時序轉換、整個電路的邏輯控制以及中斷共享,使電路設計結構緊湊,性能穩定。擴展了RS-232、RS-485和CAN接口的104PC可以滿足盡大部分控制系統的通訊要求。該設計已被一個分布式防空系統所采用,在歷次聯調試驗中性能指標均達到了要求。


        上一頁 1 2 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 山阴县| 嘉峪关市| 晋江市| 敦化市| 保亭| 津市市| 来宾市| 新营市| 阜阳市| 阳山县| 涞源县| 郎溪县| 修武县| 九龙坡区| 伽师县| 松原市| 馆陶县| 安达市| 新蔡县| 逊克县| 长岭县| 囊谦县| 日土县| 丹江口市| 滁州市| 安多县| 翁源县| 辽宁省| 芦溪县| 新闻| 曲靖市| 罗山县| 新竹市| 睢宁县| 博客| 乌拉特前旗| 宝兴县| 湘西| 武邑县| 明水县| 敦化市|