1.5. mcpwm
mcpwm模块支持两路输出pwm,支持故障保护功能,支持复用。
1.5.1. mcpwm_init
mcpwm功能初始化。
原型:
u32 mcpwm_init(const struct mcpwm_config *cfg);
参数:
cfg
mcpwm配置
返回值
mcpwm配置句柄(id号)
1.5.2. mcpwm_deinit
mcpwm功能释放。
原型:
u32 mcpwm_deinit(u32 id);
参数:
id
init时返回的句柄(id号)
返回值
0
1.5.3. mcpwm_start
mcpwm功能启动。
原型:
u32 mcpwm_start(u32 id);
参数:
id
init时返回的句柄(id号)
返回值
0
1.5.4. mcpwm_pause
mcpwm功能暂停。
原型:
u32 mcpwm_pause(u32 id);
参数:
id
init时返回的句柄(id号)
返回值
0
1.5.5. mcpwm_resume
mcpwm功能恢复。
原型:
u32 mcpwm_resume(u32 id);
参数:
id
init时返回的句柄(id号)
返回值
0
1.5.6. mcpwm_set_frequencys
设置mcpwm输出频率,单位Hz。
原型:
u32 mcpwm_set_freq(u32 id, u32 freq);
参数:
id
init时返回的句柄(id号)
freq
频率,单位:Hz
返回值
0
1.5.7. mcpwm_set_duty
设置mcpwm输出占空比。
原型:
u32 mcpwm_set_duty(u32 id, u32 h_duty, u32 l_duty);
- 参数:
- id - init时返回的句柄(id号) - h_duty - H通道占空比,如:5123, 51.23% - l_duty - L通道占空比,如:5123, 51.23% - 返回值 - 0 
1.5.8. mcpwm_set_irq_callback
设置mcpwm 回调函数,一般用于故障保护功能。
原型:
u32 mcpwm_set_irq_callback(u32 id, u32 priority, mcpwm_detect_irq_cb irq_cb);
- 参数:
- id - init时返回的句柄(id号) - priority - 中断优先级 - irq_cb - 回调函数 - 返回值 - 0 
1.5.9. mcpwm_info_dump
打印对应 id 的mcpwm 配置。
原型:
u32 mcpwm_info_dump(u32 id);
- 参数:
- id - init时返回的句柄(id号) - 返回值 - 0 
1.5.10. mcpwm参考demo,也可参考 mcpwm_demo.c 文件
static void mcpwm_detect_callback_0(u32 ch)
{
    log_debug("mcpwm_detect_callback_0\n");
    mdelay(500);
    mcpwm_hw_detect_pnd_clr(ch);
    mcpwm_hw_enable(ch);
}
static const struct mcpwm_config cfg_0 = {
    .ch = MCPWM_CH0, //选择mcpwm_ch0
    .mode = MCPWM_EDGE_ALIGNED, //边沿对齐
    .freq = 1000, //频率1K Hz
    .h_duty = 5000, //H通道占空比 50.00%
    .h_pin = IO_PORTA_01, //H通道选择 PA1
    .l_duty = 5000, //L通道占空比 50.00%
    .l_pin = IO_PORTA_02, //H通道选择 PA2
    .detect_port = IO_PORTA_03, //故障保护IO选择 PA3
    .edge = MCPWM_EDGE_FAILL, //故障保护检测边沿为 下降沿检测
    .irq_cb = mcpwm_detect_callback_0, //回调函数
    .irq_priority = 3, //中断优先级
    .dead_time = 10 * 1000, //死驱时间,单位 ns
};
u32 id = mcpwm_init(&cfg_0);
mcpwm_start(id); //启动
mdelay(1000);
mcpwm_pause(id); //暂停
mdelay(1000);
mcpwm_resume(id); //恢复
mdelay(1000);
mcpwm_set_freq(id, 2 * 1000); //频率设为 2K Hz
mcpwm_set_duty(id, 9500, 500); //H通道占空比设为 95%,L通道占空比设为 5%
mcpwm_info_dump(id); //打印 id 对应的配置
mcpwm_reg_dump(MCPWM_CH0); //打印 MCPWM_CH0 所有寄存器