本文主要是通過遷移的思維,記錄本人初次使用周立功的Aworks框架進行BSP開發
前置知識,通過學習Aworks開發框架,對于PWM而關鍵在于PWM的ID號,只要在注冊PWM時,確認了其對應的ID號,編程起來就很輕松了,
/**
* \addtogroup grp_aw_if_pwm
* \copydoc aw_pwm.h
* @{
*/
/**
* \brief 設定PWM設備的有效時間和周期
*
* \param[in] pid PWM設備通道號
* \param[in] duty_ns 有效時間(單位: 納秒)
* \param[in] period_ns PWM波形輸出周期(單位: 納秒)
*
* \retval AW_OK 成功
* \retval -AW_ENXIO \a pid 為不存在的通道號
* \retval -AW_EINVAL \a 無效引數
*
*/
aw_err_t aw_pwm_config(int pid, unsigned long duty_ns, unsigned long period_ns);
/**
* \brief 使能PWM設備
*
* \param[in] pid PWM設備通道號
*
*/
aw_err_t aw_pwm_enable(int pid);
/**
* \brief 禁用PWM設備
*
* \param[in] pid PWM設備通道號
*
*/
aw_err_t aw_pwm_disable(int pid);
1. 首先閱讀原理圖
正常來說蜂鳴器只用一路PWM驅動,但是也有使用兩路PWM來控制,用于控制頻率與響度,
分別是FLEXPWM2_PWMA03 flexpwm2 FLEXPWM2_PWMB03 flexpwm2,并找到其對應的GPIO引腳,方便設備資源的注冊,

2. 設備資源及驅動適配
2.1 設備資源的注冊
在Aworks下注冊PWM的設備資源的關鍵在于如下該結構體,跟硬體相關,
/**
* \brief iMX RT10xx eFlexPWM 設備配置
*/
typedef struct awbl_imx10xx_eflex_pwm_devcfg {
uint8_t pid; /**< \brief PWM ID */
pwm_submodule_t sub_modedle; /**< \brief PWM對應的子模塊 */
pwm_channels_t pwm_channel; /**< \brief PWM對應通道 */
pwm_mode_t pwm_mode; /**< \brief PWM模式 */
int gpio; /**< \brief PWM對應的引腳 */
uint32_t func; /**< \brief PWM引腳功能 */
uint32_t dfunc; /**< \brief 禁能PWM后的默認引腳功能 */
} awbl_imx10xx_eflex_pwm_devcfg_t;
這兩個PWM的ID號分別為PWM2 PWM3,在Aworks框架下已定義,所以控制蜂鳴器的通PWMM道號就是PWM2 PWM3,
aw_local aw_const awbl_imx10xx_eflex_pwm_devcfg_t __g_imx1050_eflex_pwm2_devcfg_list[] = {
/* PWM ID ,子模塊號, 通道號,PWM模式, GPIO, PWM引腳功能, 默認引腳功能 */
{
PWM2,
kPWM_Module_3,
kPWM_PwmA,
kPWM_SignedCenterAligned,
GPIO1_0,
GPIO1_0_FLEXPWM2_PWMA03,
__PWM_PIN_DFUNC_CFG
},
{
PWM3,
kPWM_Module_3,
kPWM_PwmB,
kPWM_SignedCenterAligned,
GPIO1_1,
GPIO1_1_FLEXPWM2_PWMB03,
__PWM_PIN_DFUNC_CFG
}
};
2.2 設備驅動的注冊
在aw_prj_config.c檔案當中
#ifdef AW_DRV_IMX1050_EFLEX_PWM
awbl_imx10xx_eflex_pwm_drv_register();
#endif
2.3 設備宏開關
只需要在aw_prj_params.h打開如下定義
aw_prj_params.h
#define AW_DEV_IMX1050_EFLEX_PWM2
即可注冊相關的設備資源與設備驅動,
aw_prj_param_auto_cfg.h
/**
* \name 內部eFlexPWM
* @{
*/
#if defined AW_DEV_IMX1050_EFLEX_PWM1 || \
defined AW_DEV_IMX1050_EFLEX_PWM2 || \
defined AW_DEV_IMX1050_EFLEX_PWM4
#ifndef AW_COM_PWM
#define AW_COM_PWM
#endif
#define AW_DRV_IMX1050_EFLEX_PWM
#endif
/** @} */
3. 如何測驗
void buzzer_test(){
// buzzer on 1s;
aw_pwm_config(PWM3, 100000000, 100000000);
aw_pwm_enable(PWM3);
aw_pwm_config(PWM2, 50000000, 100000000);
aw_pwm_enable(PWM2);
aw_mdelay(1000);
aw_pwm_disable(PWM2);
aw_pwm_disable(PWM3);
}
4. 總結
在適配蜂鳴器硬體驅動時,筆者先通過RT1052資料手冊的了解硬體上PWM的相關資訊,才能理解PWM設備資源相關的資訊,文章本身也是默認PWM的驅動是正常的,作為開發者只需要適配原理圖的硬體設計,只要抓住設備資源的注冊,設備驅動的注冊,使能設備宏開關,只要抓住這三點,默認設備驅動正常,稍加修改設備資源檔案即可,并使能設備宏開關,撰寫測驗程式,就可以驗證硬體是否是正常的,在Aworks的框架內部有針對蜂鳴器的操作介面,但是由于我們是兩路的PWM,硬體不適合使用該框架注冊,如果是一路PWM控制蜂鳴器,就可以使用框架自帶的蜂鳴器介面,
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/295874.html
標籤:嵌入式
上一篇:ESP32-S2原生USB 燒錄 TinyUF2 bootloader 加 CircuitPython
下一篇:如何測量代碼運行時間
