对于频率很低的情况就测量不准了,16为计数器会出现溢出现象。比如低于1Hz的脉冲周期测量。 ...
计数溢出会产生中断的,你对中断计数就行了 神农鼎 发表于 2024-3-18 15:49
计数溢出会产生中断的,你对中断计数就行了
这个办法好,有空试一下 giveyou 发表于 2024-3-18 15:32
对于频率很低的情况就测量不准了,16为计数器会出现溢出现象。比如低于1Hz的脉冲周期测量。 ...
不会的,你要用合适的PWM时钟,比如使用20us周期的PWM时钟,则最大测量周期为1.31072秒,分辨率依旧是16位的。
如果使用中断,一定要注意处理捕获后计数器刚好出现中断的情况。 神农鼎 发表于 2024-3-18 15:49
计数溢出会产生中断的,你对中断计数就行了
你好,溢出中断如何开启,溢出中断的标志位是哪个。请您帮我看看代码,我现在需要测量输入信号的周期,计算频率。测量的区间是0.5Hz-1500Hz,在这个区间内能够达到1Hz分辨率。目前就是低频小于31Hz计数器会溢出,这个计数器的溢出中断还没调出来,有两个问题,一个是中断标志是哪个,在哪个中断服务函数处理,第二个是如何开启。我把配置和中断服务函数的代码贴上来,请大佬指导!
oid PWMA_config(void)
{
P_SW2 |= 0x80; //SFR enable
PWMA_CCER1= 0;
PWMA_CCER2= 0;
PWMA_SR1 = 0;
PWMA_SR2 = 0;
PWMA_ENO = 0; //IO禁止输出PWM,bit7: ENO4N, bit6: ENO4P, bit5: ENO3N, bit4: ENO3P,bit3: ENO2N,bit2: ENO2P,bit1: ENO1N,bit0: ENO1P
PWMA_PS = 0;
PWMA_IER = 0;
PWMA_ISR_En = 0;
PWMA_PSCRH = 0; // 预分频寄存器, 分频 Fck_cnt = Fck_psc/(PSCR[15:0}+1), 边沿对齐PWM频率 = SYSclk/((PSCR+1)*(AAR+1)), 中央对齐PWM频率 = SYSclk/((PSCR+1)*(AAR+1)*2).
PWMA_PSCRL = 11; //0x0960 主时钟2400分频,定时器时钟10KHZ,最小检测频率1/6.5536
PWMA_CCMR1 = 0x01; // CC1配置为输入模式, 且映射到TI1FP1上
PWMA_CCER1|= 0x01; // 配置捕获极性为CC1的上升沿, 使能捕获, 0x01:上升沿, 0x03:下降沿
PWMA_CCMR2 = 0x02; // CC2配置为输入模式, 且映射到TI1FP2上
PWMA_CCER1|= 0x30; // 配置捕获极性为CC2的下降沿, 使能捕获, 0x10:上升沿, 0x30:下降沿
PWMA_PS |= 1; // 选择IO, 0:选择P1.0 P1.1, 1:选择P2.0 P2.1, 2:选择P6.0 P6.1,
PWMA_ISR_En |= 0x03; // 使能CC1中断,允许更新中断
//PWMA_ETR;
PWMA_IER= PWMA_ISR_En; //设置标志允许通道1~4中断处理
PWMA_EGR= 0x00; //事件产生寄存器,清零
PWMA_SMCR = 0x54; //触发源选择滤波后的TI1FP1, 复位模式(即上升沿复位ARR)
PWMA_BKR= 0x00;
PWMA_CR1 |= 0x85; // 使能计数器, 允许自动重装载寄存器缓冲, 边沿对齐模式, 向上计数,bit7=1:写自动重装载寄存器缓冲(本周期不会被打扰), =0:直接写自动重装载寄存器本(周期可能会乱掉)
PWMA_SR1 = 0;
PWMA_SR2 = 0;
}
void PWMA_ISR(void) interrupt PWMA_VECTOR
{
u8 sr1;
u8 sr2;
sr1 = PWMA_SR1; //中断标志用一个局部变量处理
PWMA_SR1 = ~sr1; //清除中断标志
sr2 = PWMA_SR2; //重复捕获标志
PWMA_SR2 = 0; //清除中断标志
sr1 &= PWMA_ISR_En; //屏蔽未允许的中断
if(sr1 & 0x02) //通道1, CC1捕获上升沿中断, 一个周期结束, 新的周期开始
{
period = ((u16)PWMA_CCR1H << 8) + (u16)PWMA_CCR1L;; //读周期时间
PulseHigh = ((u16)PWMA_CCR2H << 8) + (u16)PWMA_CCR2L; //读高电平时间
B_Capture = 1; //标志波形1已捕捉完成
}
if(sr2 & 0x01) //
{
P25=!P25;
}
}
页:
1
[2]