- 沒有一個標準的GPIO序號宏定義規則,目前使用個人定義的一套方法。SylixOS中GPIO序號宏定義
- GPIO屬性參數有好幾套,沒有統一爲標準的一套。使得各層處理中往往需要添加參數轉換操作。
#define GPIO_FLAG_DIR_OUT 0x0000
#define GPIO_FLAG_DIR_IN 0x0001
#define GPIO_FLAG_INIT_LOW 0x0000
#define GPIO_FLAG_INIT_HIGH 0x0002
#define GPIO_FLAG_IN (GPIO_FLAG_DIR_IN)
#define GPIO_FLAG_OUT_INIT_LOW (GPIO_FLAG_DIR_OUT | GPIO_FLAG_INIT_LOW)
#define GPIO_FLAG_OUT_INIT_HIGH (GPIO_FLAG_DIR_OUT | GPIO_FLAG_INIT_HIGH)
#define GPIO_FLAG_OPEN_DRAIN 0x0004
#define GPIO_FLAG_OPEN_SOURCE 0x0008
#define GPIO_FLAG_PULL_DEFAULT 0x0000
#define GPIO_FLAG_PULL_UP 0x0010
#define GPIO_FLAG_PULL_DOWN 0x0020
#define GPIO_FLAG_PULL_DISABLE 0x0040
#define GPIO_FLAG_TRIG_FALL 0x0100
#define GPIO_FLAG_TRIG_RISE 0x0200
#define GPIO_FLAG_TRIG_LEVEL 0x0400
#define LW_GPIODF_REQUESTED 0x0001
#define LW_GPIODF_IS_OUT 0x0002
#define LW_GPIODF_TRIG_FALL 0x0004
#define LW_GPIODF_TRIG_RISE 0x0008
#define LW_GPIODF_TRIG_LEVEL 0x0010
#define LW_GPIODF_OPEN_DRAIN 0x0020
#define LW_GPIODF_OPEN_SOURCE 0x0040
#define LW_GPIOF_DIR_OUT (0 << 0)
#define LW_GPIOF_DIR_IN (1 << 0)
#define LW_GPIOF_INIT_LOW (0 << 1)
#define LW_GPIOF_INIT_HIGH (1 << 1)
#define LW_GPIOF_IN (LW_GPIOF_DIR_IN)
#define LW_GPIOF_OUT_INIT_LOW (LW_GPIOF_DIR_OUT | LW_GPIOF_INIT_LOW)
#define LW_GPIOF_OUT_INIT_HIGH (LW_GPIOF_DIR_OUT | LW_GPIOF_INIT_HIGH)
#define LW_GPIOF_OPEN_DRAIN (1 << 2)
#define LW_GPIOF_OPEN_SOURCE (1 << 3)
API_GpioGetIrq
和API_GpioSetupIrq
函數參數直接使用數字量,沒有通過宏來命名。
/*********************************************************************************************************
** 函數名稱: API_GpioSetupIrq
** 功能描述: 根據指定 GPIO 號設置相應的外部中斷, 並返回對應的 IRQ 號
** 輸 入 : uiGpio GPIO 號
** bIsLevel 是否爲電平觸發
** uiType 如果爲電平觸發, 1 表示高電平觸發, 0 表示低電平觸發
** 如果爲邊沿觸發, 1 表示上升沿觸發, 0 表示下降沿觸發, 2 表示雙邊沿觸發
** 輸 出 : IRQ 號, 錯誤返回 LW_VECTOR_INVALID
*********************************************************************************************************/
LW_API
ULONG API_GpioSetupIrq (UINT uiGpio, BOOL bIsLevel, UINT uiType)
-
GPIODrv 接口中的中斷處理可以進一步封裝簡化。例如:在驅動層使用GPIO的中斷功能的簡化接口
-
有些API接口沒有必要,如:
API_GpioRequestArray
,API_GpioFreeArray
,在比如API_GpioSetDebounce
接口,實際硬件中GPIO輸入具備濾波特性的型號非常的少,這個接口自然也是在絕大部分情況下都無實用性。 -
API_GpioGetIrq
接口的後兩個參數沒有意義,即不是用來設置中斷類型的也不能獲取中斷類型。
/*********************************************************************************************************
** 函數名稱: API_GpioGetIrq
** 功能描述: 根據指定 GPIO 號返回對應的 IRQ 號
** 輸 入 : uiGpio GPIO 號
** bIsLevel 是否爲電平觸發
** uiType 如果爲電平觸發, 1 表示高電平觸發, 0 表示低電平觸發
** 如果爲邊沿觸發, 1 表示上升沿觸發, 0 表示下降沿觸發, 2 表示雙邊沿觸發
** 輸 出 : IRQ 號, 錯誤返回 LW_VECTOR_INVALID
** 全局變量:
** 調用模塊:
API 函數
*********************************************************************************************************/
LW_API
ULONG API_GpioGetIrq (UINT uiGpio, BOOL bIsLevel, UINT uiType)
其他缺陷待補充。。。