我正在尝试编写一些简单的代码,以便使用Launchpad上的两个开关打开和关闭板载LED。 但是,只要我在端口1引脚4上启用中断,中断标志就会出现。 此引脚连接到Launchpad上的开关2 (常开),并在其关闭时将引脚连接到GND。 我开始做一些实验,当我启用端口1引脚5上的中断时也会发生这种情况,该端口1引脚5没有连接到任何按钮。 我已经使用了几种不同的配置,但我根本不知道为什么在启用中断时会发生中断。 端口1引脚1具有完全相同的寄存器和交换机配置,不会以这种方式运行。
我最初使用TI的驱动程序库为MSP432编写代码,然后通过设置寄存器值再次编写代码。 两个代码都有相同的问题。
我尝试了将引脚配置为具有下拉功能的输入时的上升边缘触发和将引脚配置为具有上拉功能的输入时的下降边缘中断触发,这两个引脚都有相同的问题。 我知道在MSP430s上,当寄存器初始化到正在设置的标志时,您必须清除中断。 但是,P1IFG寄存器将初始化为所有未断言的标志。
代码如下:
void main (void)
{
WDT_A->CTL = WDT_A_CTL_PW | WDT_A_CTL_HOLD; //停止监视计时器
/* S1 */
GPIO_setAsInputPinWithPullUp阻 器(GPIO_PORT_P1, GPIO_PIN1);
/* S2 */
GPIO_setAsInputPinWithPullUp阻 器(GPIO_PORT_P1, GPIO_PIN4);
/*红色LED */
GPIO _setAsOutputPin (GPIO端口P1,GPIO _PIN0);
GPIO _setOutputLowOnPin (GPIO端口P1,GPIO _PIN0);
GPIO中断边缘选择(GPIO_PORT_P1, GPIO PIN1, GPIO高电平转换);
GPIO中断边缘选择(GPIO_PORT_P1, GPIO_PIN4, GPIO高电平转换);
//上3位控制硬件优先级,下7位控制子优先级
InterrupT_setPriority (INT_Port1,0xC0);
GPIO注册器中断(GPIO_PORT_P1, InputIRQHandler);
中断= gPIO_getEnabledInterruptStatus(GPIO_PORT_P1);
GPIO _启用中断(GPIO_PORT_P1, GPIO _PIN1);
GPIO _启用中断(GPIO_PORT_P1, GPIO _PIN4);
/*注册级别代码
P1->SEL0 &=~BIT4;
P1->SEL1 &=~BIT4;
P1->DIR &=~BIT4;
P1->OUT |= BIT4;
P1->REN |= BIT4;
P1->IES |= BIT4;
P1->IE |= BIT4;
*/
interrup_enableMaster();
whid(1);
}
void inputIRQHandler(void){
UINT_FAST16_t中断;
中断= gPIO_getEnabledInterruptStatus(GPIO_PORT_P1);
IF (中断和GPIO _PIN1)
{
GPIO清除InterruptFlag (GPIO端口P1,GPIO PIN1);
GPIO _setOutputLowOnPin (GPIO_PORT_P1, GPIO _PIN0);
}
IF (中断和GPIO _PIN4)
{
GPIO清除InterruptFlag (GPIO端口P1,GPIO PIN4);
GPIO _setOutputHighOnPin (GPIO_PORT_P1, GPIO _PIN0);
}
}
有什么想法吗?