- 打卡等级:常住居民III
- 打卡总天数:120
- 最近打卡:2025-12-05 09:16:53
高级会员
- 积分
- 631
|
请教一个问题,以下是我用P0.0端口作为输入捕获端口来测量外界PWM的周期和占空比,请问有哪里设置错了吗?
void PWM_Config(void)
{
//--------------------------------------------------------------------------------------------------
//说明:1. PMWB设置:CC1捕获上升沿,CC2捕获下降沿
// 2. 关于脚位映射。由规格书中26.2可知:PWM5P的输入源为TI5,IC5的输入源为TI5FP5和TI6FP5。
// PWM6P的输入源为TI6,IC6的输入源为TI5FP6和TI6FP6。
// PWM7P的输入源为TI7,IC7的输入源为TI7FP7和TI8FP7。
// PWM8P的输入源为TI8,IC8的输入源为TI7FP8和TI8FP8。
//--------------------------------------------------------------------------------------------------
PWMB_CCER1 = 0x00; // 关闭通道
// 高级PWM一个端口做外部中断,同时捕获上升沿和下降沿。这里使用PWM5的CC5+CC6,可以实现这一功能。即 TI5FP5 和 TI5FP6
PWMB_CCMR1 = 0x01; // IC5映射在 TI5FP5 上
PWMB_CCER1 |= 0x01; // 配置捕获极性为CC1的上升沿, 使能捕获, 0x01:上升沿, 0x03:下降沿
PWMB_CCMR2 = 0x02; // IC6映射在 TI5FP6 上
PWMB_CCER1 |= 0x30; // 配置捕获极性为CC2的下降沿, 使能捕获, 0x10:上升沿, 0x30:下降沿
PWMB_PS = 0x02; // 高级PWM通道5输出/输入脚位选择:P0.0
PWMB_IER = 0x06; // 使能CC5、CC6捕获中断
PWMB_PSCRH = (u16)(PWMB_PSC >> 8); //预分频24,也就是说计数一格需要1us(24M/24)
PWMB_PSCRL = (u16)(PWMB_PSC);
}
void PWMB_ISR() interrupt 27
{
if (PWMB_SR1 & 0x02) // 当CC5捕获中断标志置1
{
PWMB_SR1 &= ~0x02; // 清零CC5捕获中断标志
ccr5 = cap1; // 保存当前捕获值
cap1 =(PWMB_CCR5H << 8) + PWMB_CCR5L; // 读取捕获5计数值CCR5,
cycle = cap1 - ccr5; // 计算周期计数
}
if(PWMB_SR1 & 0x04) // 当CC6捕获中断标志置1
{
PWMB_SR1 &= ~0x04; // 清零CC6捕获中断标志
cap2 =(PWMB_CCR6H << 8) + PWMB_CCR6L; // 读取捕获6计数值CCR6
duty = cap2 - cap1; // 计算高电平计数
}
F_Inpwm_Done = 1; // IN_PWM端口捕获PWM成功,即IN_PWM控制电机接管成功
Inpwm_Down_Count = 0;
}
|
|