#include "hw_memmap.h"
#include "hw_ints.h"
#include "hw_nvic.h"
#include "hw_types.h"
#include "interrupt.h"
#include "sysctl.h"
#include "gpio.h"
#define LED3 GPIO_PIN_6
#define KEY3 GPIO_PIN_4
#define PINS GPIO_PIN_5
void delay(int d)//延时函数
{
for( ; d; --d);
}
int main()
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);
GPIOPadConfigSet(GPIO_PORTB_BASE, PINS,
GPIO_STRENGTH_4MA,
GPIO_PIN_TYPE_STD);//配置管脚驱动,驱动电流2MA其实已足够
GPIODirModeSet(GPIO_PORTB_BASE, PINS, GPIO_DIR_MODE_OUT);//设置管脚输出
GPIOPadConfigSet(GPIO_PORTB_BASE,KEY3,GPIO_STRENGTH_2MA,GPIO_PIN_TYPE_STD_WPU);
GPIODirModeSet(GPIO_PORTB_BASE,KEY3,GPIO_DIR_MODE_IN);
IntMasterEnable();
// IntEnable(INT_GPIOB); //使能B端口中断
GPIOIntTypeSet(GPIO_PORTB_BASE,KEY3,GPIO_FALLING_EDGE); //下降沿中断
// GPIOPinIntEnable(GPIO_PORTB_BASE,KEY3); //使能中断
while(1) {
GPIOPinWrite(GPIO_PORTB_BASE, PINS, PINS);//输出高电平
delay(20000);//延时
GPIOPinWrite(GPIO_PORTB_BASE, PINS, ~PINS);//输出低电平
delay(20000);//延时
}
}
void GPIO_Port_B_ISR(void)
{
long IntStatus;
IntStatus=GPIOPinIntStatus(GPIO_PORTB_BASE,true);
GPIOPinIntClear(GPIO_PORTB_BASE,IntStatus);
if(IntStatus&KEY3) {
GPIOPinWrite(GPIO_PORTB_BASE,LED3,LED3^GPIOPinRead(GPIO_PORTB_BASE,LED3));
}
}
// IntEnable(INT_GPIOB); //使能B端口中断
// GPIOPinIntEnable(GPIO_PORTB_BASE,KEY3); //使能中断
为什么要屏蔽这两个才能进入死循环 while(1)
如果不屏蔽的话死循环的点灯就不会执行 且中断也没反应。
不知道 是不是哪设置的不对啊!
是在PROTEUS仿真下试验的