经过奋斗,LM3S811的中断程序调通了!
** Created By: hu_hejiaun lai_qingmin ** Created date: 2011-10-20 ** Version: v1.0 ** Descriptions: 程序正常运行时,点亮四个LED指示灯。当A0-A3按键按下时,进入中断,分别熄灭相应的LED指示 ** 灯。按键放开后,又点亮LED指示灯。 ** **-------------------------------------------------------------------------------------------------------- ** Modified by: ** Modified date: ** Version: ** Description: ** *********************************************************************************************************/ #include "hw_memmap.h" #include "hw_types.h" #include "hw_ints.h" #include "sysctl.h" #include "systick.h" #include "gpio.h" #include "interrupt.h" unsigned long Sysclk = 12000000UL; #define KEY1 GPIO_PIN_0 /* 定义KEY1 */ #define LED3 GPIO_PIN_0 /* 定义LED3 */ #define KEY2 GPIO_PIN_1 /* 定义KEY1 */ #define LED4 GPIO_PIN_1 /* 定义LED3 */ #define KEY5 GPIO_PIN_2 /* 定义KEY1 */ #define LED6 GPIO_PIN_0 /* 定义LED3 */ #define KEY7 GPIO_PIN_3 /* 定义KEY1 */ #define LED8 GPIO_PIN_1 /* 定义LED3 */
/********************************************************************************************************* ** 函数原形:void GPIO_Port_E_ISR(void) ** 功能描述:首先清除中断标志,再点亮LED3。 ** 说明: 用KEIL软件时,在Startup.S中添加该中断函数名 ** 参数说明:无 ** 返回值: 无 *********************************************************************************************************/ void GPIO_Port_A_ISR(void) { long IntStatus; IntStatus = GPIOPinIntStatus(GPIO_PORTA_BASE, true); /* 获取中断状态 */ if(IntStatus&KEY1) { GPIOPinIntClear(GPIO_PORTA_BASE, KEY1); /* 清除中断标志 */ GPIOPinWrite(GPIO_PORTB_BASE, LED3, 0x00); /* 点亮LED3 */ SysCtlDelay(1000* (Sysclk / 3000)); GPIOPinWrite(GPIO_PORTB_BASE, LED3, 0x01); } if(IntStatus&KEY2) { GPIOPinIntClear(GPIO_PORTA_BASE, KEY2); /* 清除中断标志 */ GPIOPinWrite(GPIO_PORTB_BASE, LED4, 0x00); /* 点亮LED3 */ SysCtlDelay(1000* (Sysclk / 3000)); GPIOPinWrite(GPIO_PORTB_BASE, LED4, 0x01); } if(IntStatus&KEY5) { GPIOPinIntClear(GPIO_PORTA_BASE, KEY5); /* 清除中断标志 */ GPIOPinWrite(GPIO_PORTD_BASE, LED6, 0x00); /* 点亮LED3 */ SysCtlDelay(1000* (Sysclk / 3000)); GPIOPinWrite(GPIO_PORTD_BASE, LED6, 0x01); } if(IntStatus&KEY7) { GPIOPinIntClear(GPIO_PORTA_BASE, KEY7); /* 清除中断标志 */ GPIOPinWrite(GPIO_PORTD_BASE, LED8, 0x00); /* 点亮LED3 */ SysCtlDelay(1000* (Sysclk / 3000)); GPIOPinWrite(GPIO_PORTD_BASE, LED8, 0x01); } }
/********************************************************************************************************* ** 函数原形:int main(void) ** 功能描述:熄灭LED3,并等待按键的中断。 ** 参数说明:无 ** 返回值: 0 *********************************************************************************************************/ int main(void) { SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB); /* 使能GPIO PB口 */ SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); /* 使能GPIO PE口 */ SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD); GPIODirModeSet(GPIO_PORTA_BASE, KEY1|KEY2|KEY5|KEY7, GPIO_DIR_MODE_IN); /* 设置连接KEY1的PE2为输入 */ GPIODirModeSet(GPIO_PORTB_BASE, LED3|LED4, GPIO_DIR_MODE_OUT); /* 设置连接LED3的PB6为输出 */ GPIODirModeSet(GPIO_PORTD_BASE, LED6|LED8, GPIO_DIR_MODE_OUT); GPIOPadConfigSet(GPIO_PORTA_BASE, KEY1|KEY2|KEY5|KEY7, /* 设置KEY1的驱动强度和类型 */ GPIO_STRENGTH_4MA, /* 4mA的输出驱动强度 */ GPIO_PIN_TYPE_STD); /* 设置为推挽管脚 */ GPIOPadConfigSet(GPIO_PORTB_BASE, LED3|LED4, /* 设置LED3的驱动强度和类型 */ GPIO_STRENGTH_4MA, /* 4mA的输出驱动强度 */ GPIO_PIN_TYPE_STD); /* 设置为推挽管脚 */ GPIOPadConfigSet(GPIO_PORTD_BASE, LED6|LED8, /* 设置LED3的驱动强度和类型 */ GPIO_STRENGTH_4MA, /* 4mA的输出驱动强度 */ GPIO_PIN_TYPE_STD); /* 设置为推挽管脚 */
GPIOIntTypeSet(GPIO_PORTA_BASE, KEY1|KEY2|KEY5|KEY7, GPIO_LOW_LEVEL); /*设置KEY1中断的触发方式为低电平触 发 */ GPIOPinIntEnable(GPIO_PORTA_BASE, KEY1|KEY2|KEY5|KEY7); /* 使能KEY1中断 */ IntEnable(INT_GPIOA); /* 使能GPIO PE 口中断 */ IntMasterEnable();
while (1) { GPIOPinWrite(GPIO_PORTB_BASE, LED3|LED4, 0x03); /* 熄灭LED3 */ GPIOPinWrite(GPIO_PORTD_BASE, LED6|LED8, 0x03); } /* return 0; */ } /********************************************************************************************************* END FILE *********************************************************************************************************/
|