Edit online

设计说明

源代码位于:

  • bsp/artinchip/drv/pwm/drv_pwm.c,PWM Driver 层实现

  • bsp/artinchip/hal/pwm/hal_pwm.c,PWM HAL 层实现

  • bsp/artinchip/include/hal/hal_pwm.h,PWM HAL 层接口头文件

  • bsp/artinchip/drv/epwm/drv_epwm.c,EPWM Driver 层实现

  • bsp/artinchip/hal/pwmcs/hal_epwm.c,EPWM HAL 层实现

  • bsp/artinchip/include/hal/hal_epwm.h,EPWM HAL 层接口头文件

模块架构

PWM/EPWM 驱动 Driver 层采用 RT-Thread 的 PWM 设备驱动框架。HAL 层也可以支持 Baremetal 方式或配合自定义的设备驱动框架进行使用。(下文仅以 PWM 作为说明,EPWM 同理)

../images/sw_system3.png
1. PWM 驱动的软件架构图

关键流程设计

PWM 驱动的初始化接口通过 INIT_DEVICE_EXPORT(drv_pwm_init) 完成,主要是通过调用 PWM 子系统的接口 rt_device_pwm_register() 注册一个 PWM 设备。

PWM 控制器的初始化过程,主要步骤有:
  1. 初始化模块的 clk

  2. 初始化模块的默认参数

  3. 向设备框架中注册 PWM 设备

数据结构设计

  • struct aic_pwm_arg:属于 HAL 层接口,记录每一个 PWM 通道的配置信息
    struct aic_pwm_arg {
        u16 available;
        u16 id;
        enum aic_pwm_mode mode;
        u32 tb_clk_rate;
        u32 freq;
        struct aic_pwm_action action0;
        struct aic_pwm_action action1;
        u32 period;
        u32 duty;
        s32 def_level;
        enum pwm_polarity polarity;
    };
  • struct aic_pwm_action:属于 HAL 层接口,记录一组 Action 的配置信息
    struct aic_pwm_action {
        enum aic_pwm_action_type CBD;
        enum aic_pwm_action_type CBU;
        enum aic_pwm_action_type CAD;
        enum aic_pwm_action_type CAU;
        enum aic_pwm_action_type PRD;
        enum aic_pwm_action_type ZRO;
    };