最近在用M051开发板实现PWM输出的控制,因为涉及多种PWM控制模式,所以想设置多个按键控制。而按键控制需要中断的产生,敢问2个外部中断EXINT0、EXINT1跟GPIOP0P1P2P3P4的中断有区别吗? 因为这个中断IRQ函数只有
DCD EINT0_IRQHandler ; 向量地址18
DCD EINT1_IRQHandler ; 向量地址19
DCD GPIOP0P1_IRQHandler ; 向量地址20
DCD GPIOP2P3P4_IRQHandler ; 向量地址21
所以我现在有个方案是利用P4.0-P4.3 4个引脚作为检测中断的按键。因为摸索着板子时间也不长,通过demo可使用P3.3的中断并且触发中断函数。
但是当我设置P4.0-P4.3的引脚作为中断就不能触发中断,进入中断函数。
具体配置如下:
void Key_Init()
{
P4_PMD = P4_PMD & ~(Px0_PMD | Px1_PMD | Px2_PMD | Px3_PMD) | (Px0_OD | Px1_OD | Px2_OD | Px3_OD); //P4.0-P4.3 open drain功能
P4_IMD &= IMD4_LEV;
P4_IEN |= IR_EN4; //设置外部中断0为高电平触发
NVIC_ISER |= GP234_INT;
}
因为我每个引脚外接pull hight电阻,所以开漏模式下可以作为输出引脚。
我的意图是想P4.0-P4.3的每个中断都能触发中断函数GPIOP2P3P4_IRQHandler ,然后通过在中断函数内判定IO口的电位变化再决定每个IO口对应变化的操作,这样就不用设置多个中断函数了。
一开始我也尝试了直接mainloop在一个循环内判定按键的变化的,但是考虑到部分按键需要delay时间,所以不能全程监控按键的操作。
但是之前我尝试在mainloop下是可以通过按键控制PWM输出duty的增加或减少,若自动增加则需要增加delay会影响监控,所以才考虑用中断来做。
希望大神们告诉我这P4.0-P4.3的中断应该如何配置才能触发同1个中断函数。或者配置哪里出错了。 |