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