基于PC/104總線的多功能擴展通訊模塊的設計
圖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可以滿足盡大部分控制系統的通訊要求。該設計已被一個分布式防空系統所采用,在歷次聯調試驗中性能指標均達到了要求。
評論