SylixOS中現有GPIO設備體系缺陷

  • 沒有一個標準的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_GpioGetIrqAPI_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_GpioRequestArrayAPI_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)

其他缺陷待補充。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章