高级PWM定时器计数器溢出中断问题 | 已给出完整的参考测试程序
各位大侠请教一下,问题如下:高级定时器用来对信号进行捕获i,cc1进行信号捕获,高级定时器计数器的时钟用的是144mHz,对2KHz及以下的信号采集,会出现计时器多次溢出的情况,程序里面配置了溢出事件中断,但是程序不中断,捕获中断。请问问题出在哪里?程序设置如下:EAXFR = 1;//扩展寄存器(XFR)访问使能
CKCON = 0;//提高访问XRAM速度
HSPWMA_CFG = 0x07; //使能PWMA相关寄存器异步访问功能m,并使能异步模式PWM中断
WritePWMA((char)&PWMA_CCER1, 0x00); //写 CCMRx 前必须先清零 CCxE 关闭通道
WritePWMA((char)&PWMA_CCMR1, 0x01); //CC1为输入模式,请映射到TI1FP1上,通道模式配置
WritePWMA((char)&PWMA_CCMR2, 0x02);//CC2为输入模式,请映射到TI1FP2上
WritePWMA((char)&PWMA_CCER1, 0x31); //使能CC1/CC2捕获功能,设置捕获机型为CC1的上升沿CC2的下降沿
WritePWMA((char)&PWMA_SMCR, 0x54);//上升沿复位模式
WritePWMA((char)&PWMA_CR1, 0x03); //开始计时,允许计时器溢出更新中断
WritePWMA((char)&PWMA_IER, 0x07);//使能CC1/CC2捕获中断,使能更新事件中断
EA = 1; //打开总中断
中断程序:
void PWMA_ISR() interrupt 26
{
u32 cnt;
u8 sta;
sta = ReadPWMA((char)&PWMA_SR1);
if(sta & 0X01)//计时器溢出事件中断
{
jishiyichunum++;
P06 = ~P06;
}
if(sta & 0X02)//CC1捕获中断
{
P07 = ~P07;
cnt = ReadPWMA((char)&PWMA_CCR1H);
cnt = (cnt<<8)+ReadPWMA((char)&PWMA_CCR1L)+jishiyichunum*0xffff;//CC1捕获周期宽度
zhuce_time_interval =cnt;
jishiyichunum = 0;
}
if(sta & 0X04)//CC2捕获中断
{
P07 = ~P07;
cnt = ReadPWMA((char)&PWMA_CCR2H);
cnt = (cnt<<8)+ReadPWMA((char)&PWMA_CCR2L);//CC2捕获占空比(高电平宽度)
}
WritePWMA((char)&PWMA_SR1, 0x00); //清除完成标志
}
zuodazuo 发表于 2025-6-24 14:20
能用溢出中断么?这样程序好弄点?
这里给出一个使用Ai8051U实验箱V1.2测试通过的软件版本,经过测试,可以正常捕获1Hz~50Khz之间的信号(再低的没有测,并非不支持,理论上可以捕获低至0.014Hz的信号,仅受限于重复计数变量的大小)
程序使用40Mhz主频,通过PLL倍频到120Mhz,其他如AI8和AI32单片机,拥有同样的高级PWM部分可以一样移植参考,程序是通用的
程序默认通过T0中断改变P00口,输出250Hz的信号,这里通过计算器计算可以看到,实际捕获值为249.98Hz,占空比默认为50%
程序框架通过AiCube生成,在程序main函数的43行,可以通过取消注释代码,来屏蔽T0的方波输出,从而使用外部信号输入给P00来进行测量
以下是代码文件:
对于重复捕获,应当使用:PWMx_SR2进行处理
王昱顺 发表于 2025-6-18 18:10
对于重复捕获,应当使用:PWMx_SR2进行处理
版主你好,我现在情况是,能够重复捕获,但是捕获的方波信号在2kHz以下,那么一个捕获间隔的时间太长,导致计数器两次溢出,我要计计数器的值就必须要算出溢出几次,然后累加才能算出来,现在就是计数器溢出事件不中断,请帮忙看一下是哪里配置不对,为啥计数器溢出事件不中断!程序如我发的贴子 zuodazuo 发表于 2025-6-24 08:31
版主你好,我现在情况是,能够重复捕获,但是捕获的方波信号在2kHz以下,那么一个捕获间隔的时间太长,导 ...
用于捕获时,将PWM周期设置为最大0xffff,再配合分频器得到合适的周期。 梁工 发表于 2025-6-24 10:36
用于捕获时,将PWM周期设置为最大0xffff,再配合分频器得到合适的周期。
我要用144mHz的基频来作为计数器的时钟的,
这样做,我的频率分辨率可以做的高,
所以还是只能用事件中断来计数计数器溢出几次,
然后累加来计算被测方波的频率
试试看能不能利TRGO信号级联,把溢出脉冲发给下一个计数器,这样就可以自动记录溢出次数了,不用每次都进溢出中断处理 网老四 发表于 2025-6-24 12:24
试试看能不能利TRGO信号级联,把溢出脉冲发给下一个计数器,这样就可以自动记录溢出次数了,不用每次都进溢出 ...
能用溢出中断么?这样程序好弄点?{:touxiao:} zuodazuo 发表于 2025-6-24 14:20
能用溢出中断么?这样程序好弄点?
溢出中断当然那可以用的。 王昱顺 发表于 2025-6-24 19:36
这里给出一个使用Ai8051U实验箱V1.2测试通过的软件版本,经过测试,可以正常捕获1Hz~50Khz之间的信号(再 ...
解决了,感谢楼主分享
页:
[1]