基於RT1052 Aworks 使能GPIO輸入功能(六)
阿新 • • 發佈:2021-08-21
本文主要是通過遷移的思維,記錄本人初次使用周立功的Aworks框架進行BSP開發
其實對於輸入型GPIO來說,要麼是一個普通的輸入引腳,要麼當作特定的按鍵使用,有對應的鍵值。在本文中我們將其註冊成普通的輸入GPIO使用。
aw_err_t aw_gpio_pin_cfg(int pin, uint32_t flags);
aw_err_t aw_gpio_get(int pin);
這兩個函式就滿足了我們的需要,其說明如下所示:
/** * \param[in] pin 引腳編號 * \param[in] flags 配置標誌,其格式請參考上面的詳細描述 * * \retval AW_OK 操作成功 * \retval -AW_ENXIO \a pin 不存在 * \retval -AW_EIO 操作出錯 * * \par 示例:配置引腳功能 (使用“通用定義”標誌域) * \code * #include "aw_gpio.h" * * // 配置引腳PIO0_1為GPIO輸入功能 * aw_gpio_pin_cfg(PIO0_1, AW_GPIO_INPUT); * * // 配置引腳PIO0_1為GPIO輸入功能,並使能引腳上拉電阻 * aw_gpio_pin_cfg(PIO0_1, AW_GPIO_INPUT | AW_GPIO_PULL_UP); * * // 配置引腳PIO0_1為GPIO輸出功能,並使能引腳上拉電阻 * aw_gpio_pin_cfg(PIO0_1, AW_GPIO_OUTPUT | AW_GPIO_PULL_UP); * \endcode */ aw_err_t aw_gpio_pin_cfg(int pin, uint32_t flags); /** * \brief 讀取GPIO引腳的輸入值/輸出值 * * 讀取引腳 \a pin 當前的輸入值(\a pin 被配置為GPIO輸入功能)或輸出值 * (\a pin 被配置為GPIO輸出功能) * * \par 實現相關 * 當引腳被配置為GPIO輸出功能時, aw_gpio_get() 返回的可以是設定的輸出值, * 也可以是引腳上的實際電平 * * \param[in] pin 引腳編號 * * \retval 0 \a pin 的輸入值或輸出值為0(低電平) * \retval 1 \a pin 的輸入值或輸出值為1(高電平) * \retval -AW_ENXIO \a pin 不存在 * * \par 示例 * \code * #include "aw_gpio.h" * * int val; * * // 配置引腳 PIO0_11 為GPIO輸入功能,上拉電阻使能 * aw_gpio_pin_cfg(PIO0_11, AW_GPIO_INPUT | AW_GPIO_PULL_UP); * * val = aw_gpio_get(PIO0_11); //讀取引腳 PIO0_11 的輸入值 * * // 配置引腳 PIO0_11 為GPIO輸出功能 * aw_gpio_pin_cfg(PIO0_11, AW_GPIO_OUTPUT); * * val = aw_gpio_get(PIO0_11); //讀取引腳 PIO0_11 當前的輸出值 * \endcode */ aw_err_t aw_gpio_get(int pin);
1. 首先閱讀原理圖
設計中有兩個GPIO當作輸入,不需要註冊相關的裝置資源和驅動
由應用開發自行呼叫aw_gpio_pin_cfg進行初始化,以相容Awroks程式設計介面。在imx1050_pin.h檔案當中,定義了所有引腳的編號,我們可重定義相關巨集之後,進行操作。
2. 如何測試
測試程式碼如下所示:
/*----------------------------------------------* * macros * *----------------------------------------------*/ #define Ignition_MCU GPIO1_19 #define CAN_ERROR GPIO2_30 /*----------------------------------------------* * routines' implementations * *----------------------------------------------*/ /** * @brief Ignition_MCU pin mux init * * @param [in] None * @param [out] None * * @return * * @history * 1.Date : 2020-9-26 11:11:27 * Author : panzidong * Modification : Created function */ void gpio_ignition_mcu_init(){ aw_gpio_pin_cfg(Ignition_MCU, AW_GPIO_INPUT | AW_GPIO_PULL_UP ); } /** * @brief get Ignition_MCU pin level * * @param [in] None * @param [out] None * * @return * * @history * 1.Date : 2020-9-26 11:12:13 * Author : panzidong * Modification : Created function */ int get_ignition_mcu_level(){ return aw_gpio_get(Ignition_MCU); } /** * @brief CAN_ERR pin mux init * * @param [in] None * @param [out] None * * @return * * @history * 1.Date : 2020-9-26 11:12:44 * Author : panzidong * Modification : Created function */ void gpio_can_error_init(){ aw_gpio_pin_cfg(CAN_ERROR, AW_GPIO_INPUT | AW_GPIO_PULL_UP ); } /** * @brief get CAN_ERR pin level * * @param [in] None * @param [out] None * * @return * * @history * 1.Date : 2020-9-26 11:13:27 * Author : panzidong * Modification : Created function */ int get_can_error_level(){ return aw_gpio_get(CAN_ERROR); } #define GPIO_INPUT_TEST #ifdef GPIO_INPUT_TEST /** * @brief Print Ignition_MCU and CAN_ERR pin level * * @param [in] None * @param [out] None * * @return * * @history * 1.Date : 2020-9-26 11:14:12 * Author : panzidong * Modification : Created function */ void gpio_input_test(){ gpio_ignition_mcu_init(); gpio_can_error_init(); aw_kprintf("\r\n Ignition_MCU level: %s \r\n", get_ignition_mcu_level()?"High":"Low"); aw_kprintf("\r\n CAN_ERROR level: %s \r\n", get_can_error_level()?"High":"Low"); } #endif
3. 總結
在做底層適配時,首先得了解在框架之下,該型別驅動的操作介面,以便於編寫出測試程式碼。在aworks框架之下,不同型別的驅動都有相對應的標頭檔案,在檔案當中包含了其操作的介面。