EM9280是英創(chuàng)公司即將推出的新型工控主板產(chǎn)品。與英創(chuàng)公司的其他主板產(chǎn)品一樣,EM9280帶有32位通用數(shù)字IO(以下簡(jiǎn)稱GPIO)。EM9280的各位GPIO的接口電平均為3.3V TTL電平,上電后均處于輸入狀態(tài);各位GPIO的方向均可獨(dú)立可設(shè)置,以方便使用。EM9280提供有標(biāo)準(zhǔn)的設(shè)備驅(qū)動(dòng)程序API,應(yīng)用程序可直接通過(guò)這些API函數(shù)來(lái)操作這些GPIO,EM9280的資料光盤上提供有GPIO操作的C/C++和C#的范例程序。對(duì)GPIO的操作的基本方法是打開(kāi)GPIO的設(shè)備驅(qū)動(dòng)文件“PIO1:”,然后通過(guò)調(diào)用DeviceIoContrtol來(lái)對(duì)GPIO進(jìn)行設(shè)置或讀取GPIO管腳的輸入狀態(tài)。其具體的操作定義在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的輸入狀態(tài)
盡管EM9280的GPIO可以按統(tǒng)一的API函數(shù)來(lái)操作,但由于各位GPIO的實(shí)現(xiàn)機(jī)制的不同,其相應(yīng)速度是有所區(qū)別的。EM9280的GPIO按相應(yīng)速度分成低速和高速兩類。具體分類如下表所示:
GPIO管腳 | 類型 | 簡(jiǎn)要說(shuō)明 |
GPIO0 - GPIO1 | 高速GPIO | API函數(shù)執(zhí)行時(shí)間大約10us |
GPIO2 - GPIO5 | 低速GPIO | API函數(shù)執(zhí)行時(shí)間大約100us |
GPIO6 - GPIO7 | 高速GPIO | API函數(shù)執(zhí)行時(shí)間大約10us |
GPIO8 - GPIO9 | 低速GPIO | API函數(shù)執(zhí)行時(shí)間大約100us |
GPIO10 - GPIO11 | 高速GPIO | API函數(shù)執(zhí)行時(shí)間大約10us |
GPIO12 - GPIO19 | 低速GPIO | API函數(shù)執(zhí)行時(shí)間大約100us |
GPIO20 - GPIO31 | 高速GPIO | API函數(shù)執(zhí)行時(shí)間大約10us |
由于存在比較大的執(zhí)行時(shí)間的差異,因此在執(zhí)行讀取GPIO狀態(tài)操作時(shí),也要求指定需要具體讀取的是哪幾位GPIO。指定的方法是把需要讀取的GPIO對(duì)應(yīng)位置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)
{
// 出錯(cuò)處理……
}
// u32StateRead包含讀取的GPIO狀態(tài)
在大多數(shù)具體應(yīng)用中,每次往往只需要讀取一位GPIO的狀態(tài),因此只指定所需的GPIO即可,以保證API函數(shù)執(zhí)行時(shí)間最快。對(duì)其他的GPIO設(shè)置操作,只需要設(shè)置需操作的GPIO位信息,沒(méi)有返回參數(shù)。
為了提高管腳的利用率,EM9280的高速GPIO部分還復(fù)用了其他的接口功能,具體復(fù)用的情況如下表所示:
管腳 | 復(fù)用功能 | 簡(jiǎn)要說(shuō)明 |
GPIO0 | CTS2# | 與COM2口的CTS#復(fù)用管腳 |
GPIO1 | RTS2# | 與COM2口的RTS#復(fù)用管腳 |
GPIO2 | 低速GPIO | |
GPIO3 | 低速GPIO | |
GPIO4 | 低速GPIO | |
GPIO5 | 低速GPIO | |
GPIO6 | PWM1 | 與PWM1復(fù)用管腳 |
GPIO7 | PWM2 | 與PWM2復(fù)用管腳 |
GPIO8 | 低速GPIO | |
GPIO9 | 低速GPIO | |
GPIO10 | RXD6 | 與COM6口的RXD復(fù)用管腳 |
GPIO11 | TXD6 | 與COM6口的TXD復(fù)用管腳 |
GPIO12 | 低速GPIO | |
GPIO13 | 低速GPIO | |
GPIO14 | 低速GPIO | |
GPIO15 | 低速GPIO | |
GPIO16 | 低速GPIO | |
GPIO17 | 低速GPIO | |
GPIO18 | 低速GPIO | |
GPIO19 | 低速GPIO | |
GPIO20 | PWM3 | 與PWM3復(fù)用管腳 |
GPIO21 | PWM4 | 與PWM4復(fù)用管腳 |
GPIO22 | I2C_SDA | 與I2C總線的SDA復(fù)用管腳 |
GPIO23 | I2C_SCL | 與I2C總線的SCL復(fù)用管腳 |
GPIO24 | IRQ1 | 與IRQ1復(fù)用管腳 |
GPIO25 | IRQ2 | 與IRQ2復(fù)用管腳 |
GPIO26 | IRQ3 | 與IRQ3復(fù)用管腳 |
GPIO27 | IRQ4 | 與IRQ4復(fù)用管腳 |
GPIO28 | SPI_MISO | 與SPI接口的數(shù)據(jù)串入MISO復(fù)用管腳 |
GPIO29 | SPI_MOSI | 與SPI接口的數(shù)據(jù)串出MOSI復(fù)用管腳 |
GPIO30 | SPI_SCLK | 與SPI接口的同步時(shí)鐘SCLK復(fù)用管腳 |
GPIO31 | SPI_CS0N | 與SPI接口的片選控制CS0N復(fù)用管腳 |
從上表可見(jiàn),對(duì)最常用的異步串口(UART)的功能,與GPIO復(fù)用的不多,這樣可最大限度的保證EM9280的串口及GPIO的可用性。對(duì)COM2如果不需要硬件流控功能,GPIO0 – GPIO1都仍然可以作為標(biāo)準(zhǔn)GPIO使用,而不會(huì)影響COM2的正常使用。
-
嵌入式主板
+關(guān)注
關(guān)注
7文章
6084瀏覽量
35157
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論