- 打卡等级:初来乍到
- 打卡总天数:1
- 最近打卡:2025-02-20 17:52:36
已绑定手机
新手上路
- 积分
- 10
|
发表于 2025-2-20 18:09:30
|
显示全部楼层
你好,溢出中断如何开启,溢出中断的标志位是哪个。请您帮我看看代码,我现在需要测量输入信号的周期,计算频率。测量的区间是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;
}
}
|
|