EM9287是英創公司新近推出的,專門針對網絡通訊應用的工控主板產品,通訊接口方面以獨立雙以太網口、雙CAN接口以及7路標準串口為特色。若客戶應用有HMI的需求,通常可選擇預裝Windows CE6.0操作系統的主板產品,另一方面,若不需要圖形顯示功能的,選擇預裝Linux-3.9.7操作系統的EM9287,則更能發揮其網絡通訊的能力。進一步的,EM9287可把未使用的LCD顯示接口轉換成16-bit的精簡ISA擴展總線,作為主板與客戶專用電路單元的數據傳輸通道。EM9287的精簡ISA總線的數據傳輸速度最高可達8MB/s,可滿足絕大多數用戶擴展電路的數據傳輸需求。本文以下部分,主要介紹EM9287的精簡ISA總線的技術特性,以及在Linux環境下,應用程序實現ISA總線數據讀寫的方法。
EM9287主板上共有4組接口排針,分別命名為CN1 – CN4,如下圖所示:
EM9287的CN1 – CN4所在位置示意圖
其中的CN4即為精簡ISA總線的接口排針。由于LCD顯示被作為了EM9287的標準配置,因此一般情況下,EM9287只焊了CN3插座,沒有焊CN4的插針。若客戶要求所購的EM9287支持精簡ISA總線,則需要在購買時特別申明此需求。注意,支持精簡ISA總線的EM9287主板,不再焊接CN3插座,而是帶有CN4雙排插針。與CN1和CN2不一樣,CN4為2mm間距的雙排插針。
CN4上個插針的信號定義如下表:
信號名稱及簡要描述 | CN4 | 信號名稱及簡要描述 | |
PIN# | PIN# | ||
NC | 1 | 2 | ISA_CS#,ISA總線片選信號 |
ISA_RD#,ISA總線讀信號 | 3 | 4 | ISA_WE#,ISA總線寫信號 |
ISA_A0,ISA地址總線 | 5 | 6 | ISA_A1,ISA地址總線 |
ISA_A2,ISA地址總線 | 7 | 8 | ISA_A3,ISA地址總線 |
ISA_A4,ISA地址總線 | 9 | 10 | ISA_A5,ISA地址總線 |
ISA_A6,ISA地址總線 | 11 | 12 | ISA_A7,ISA地址總線 |
ISA_D0,ISA數據總線(LSB) | 13 | 14 | ISA_D1,ISA數據總線 |
ISA_D2,ISA數據總線 | 15 | 16 | ISA_D3,ISA數據總線 |
ISA_D4,ISA數據總線 | 17 | 18 | ISA_D5,ISA數據總線 |
ISA_D6,ISA數據總線 | 19 | 20 | ISA_D7,ISA數據總線 |
ISA_D8,ISA數據總線 | 21 | 22 | ISA_D9,ISA數據總線 |
ISA_D10,ISA數據總線 | 23 | 24 | ISA_D11,ISA數據總線 |
ISA_D12,ISA數據總線 | 25 | 26 | ISA_D13,ISA數據總線 |
ISA_D14,ISA數據總線 | 27 | 28 | ISA_D15,ISA數據總線(MSB) |
GND | 29 | 30 | GND |
3.3V 電源輸出 | 31 | 32 | 3.3V 電源輸出 |
所有接口信號的電平均為3.3V TTL。EM9287的精簡ISA總線支持雙向16-bit數據總線,8位地址總線,以及3條控制總線。3條總線控制信號(片選、讀脈沖、寫脈沖)均為低電平有效。單數據讀寫的總線周期為360ns,而多數據讀寫的總線則只有240ns,可保證每秒8M字節的數據吞吐能力。精簡ISA總線的典型總線時序如下:
單數據寫時序
單數據讀時序
數據塊寫時序
數據塊讀時序
精簡ISA總線驅動的設備節點為“/dev/em9287_isa”,通過標準的文件open函數打開:
int fd;
fd = open('/dev/em9287_isa', O_RDWR);
EM9287精簡ISA總線的地址范圍為0 – 255。為了簡化應用程序,避免使用ioctl專用定義,總線地址通過標準函數lseek來設置:
unsigned int offset;
//設置地址到offset
lseek(fd, offset, SEEK_SET);
總線讀寫的數據盡管只有16位,但驅動程序要求的數據類型為32位格式,具體可選unsigned int或u32。32位變量中的低16位為真正的總線數據,高16位無意義。調用函數write將啟動總線寫,調用函數read將啟動總線讀。
寫操作的基本調用形式為:
int rc;
unsigned int buf[]; //數據buffer
unsigned int len; //實際寫的數據長度
//準備需要寫出的數據....
rc = write(fd, buf, len * sizeof(unsigned int));
相應地,讀操作的基本調用形式為:
rc = read(fd, buf, len * sizeof(unsigned int));
//處理在buf的讀取數據....
讀寫數據的長度至少為1,最長不能超過16K(16384)。在進行數據塊讀寫時,需要注意,16K數據的讀或寫將耗時4ms,而Linux分給每個線程的時間片最長只有10ms。一般情況下,為了保證系統的及時響應,每個線程運行的時間都不宜過長。
-
WINDOWS
+關注
關注
4文章
3556瀏覽量
89055 -
嵌入式主板
+關注
關注
7文章
6086瀏覽量
35505
發布評論請先 登錄
相關推薦
評論