开关led中断程序
#include
#include "hw_memmap.h"
#include "hw_types.h"
#include "gpio.h"
#include "sysctl.h"
#include "hw_ints.h"
#include "interrupt.h"
extern void GPIO_Port_J_ISR(void);
int main(void)
{
SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN |
SYSCTL_XTAL_16MHZ);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);//使能外设GPIOF
GPIOPadConfigSet(GPIO_PORTF_BASE, GPIO_PIN_3,
GPIO_STRENGTH_4MA,GPIO_PIN_TYPE_STD);
GPIODirModeSet(GPIO_PORTF_BASE, GPIO_PIN_3, GPIO_DIR_MODE_OUT);
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_3,~GPIO_PIN_3);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOJ);
GPIOPadConfigSet(GPIO_PORTJ_BASE,GPIO_PIN_7,
GPIO_STRENGTH_2MA,GPIO_PIN_TYPE_STD_WPU);// 设置PJ7为2MA,上拉输入
GPIODirModeSet(GPIO_PORTJ_BASE, GPIO_PIN_7, GPIO_DIR_MODE_IN);//设置GPIO输入
GPIOPortIntRegister(GPIO_PORTJ_BASE,GPIO_Port_J_ISR); //注册中断函数
GPIOIntTypeSet(GPIO_PORTJ_BASE, GPIO_PIN_7, GPIO_RISING_EDGE);//设置GPIO中断
GPIOPinIntEnable(GPIO_PORTJ_BASE, GPIO_PIN_7); // 使能KEY所在管脚的中断
IntEnable(INT_GPIOJ); // 使能GPIOJ端口中断
IntMasterEnable(); // 使能处理器中断
while(1)
{
}
}
//PortE中断服务
void GPIO_Port_J_ISR(void)
{
unsigned char ucVal;
unsigned long ulStatus;
ulStatus = GPIOPinIntStatus(GPIO_PORTF_BASE,true); //读取中断状态
GPIOPinIntClear(GPIO_PORTJ_BASE, ulStatus); //清除中断状态
if (ulStatus &GPIO_PIN_7) //如果KEY的中断状态有效
{
ucVal = GPIOPinRead(GPIO_PORTF_BASE, GPIO_PIN_3);
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_3, ~ucVal); //翻转LED
SysCtlDelay(5 * (SysCtlClockGet() / 3000)); //延时约5ms,消除按键抖动
while (GPIOPinRead(GPIO_PORTF_BASE, GPIO_PIN_7) == 0x00); //等待KEY抬起
SysCtlDelay(5 * (SysCtlClockGet() / 3000)); //延时约5ms,消除松键抖动
}
} |