我使用mini51fde 的PWM功能,其中要用EINT0 作为 brake的中断。使用如下设置:
PWM初始化:
static void PWM_Init(void)
{
//使能 PWM23 时钟
APBCLK |= PWM23_CLKEN;
CLKSEL1 = CLKSEL1 & (~( PWM23_CLK)) | (PWM23_HCLK);
//PWM23的输入时钟预分频器
PPR = (1<<8);
//PWM23的输入时钟
CSR = CSR2_CLK_1;
//死区时间 about 1.8us
PDZIR = (20<<8);
//使能PWM01死区功能
PCR |= ( DZEN23);
//边沿对齐
PCR &= EDGE_ALIGN;
//中心对齐
//PCR |= CENTRE_ALIGN;
//连续&互补模式,输出不反相
PCR = PCR & (~PWMMODE) | COMPLEMENTARY;
PCR |= (CH2_AU_RL | CH3_AU_RL );
PIER |= PWMPIE2; //PWM中断类型为PWM2周期中断
NVIC_ISER = PWM_INT; //使能NVIC PWM_INT中断
//使能输出
PWMPOE |= (PWM2_OE | PWM3_OE);
PCR |= CLRPWM; //清零PWM计数器
PCR |= (CH2EN | CH3EN ); //使能PWM
//故障刹车输出低电平
PFBCON |= (BKF |BKEN0);
PIER |= BRKIE; //PWM中断类型为Brake中断
NVIC_ISER = BRAKE_INT; //使能NVIC Brake中断
}
设置EINT0中断
static void EINT0_Init(void)
{
//配置P32为 INT
P3_MFP = P3_MFP & (~P32_MFSEL) | P32_INT0; //配置P3.2为外中断输入
P3_PMD = P3_PMD & (~Px2_PMD) | Px2_QB; //配置P3.2为准双向模式
//<2> 设置IO3.2的中断模式,请根据实际情况修改
P3_IMD &= IMD2_EDG; //边沿触发
P3_IEN |= IF_EN2; //由H->L时触发
//P3_IMD |= IMD2_LEV; //电平触发
//P3_IEN |= IF_EN2; //变成低电平时触发
P3_DBEN |= DBEN2; //使能P3.2引脚去抖功能
// NVIC_ISER =INT0; //去除,使用Breake中断.
}
brake 刹车中断
void BRAKE_IRQHandler(void)
{
PIIR =PIIR;
}
调试时,P32的下降沿可以引起Brake中断。但是中断标志清除不了。一直在中断。
怎么样才能清除brake的中断标志呢?
|