英創公司的ARM9工控主板產品 EM9360是一款預裝WinCE操作系統,以多種通訊接口、支持各種擴展為其技術特色。EM9360的板載的3路以太網接口、6路串口以及1路CAN接口,均帶有標準的WinCE驅動程序,支持應用程序通過WinCE相應的API函數來操作各路網絡接口。此外EM9360還與英創公司其他ARM9主板一樣,帶有精簡ISA擴展總線以及12位通用GPIO,精簡ISA總線的基本使用方法可參考英創網站的相關信息,而本文則主要介紹EM9360主板中12位GPIO的各種使用方法。
EM9360的12位通用數字IO的各種使用方法列表如下:
數字IO | 高位地址 | 時間同步 | 外部中斷 | RS485 | 矩陣鍵盤 |
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均處于數字輸入狀態,通過相應的API函數(定義在em9360_isa_dio.h文件中)這12位GPIO可獨立設置為輸入或輸出,輸出電平也可獨立設置。
精簡ISA總線的高位地址線
基本的精簡ISA總線只包含低5為地址總線SA0 – SA4,對大多數IO類型的擴展,5位地址線已足夠使用。為了支持存儲器類型的擴展,EM9360提供對高位地址總線的支持,其中的SA5 – SA12與GPIO4 – GPIO11復用管腳。為了激活高位地址總線,應用程序需在程序初始化階段,通用調用API函數
int ISA_ReadUchar( int nSeg, UINT nOffset, UCHAR* pRdValue );
進行一次“啞讀”即可。具體需要激活的高位地址還可通過偏移量nOffset的輸入值來選擇,但至少需要激活SA5和SA6這2位地址總線。舉例說明如下:
1、激活SA5和SA6,而其他的還是保持為GPIO,則nOffset = 0x007F;
2、激活SA5–SA7,而其他的還是保持為GPIO,則nOffset = 0x00FF;
3、激活SA5–SA12,最大訪問8KB空間,則nOffset = 0x1FFF;
在使用高位地址擴展時,需要注意以下事宜:
·精簡ISA總線有2個片選輸出,其中CS1#只支持最大1KB的訪問空間,而CS0#則可支持最大8KB的訪問空間,所以通常用CS0#作為存儲器單元的片選控制。
·若客戶應用還需要訪問更大空間,EM9360還可引出SA13 – SA15信號,使CS0#的訪問空間達到64KB。
精簡ISA總線擴展的存儲器單元一般只能用作數據存儲,不能作為程序運行空間。
·激活的地址線應當是由小至大,連續地址空間。
時間同步功能
EM9360支持時間同步功能,基本的使用方法是應用程序打開“PPS1:”設備驅動程序,此時GPIO0將自動轉為同步脈沖輸入PPS_IN#(低電平有效)。PPS驅動程序被PPS_IN#脈沖觸發后,將立即發送時間同步事件,供上層應用線程做必要處理。根據用戶設置,PPS驅動程序還可在GPIO1上輸出同步脈沖PPS_OUT#(同樣是低電平有效),以及自動對當前時間進行整秒調整。
更多的外部中斷
基本的精簡ISA總線只提供1條外部硬件中斷輸入IRQ1,上升沿有效。若客戶應用需要擴展更多的通訊接口,如增加第二路CAN接口、增加8路串口等等,這時僅僅一條外部中斷就不夠了,需要更多的外部中斷支持,GPIO2和GPIO3則可用于外部中斷輸入。事實上EM9360的驅動已可支持類似這樣的擴展,感興趣的客戶可與英創公司聯系了解進一步的使用方法。
作為RS485接口的RST#
GPIO6–GPIO11還可分別作為COM2 – COM7的RTS#控制信號,低電平有效。對RS485接口,若需要使用RTS方向控制方案,則在設置串口參數時,需要特別地把RTS控制段設置為RTS_CONTROL_TOGGLE,相關的代碼如下所示:
DCB dcb; // 定義參數控制塊
GetCommState( m_hSer, &dcb ); // 讀取當前參數塊
dcb.fRtsControl = RTS_CONTROL_TOGGLE; // 設置RTS方向控制
SetCommState(m_hSer, &dcb); // 重設串口參數
上述代碼中m_hSer為打開串口文件“COMx:”的文件句柄。
在使用RS485通訊時,一般把RTS#有效(低電平)作為發送狀態,RTS#無效(高電平)為接收狀態。從發送狀態切換回接收狀態,作為方向控制信號的RTS#,可能會有最長1ms的延時,因此為了防止系統出現收發狀態沖突的情況,RS485的波特率最好不超過9600bps。
矩陣鍵盤
EM9360支持由GPIO驅動的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已內置了基于GPIO的矩陣鍵盤驅動程序,加載方法是在應用程序中調用:
HANDLE hDevice = NULL;
hDevice = ActivateDevice( TEXT('Drivers\\gpio_keypad'), 0);
注意在應用程序退出時,應卸載該驅動程序,以避免矩陣鍵盤驅動程序被反復加載。
我們會根據客戶的應用需求,對EM9360的GPIO賦予更多的功能,但無論GPIO有多少功能,在面向具體應用時,每位GPIO只能選擇一種應用。對此,客戶在進行GPIO功能配置時需特別小心,避免在一個管腳選擇多種功能,造成運行結果異常,長期處于這種異常狀態還可能導致主板硬件損壞。
已購買EM9360的客戶,若需要使用本文所介紹的新增功能,如RS485 RTS#方向控制等,一般需要更新內核和SDK。可以把主板寄回由我們免費更新內核,并從英創公司網站上下載新的SDK,就可使用本文所介紹的全部功能了。
成都英創信息技術有限公司 028-8618 0660