不知道为什么我用GPIO中断时,只用一个IO口时是可以正常中断的,可是我用了两个不同的IO口,设置两个IO中断就只能进一个中断回调函数
下面的是我的程序
//GPIO中断实验
#include <stdio.h>
#include "M051Series.h"
#include "Driver\DrvGPIO.h"
#include "Driver\DrvSYS.h"
void P0CALLBACK(void);
void P4CALLBACK(void);
void sys_init(void);
int L_num=0;
void P0CALLBACK(void)
{
L_num++;
if(L_num>=4) L_num=0;
}
/*void P4CALLBACK(void)
{
P14_DOUT=~P14_DOUT;
}*/
void Sys_Init()
{
UNLOCKREG();
SYSCLK->PWRCON.XTL12M_EN = 1;//设定12M外部晶振
DrvSYS_Delay(5000);//等待时钟就绪
DrvGPIO_Open(E_PORT0,0,E_IO_INPUT);
DrvGPIO_Open(E_PORT4,0,E_IO_INPUT);
DrvGPIO_InitFunction(E_FUNC_GPIO); //指定
DrvGPIO_SetDebounceTime(5,E_DBCLKSRC_10K);
DrvGPIO_EnableDebounce(E_PORT0,0); //去抖动
DrvGPIO_EnableInt(E_PORT0, 0,E_IO_FALLING,E_MODE_EDGE); //GPIO中断设置
DrvGPIO_SetIntCallback(P0CALLBACK,0);
/*DrvGPIO_InitFunction(E_FUNC_GPIO); //指定
DrvGPIO_SetDebounceTime(5,E_DBCLKSRC_10K);
DrvGPIO_EnableDebounce(E_PORT4,0); //去抖动
DrvGPIO_EnableInt(E_PORT4,0,E_IO_FALLING,E_MODE_EDGE); //GPIO中断设置
DrvGPIO_SetIntCallback(0,P4CALLBACK);
*/
}
int main (void)
{
Sys_Init();
while(1)
{
switch(L_num)
{
case 1: _PORT_DOUT(1,7)=0; P10_DOUT=1; break;
case 2: P16_DOUT=0; P17_DOUT=1; break;
case 3: P15_DOUT=0; P16_DOUT=1; break;
default: P10_DOUT=0; P15_DOUT=1; break;
}
P02_DOUT=0;
}
} |