LM3S中断程序调通了! 经过奋斗,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
*********************************************************************************************************/ |