英創(chuàng)公司的ARM9工控主板產(chǎn)品 EM9360是一款預(yù)裝WinCE操作系統(tǒng),以多種通訊接口、支持各種擴(kuò)展為其技術(shù)特色。EM9360的板載的3路以太網(wǎng)接口、6路串口以及1路CAN接口,均帶有標(biāo)準(zhǔn)的WinCE驅(qū)動(dòng)程序,支持應(yīng)用程序通過(guò)WinCE相應(yīng)的API函數(shù)來(lái)操作各路網(wǎng)絡(luò)接口。此外EM9360還與英創(chuàng)公司其他ARM9主板一樣,帶有精簡(jiǎn)ISA擴(kuò)展總線以及12位通用GPIO,精簡(jiǎn)ISA總線的基本使用方法可參考英創(chuàng)網(wǎng)站的相關(guān)信息,而本文則主要介紹EM9360主板中12位GPIO的各種使用方法。
EM9360的12位通用數(shù)字IO的各種使用方法列表如下:
數(shù)字IO |
高位地址 |
時(shí)間同步 |
外部中斷 |
矩陣鍵盤 |
|
GPIO0 |
PPS_IN# |
||||
GPIO1 |
PPS_OUT# |
||||
GPIO2 |
IRQ2 |
||||
GPIO3 |
IRQ3 |
||||
GPIO4 |
ISA_SA5 |
4X4矩陣鍵盤 |
|||
GPIO5 |
ISA_SA6 |
||||
GPIO6 |
ISA_SA7 |
COM2_RST# |
|||
GPIO7 |
ISA_SA8 |
COM3_RST# |
|||
GPIO8 |
ISA_SA9 |
COM4_RST# |
|||
GPIO9 |
ISA_SA10 |
COM5_RST# |
|||
GPIO10 |
ISA_SA11 |
COM6_RST# |
|||
GPIO11 |
ISA_SA12 |
COM7_RST# |
通用GPIO
EM9360上電后的各位IO均處于數(shù)字輸入狀態(tài),通過(guò)相應(yīng)的API函數(shù)(定義在em9360_isa_dio.h文件中)這12位GPIO可獨(dú)立設(shè)置為輸入或輸出,輸出電平也可獨(dú)立設(shè)置。
精簡(jiǎn)ISA總線的高位地址線
基本的精簡(jiǎn)ISA總線只包含低5為地址總線SA0 – SA4,對(duì)大多數(shù)IO類型的擴(kuò)展,5位地址線已足夠使用。為了支持存儲(chǔ)器類型的擴(kuò)展,EM9360提供對(duì)高位地址總線的支持,其中的SA5 – SA12與GPIO4 – GPIO11復(fù)用管腳。為了激活高位地址總線,應(yīng)用程序需在程序初始化階段,通用調(diào)用API函數(shù)
int ISA_ReadUchar( int nSeg, UINT nOffset, UCHAR* pRdValue );
進(jìn)行一次“啞讀”即可。具體需要激活的高位地址還可通過(guò)偏移量nOffset的輸入值來(lái)選擇,但至少需要激活SA5和SA6這2位地址總線。舉例說(shuō)明如下:
1、激活SA5和SA6,而其他的還是保持為GPIO,則nOffset = 0x007F;
2、激活SA5–SA7,而其他的還是保持為GPIO,則nOffset = 0x00FF;
3、激活SA5–SA12,最大訪問(wèn)8KB空間,則nOffset = 0x1FFF;
在使用高位地址擴(kuò)展時(shí),需要注意以下事宜:
·精簡(jiǎn)ISA總線有2個(gè)片選輸出,其中CS1#只支持最大1KB的訪問(wèn)空間,而CS0#則可支持最大8KB的訪問(wèn)空間,所以通常用CS0#作為存儲(chǔ)器單元的片選控制。
·若客戶應(yīng)用還需要訪問(wèn)更大空間,EM9360還可引出SA13 – SA15信號(hào),使CS0#的訪問(wèn)空間達(dá)到64KB。
精簡(jiǎn)ISA總線擴(kuò)展的存儲(chǔ)器單元一般只能用作數(shù)據(jù)存儲(chǔ),不能作為程序運(yùn)行空間。
·激活的地址線應(yīng)當(dāng)是由小至大,連續(xù)地址空間。
時(shí)間同步功能
EM9360支持時(shí)間同步功能,基本的使用方法是應(yīng)用程序打開(kāi)“PPS1:”設(shè)備驅(qū)動(dòng)程序,此時(shí)GPIO0將自動(dòng)轉(zhuǎn)為同步脈沖輸入PPS_IN#(低電平有效)。PPS驅(qū)動(dòng)程序被PPS_IN#脈沖觸發(fā)后,將立即發(fā)送時(shí)間同步事件,供上層應(yīng)用線程做必要處理。根據(jù)用戶設(shè)置,PPS驅(qū)動(dòng)程序還可在GPIO1上輸出同步脈沖PPS_OUT#(同樣是低電平有效),以及自動(dòng)對(duì)當(dāng)前時(shí)間進(jìn)行整秒調(diào)整。
更多的外部中斷
基本的精簡(jiǎn)ISA總線只提供1條外部硬件中斷輸入IRQ1,上升沿有效。若客戶應(yīng)用需要擴(kuò)展更多的通訊接口,如增加第二路CAN接口、增加8路串口等等,這時(shí)僅僅一條外部中斷就不夠了,需要更多的外部中斷支持,GPIO2和GPIO3則可用于外部中斷輸入。事實(shí)上EM9360的驅(qū)動(dòng)已可支持類似這樣的擴(kuò)展,感興趣的客戶可與英創(chuàng)公司聯(lián)系了解進(jìn)一步的使用方法。
作為RS485接口的RST#
GPIO6–GPIO11還可分別作為COM2 – COM7的RTS#控制信號(hào),低電平有效。對(duì)RS485接口,若需要使用RTS方向控制方案,則在設(shè)置串口參數(shù)時(shí),需要特別地把RTS控制段設(shè)置為RTS_CONTROL_TOGGLE,相關(guān)的代碼如下所示:
DCB dcb; // 定義參數(shù)控制塊
GetCommState( m_hSer, &dcb ); // 讀取當(dāng)前參數(shù)塊
dcb.fRtsControl = RTS_CONTROL_TOGGLE; // 設(shè)置RTS方向控制
SetCommState(m_hSer, &dcb); // 重設(shè)串口參數(shù)
上述代碼中m_hSer為打開(kāi)串口文件“COMx:”的文件句柄。
在使用RS485通訊時(shí),一般把RTS#有效(低電平)作為發(fā)送狀態(tài),RTS#無(wú)效(高電平)為接收狀態(tài)。從發(fā)送狀態(tài)切換回接收狀態(tài),作為方向控制信號(hào)的RTS#,可能會(huì)有最長(zhǎng)1ms的延時(shí),因此為了防止系統(tǒng)出現(xiàn)收發(fā)狀態(tài)沖突的情況,RS485的波特率最好不超過(guò)9600bps。
矩陣鍵盤
EM9360支持由GPIO驅(qū)動(dòng)的4×4矩陣鍵盤,具體配置如下:
虛擬鍵碼 |
GPIO5 - KIN0 |
GPIO7 - KIN1 |
GPIO8 - KIN2 |
GPIO10 - KIN3 |
GPIO4 - KOUT0 |
VK_ESCAPE |
VK_0 |
VK_DECIMAL |
VK_BACK |
GPIO6 - KOUT1 |
VK_CAPITAL |
VK_1 |
VK_2 |
VK_3 |
GPIO8 - KOUT2 |
VK_SPACE |
VK_4 |
VK_5 |
VK_6 |
GPIO10 - KOUT3 |
VK_RETURN |
VK_7 |
VK_8 |
VK_9 |
EM9360已內(nèi)置了基于GPIO的矩陣鍵盤驅(qū)動(dòng)程序,加載方法是在應(yīng)用程序中調(diào)用:
HANDLE hDevice = NULL;
hDevice = ActivateDevice( TEXT('Drivers\\gpio_keypad'), 0);
注意在應(yīng)用程序退出時(shí),應(yīng)卸載該驅(qū)動(dòng)程序,以避免矩陣鍵盤驅(qū)動(dòng)程序被反復(fù)加載。
我們會(huì)根據(jù)客戶的應(yīng)用需求,對(duì)EM9360的GPIO賦予更多的功能,但無(wú)論GPIO有多少功能,在面向具體應(yīng)用時(shí),每位GPIO只能選擇一種應(yīng)用。對(duì)此,客戶在進(jìn)行GPIO功能配置時(shí)需特別小心,避免在一個(gè)管腳選擇多種功能,造成運(yùn)行結(jié)果異常,長(zhǎng)期處于這種異常狀態(tài)還可能導(dǎo)致主板硬件損壞。
已購(gòu)買EM9360的客戶,若需要使用本文所介紹的新增功能,如RS485 RTS#方向控制等,一般需要更新內(nèi)核和SDK??梢园阎靼寮幕赜晌覀兠赓M(fèi)更新內(nèi)核,并從英創(chuàng)公司網(wǎng)站上下載新的SDK,就可使用本文所介紹的全部功能了。
-
嵌入式主板
+關(guān)注
關(guān)注
7文章
6085瀏覽量
35295
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論