1. 程式人生 > 其它 >基於RT1052 Aworks 使能GPIO輸入功能(六)

基於RT1052 Aworks 使能GPIO輸入功能(六)

本文主要是通過遷移的思維,記錄本人初次使用周立功的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框架之下,不同型別的驅動都有相對應的標頭檔案,在檔案當中包含了其操作的介面。