高速PWM以16bit高级PWM为基础,支持使用PLL时钟源,寄存器异步访问,其他与16bit高级PWM相同
...
异步访问就不能开启PWM中断,是吧? baigezy 发表于 2024-11-28 13:55
请问一下,高速PWM不能开启PWM中断?谢谢
可以开启的,不过太高速的情况可能会出现中断间隔太短而反复进入中断,进而无法执行其他任务,谨慎开启 王昱顺 发表于 2024-11-28 15:05
可以开启的,不过太高速的情况可能会出现中断间隔太短而反复进入中断,进而无法执行其他任务,谨慎开启 ...
谢谢,还有个问题,高速PWM那些寄存器必须异步读写,那些不需要异步读写呢? 王昱顺 发表于 2024-11-28 15:05
可以开启的,不过太高速的情况可能会出现中断间隔太短而反复进入中断,进而无法执行其他任务,谨慎开启 ...
void PWM_init()
{
PWMA_PS =0x01;
CLKSEL |=0xC0; //内部输出PLL时钟144M,并且作为IO端口的工作时钟源
HSCLKDIV = 0x00;
HPLLCR =0xFF; //使能PLL功能,最高频率输出
HSCLKDIV =0; //不分频
HSPWMA_CFG = 0x03; //使能异步控制模式,异步模式下使能PWM中断;
WritePWMA((char)&PWMA_CCER1,0X00);
WritePWMA((char)&PWMA_CCMR1,0X00);
WritePWMA((char)&PWMA_CCMR1,0X60);
WritePWMA((char)&PWMA_CCER1,0X01);
WritePWMA((char)&PWMA_ENO,0X01);
WritePWMA((char)&PWMA_CCR1H,512>>8);
WritePWMA((char)&PWMA_CCR1L,512);
WritePWMA((char)&PWMA_ARRH,1023>>8);//频率141khz
WritePWMA((char)&PWMA_ARRL,1023); //10位精度
WritePWMA((char)&PWMA_DTR,0);//死区
WritePWMA((char)&PWMA_BKR,0X80);
WritePWMA((char)&PWMA_CR1,0X01);
WritePWMA((char)&PWMA_ENO,0xff);
}
麻烦你给看看,还有那些寄存器没有设定,我在屠龙刀上跑的,没有PWM输出 baigezy 发表于 2024-11-28 15:27
谢谢,还有个问题,高速PWM那些寄存器必须异步读写,那些不需要异步读写呢? ...
PWMx_PS不用异步读写,因为不属于PWM部分。
其他的都需要使用异步读写,不然两边的时钟速度不一致无法通讯 本帖最后由 王昱顺 于 2024-11-28 15:48 编辑
baigezy 发表于 2024-11-28 15:33
void PWM_init()
{
PWMA_PS =0x01;
您好,你的PLL部分是有一点问题的
32G并没有PLLCR寄存器
以下是范例程序提供的切换时钟
并且,请在配置的开头加入
EAXFR = 1; //扩展寄存器(XFR)访问使能否则会无法访问拓展寄存器的配置,进而导致无法生效
PWM部分并没有很大的问题,请先修改PLL部分以确保时钟正常,欢迎继续讨论
王昱顺 发表于 2024-11-28 15:47
您好,你的PLL部分是有一点问题的
32G并没有PLLCR寄存器
按照你的指导,已经正常了,谢谢 王昱顺 发表于 2024-11-28 15:05
可以开启的,不过太高速的情况可能会出现中断间隔太短而反复进入中断,进而无法执行其他任务,谨慎开启 ...
你好,STC8051U单片机使用高速高级PWMA,是不是就不能使用PWMA中断了?我这边中断允许位也都已经打开了,中断标志位也已经置位,但就是进不了中断 stream1118 发表于 2025-1-4 11:44
你好,STC8051U单片机使用高速高级PWMA,是不是就不能使用PWMA中断了?我这边中断允许位也都已经打开了, ...
可以使用
具体注意配置这个寄存器:
王昱顺 发表于 2025-1-4 11:46
可以使用
具体注意配置这个寄存器:
{:OK:}就是这个没有打开,感谢{:baoquan:}
页:
1
[2]