- 打卡等级:初来乍到
- 打卡总天数:1
- 最近打卡:2025-04-24 09:11:29
新手上路
- 积分
- 13
|
AI8051高速144MHZ的高级PWMA进入中断后PWMA_SR1值异常,读出的值始终是0,直接读取和用ReadPWMA函数读取都是0。
PWMA配置函数
void PWMA_config(void)
{
PWMA_PS |= (0<<2); // 选择IO, 0:选择P1.2 P1.3, 1:选择P0.2 P0.3, 2:选择P2.2 P2.3,
PWMA_CLKDIV = 1; //PWMA1分频
PWMA_ETRPS &= ~(3<<2); //外部刹车触发脚切换 默认P3.5
HSPWMA_CFG = 0x04 | 0x02; // +0x04:使能异步模式下的PWM中断, 0x02:使能异步控制模式
//通过异步方式设置PWMA的相关寄存器
WritePWMA(&PWMA_PSCRH, 0x00); // 预分频寄存器
WritePWMA(&PWMA_PSCRL, 0x00);
WritePWMA(&PWMA_DTR,WMA_DtrNs); // 死区时间配置, n=0~127: DTR= n T, 0x80 ~(0x80+n), n=0~63: DTR=(64+n)*2T,
WritePWMA(&PWMA_CCER1,0x05 | 0x50); // 捕获/比较使能寄存器1 PWMA 1和2开启比较输出, 高电平有效
WritePWMA(&PWMA_CCMR1, 0x68); // 通道模式配置, PWM1模式1, 预装载允许
WritePWMA(&PWMA_CCMR2, 0x78); // 通道模式配置, PWM2模式2, 预装载允许
WritePWMA(&PWMA_ARRH, PWMA_PERIOD_MAX>>8); // 自动重装载寄存器, 控制PWM周期
WritePWMA(&PWMA_ARRL, PWMA_PERIOD_MAX);
WritePWMA(&PWMA_CCR1H, 0); //下管打开,为电容充电
WritePWMA(&PWMA_CCR1L, 0);
WritePWMA(&PWMA_CCR2H, PWMA_Period>>8); //下管打开,为电容充电
WritePWMA(&PWMA_CCR2L, PWMA_Period);
WritePWMA(&PWMA_BKR, 0x90); // 主输出使能 相当于总开关 B5=0刹车低电平 =1刹车高电平 B4=1开启刹车
WritePWMA(&PWMA_IER, 0x80); // 允许刹车中断
WritePWMA(&PWMA_EGR, 0x01); // 产生一次更新事件, 清除计数器和预分频计数器, 装载预分频寄存器的值
WritePWMA(&PWMA_ENO, 0x03 | 0x0C); // 允许IO输出 bit7: ENO4N, bit6: ENO4P, bit5: ENO3N, bit4: ENO3P, bit3: ENO2N, bit2: ENO2P, bit1: ENO1N, bit0: ENO1P
WritePWMA(&PWMA_CR1, 0xA1); // 使能计数器,
WritePWMA(&PWMA_IER, 0x81); // 允许刹车中断,打开更新中断
P1 &= 0xf0; //将P1.0~P1.3设为低电平
P1M1 &= ~0xff; // P10:推挽 P11:推挽 P12:推挽 P13:推挽
P1M0 |= 0xff;
IP2 &=~(1<<2); //PWMA中断优先级设置为2 次高
IP2H |=1<<2;
}
PWMA中断函数
void PWMA_ISR_Handler (void) interrupt PWMA_VECTOR //
{
u8 SR1 = 0;
SR1 = ReadPWMA(PWMA_SR1);
// SR1 = PWMA_SR1;
// TODO: 在此处添加用户代码
if (SR1 & 0x01){ //UIFA 更新中断
SR1 &= ~0x01;
P45=!P45; //LED灯
}if (SR1 & 0x02){ //CC1IF 捕获/比较中断
SR1 &= ~0x02;
P45=!P45;
}if (SR1 & 0x04){ //CC2IF 捕获/比较中断
SR1 &= ~0x04;
P45=!P45;
}if (SR1 & 0x08){ //CC3IF 捕获/比较中断
SR1 &= ~0x08;
P45=!P45;
}if (SR1 & 0x10){ //CC4IF 捕获/比较中断
SR1 &= ~0x10;
P45=!P45;
}if (SR1 & 0x20){ //COMIFA 中断
SR1 &= ~0x20;
P45=!P45;
}if (SR1 & 0x40){ //TIFA 触发器中断
SR1 &= ~0x40;
P45=!P45;
}if (SR1 & 0x80){ //BIFA 刹车中断
SR1 &= ~0x80;
P45=!P45;
}
}
|
|