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