英創公司的嵌入式網絡模塊系列產品均具有精簡ISA擴展總線,通常包括若干地址總線、8位數據總線、讀寫控制線、片選控制線以及中斷請求線。英創公司所提供的評估開發底板將這些信號線制定了一個接口標準,采用雙排20芯IDC插針,交錯排列,用戶可用該擴展總線進行硬件擴展。片選線CS1出廠默認選擇地址段為300H—37FH,例如,當(A6A5A4A3A2A1A0)=(0000101’b),CS1加5條地址線的譯碼輸出端口地址為305H,以下是擴展總線接口的定義:
1、總線時序圖,以及和C語言、匯編指令之間的關系
為了便于用戶理解精簡ISA總線接口如何進行編程,本文簡單介紹C語言中的指令、用戶操作的函數與總線的時序之間的關系。各個不同模塊的CS1#片選地址范圍不同,詳見相關技術手冊,下面以ETR232i的使用為例進行講解,在此CS1#對應的片選地址范圍為300h——37Fh,其中A0——A6的譯碼為0ah。
C語言端口輸出函數:
outportb ( 0x30a, ub1 ); //把ub1字節送到0x30a寄存器
對應的匯編指令為:
mov dx , 0x30a
mov al , byte ptr ub1;byte ptr ub1為變量ub1對應的存儲器
out dx , al
對應的總線寫時序圖為(本文中的總線周期均以ETR232i模塊為例):
IO輸出指令產生的總線時序
C語言端口輸入函數:
char ub1 = inportb ( 0x30a ); //把0x30a地址寄存器的內容讀入變量ub1
對應的匯編指令為:
mov dx , 0x30a
in al , dx
mov byte ptr ub1, al ; byte ptr ub1為變量ub1對應的存儲器
對應的總線時序關系為:
IO輸入指令產生的總線時序
2、用74’s邏輯器件擴展8路輸入8路輸出
電路如下圖所示,用一片74HCT139做譯碼,則在讀300H端口(由于只有A0地址線參與譯碼,所以302H,304H等地址同樣也選通該片74HCT245)的時候,74HCT245將外部輸入的狀態送到數據總線,此值存儲在300H地址中,300H.D0為INPUT0,以此類推,300H.D7為INPUT7。輸入操作的C語言語句為:
Data = inportb ( 0x300 ); //把外部狀態存儲在0x300端口
同理,在寫300H端口的時候,74HCT273將數據總線上的數據鎖存,只有當下一次再有數據輸出的時候此鎖存值才會改變。300H.D0為OUTPUT0,以此類推,300H.D7為OUTPUT7。當系統復位或上電啟動時,74HCT273的輸出清零。輸出操作的C語言語句為:
outportb ( 0x300, data ); //把輸出字節送到0x300端口
為了電平兼容起見,建議在選用上述器件的時候選擇HCT系列。
用74’s邏輯器件擴展8路輸入8路輸出
3、用精簡ISA總線進行串口擴展
在需要使用中斷控制的場合,利用擴展中的IRQ中斷請求信號線,可以實現。以擴展一片16C550為實例進行說明,電路圖如下所示。
16C550擴展單元