嗨,对话
将PIN设置为PWM0并终于终止时,我可以在PIN处获得稳定的输出。
然后,我添加了一些代码来在回调中执行某事。现在,我可以看到稳定的波浪
PIN并定期输入回调。似乎是Erverything很好。
但是,如果我在回调中设置了_tmr_enable(clk_per_reg_tmr_disabled),并且可重新启用
(clk_per_reg_tmr_enabled)它,然后波浪消失了销钉
始终保持低电平。虽然我可以定期输入回调。为什么?
我只想在PIN销上CTRL PWM输出,有时我打开,有时我关掉了
但我可以打开并关闭,但我不能再打开。
代码如下:
1>在void set_pad_functions(void)中
gpio_configurepin(pwm0_port,pwm0_pin,输出,pid_pwm0,false);
2> void pwm0_init(空白)
{
set_tmr_enable(clk_per_reg_tmr_enabled); //允许timer0,timer2时钟
静态UINT8_T init = 0;
#if 0 / *结果没有与gpio_configurepin * /
gpio_configurepin(pwm0_port,pwm0_pin,输出,pid_pwm0,false);
#万一
#if 0 / *没有与init ctrl * /的结果没有什么不同
if(init == 0)
#万一
{
set_tmr_div(clk_per_reg_tmr_div_8);
timer0_init(tim0_clk_fast,pwm_mode_one,tim0_clk_no_div);
timer0_set(1000,500,200);
timer0_register_callback(pwm0_callback);
init ++;
}
timer0_enable_irq();
timer0_start();
}
3> void pwm0_callback(void)
{
timer0_disable_irq();
静态UINT8_T SW = 0;
// if(sw> 0)//如果评论此行我永远不会在物种引脚看到波浪
//如果取消注释,我可以在第一次输入回调后获得波浪
//波浪在第二次进入时消失
//我永远不会在第三,第四,第五个............为什么???
{
Dosth();
set_tmr_enable(clk_per_reg_tmr_disabled);
timer0_stop();
SW = 0;
}
SW ++;
}
4>我的主要计划
......
如果(表达)///其他三角遏制
{
pwm0_init();
}
.......
PS:我在da14580_config.h中有undef ext_sleep和deep_sleep.h
你有没有想到这一点?
我的问题是回调函数根本没有运行。
你应该patch set_tmr_enable如下所示,然后每件事都没问题。
幸运!
内联void set_tmr_enable(clk_per_reg_tmr_enable_t clk_per_reg_tmr_enable)
{
clk_per_reg.bitfld_tmr_enable = clk_per_reg_tmr_enable;//启用/禁用Timer0 / timer2时钟
if(clk_per_reg_tmr_enable)
{
while(app_get_sleep_mode())app_force_active_mode();
} 别的
{
while(!app_get_sleep_mode())app_restore_sleep_mode();
}
}