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 所有寄存器