EM9280是英創公司即將推出的新型工控主板產品。與英創公司的其他主板產品一樣,EM9280帶有32位通用數字IO(以下簡稱GPIO)。EM9280的各位GPIO的接口電平均為3.3V TTL電平,上電后均處于輸入狀態;各位GPIO的方向均可獨立可設置,以方便使用。EM9280提供有標準的設備驅動程序API,應用程序可直接通過這些API函數來操作這些GPIO,EM9280的資料光盤上提供有GPIO操作的C/C++和C#的范例程序。對GPIO的操作的基本方法是打開GPIO的設備驅動文件“PIO1:”,然后通過調用DeviceIoContrtol來對GPIO進行設置或讀取GPIO管腳的輸入狀態。其具體的操作定義在bsp_drivers.h中:
#define GPIO_IOCTL_OUT_ENABLE // 激活指定GPIO的輸出功能
#define GPIO_IOCTL_OUT_DISABLE // 禁止指定GPIO的輸出功能
#define GPIO_IOCTL_OUT_SET // GPIO輸出高電平
#define GPIO_IOCTL_OUT_CLEAR // GPIO輸出低電平
#define GPIO_IOCTL_PIN_STATE // 讀取指定GPIO的輸入狀態
盡管EM9280的GPIO可以按統一的API函數來操作,但由于各位GPIO的實現機制的不同,其相應速度是有所區別的。EM9280的GPIO按相應速度分成低速和高速兩類。具體分類如下表所示:
GPIO管腳 | 類型 | 簡要說明 |
GPIO0 - GPIO1 | 高速GPIO | API函數執行時間大約10us |
GPIO2 - GPIO5 | 低速GPIO | API函數執行時間大約100us |
GPIO6 - GPIO7 | 高速GPIO | API函數執行時間大約10us |
GPIO8 - GPIO9 | 低速GPIO | API函數執行時間大約100us |
GPIO10 - GPIO11 | 高速GPIO | API函數執行時間大約10us |
GPIO12 - GPIO19 | 低速GPIO | API函數執行時間大約100us |
GPIO20 - GPIO31 | 高速GPIO | API函數執行時間大約10us |
由于存在比較大的執行時間的差異,因此在執行讀取GPIO狀態操作時,也要求指定需要具體讀取的是哪幾位GPIO。指定的方法是把需要讀取的GPIO對應位置1,不需要讀取的則為0,例如:
UINT32 u32StateBits = GPIO0; // 指定需要讀取的GPIO,這里為GPIO0
UINT32 u32StateRead;
if (!DeviceIoControl(hGpio, // file handle to the driver
GPIO_IOCTL_PIN_STATE, // I/O control code
&u32StateBits, // in buffer
sizeof(UINT32), // in buffer size
&u32StateRead, // out buffer
sizeof(UINT32), // out buffer size
NULL, // pointer to number of bytes returned
NULL)) // ignored (=NULL)
{
// 出錯處理……
}
// u32StateRead包含讀取的GPIO狀態
在大多數具體應用中,每次往往只需要讀取一位GPIO的狀態,因此只指定所需的GPIO即可,以保證API函數執行時間最快。對其他的GPIO設置操作,只需要設置需操作的GPIO位信息,沒有返回參數。
為了提高管腳的利用率,EM9280的高速GPIO部分還復用了其他的接口功能,具體復用的情況如下表所示:
管腳 | 復用功能 | 簡要說明 |
GPIO0 | CTS2# | 與COM2口的CTS#復用管腳 |
GPIO1 | RTS2# | 與COM2口的RTS#復用管腳 |
GPIO2 | 低速GPIO | |
GPIO3 | 低速GPIO | |
GPIO4 | 低速GPIO | |
GPIO5 | 低速GPIO | |
GPIO6 | PWM1 | 與PWM1復用管腳 |
GPIO7 | PWM2 | 與PWM2復用管腳 |
GPIO8 | 低速GPIO | |
GPIO9 | 低速GPIO | |
GPIO10 | RXD6 | 與COM6口的RXD復用管腳 |
GPIO11 | TXD6 | 與COM6口的TXD復用管腳 |
GPIO12 | 低速GPIO | |
GPIO13 | 低速GPIO | |
GPIO14 | 低速GPIO | |
GPIO15 | 低速GPIO | |
GPIO16 | 低速GPIO | |
GPIO17 | 低速GPIO | |
GPIO18 | 低速GPIO | |
GPIO19 | 低速GPIO | |
GPIO20 | PWM3 | 與PWM3復用管腳 |
GPIO21 | PWM4 | 與PWM4復用管腳 |
GPIO22 | I2C_SDA | 與I2C總線的SDA復用管腳 |
GPIO23 | I2C_SCL | 與I2C總線的SCL復用管腳 |
GPIO24 | IRQ1 | 與IRQ1復用管腳 |
GPIO25 | IRQ2 | 與IRQ2復用管腳 |
GPIO26 | IRQ3 | 與IRQ3復用管腳 |
GPIO27 | IRQ4 | 與IRQ4復用管腳 |
GPIO28 | SPI_MISO | 與SPI接口的數據串入MISO復用管腳 |
GPIO29 | SPI_MOSI | 與SPI接口的數據串出MOSI復用管腳 |
GPIO30 | SPI_SCLK | 與SPI接口的同步時鐘SCLK復用管腳 |
GPIO31 | SPI_CS0N | 與SPI接口的片選控制CS0N復用管腳 |
從上表可見,對最常用的異步串口(UART)的功能,與GPIO復用的不多,這樣可最大限度的保證EM9280的串口及GPIO的可用性。對COM2如果不需要硬件流控功能,GPIO0 – GPIO1都仍然可以作為標準GPIO使用,而不會影響COM2的正常使用。
-
嵌入式主板
+關注
關注
7文章
6086瀏覽量
35477
發布評論請先 登錄
相關推薦
評論