void ADS1254SCLKInit(void) //将GPIO_PIN_2设置为中断
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);
GPIOPadConfigSet(GPIO_PORTD_BASE,GPIO_PIN_2,GPIO_STRENGTH_2MA,GPIO_PIN_TYPE_STD_WPU);// 设置PJ7为2MA,上拉输入
GPIODirModeSet(GPIO_PORTD_BASE, GPIO_PIN_2, GPIO_DIR_MODE_IN);//设置GPIO输入
GPIOPinTypeGPIOInput(GPIO_PORTD_BASE, GPIO_PIN_2); // 设置KEY1所在管脚为输入
GPIOIntTypeSet(GPIO_PORTD_BASE, GPIO_PIN_2, GPIO_FALLING_EDGE);//设置GPIO中断
}
void IntADS1254Handler(void) //中断执行程序
{
unsigned long ulStatus;
ulStatus = GPIOPinIntStatus(GPIO_PORTD_BASE, true); // 读取中断状态
GPIOPinIntClear(GPIO_PORTD_BASE, ulStatus); // 清除中断状态,重要
if (ulStatus&GPIO_PIN_2) // GPIO_PIN_2
{
GPIOPinIntDisable(GPIO_PORTD_BASE,GPIO_PIN_2); // 禁止GPIOD端口中断
IntDisable(INT_GPIOD); // 禁止GPIOD端口中断
OSSemPost(Fun_Semp); //发送信号量
}
}
下面是主程序
while (1)
{
OSSemPend(Fun_Semp,0,&err); //等待信号量
执行我的代码
GPIOPinIntEnable(GPIO_PORTD_BASE,GPIO_PIN_2); // 执行代码完后开中断
IntEnable(INT_GPIOD);
}
程序是:中断来后,关中断,发送信号量,主程序得到信号量,然后执行我的代码,执行完后,再打开中断
问题是:在中断中我关闭了中断,在我执行我的代码过程中,如果还有下降沿触发中断,还是会进入中断,就是说中断根本没有关闭。
为什么?程序哪里不对么?