前辈们我刚学arm 。用的EasyARM101,我写了个简单程序可中断有反应,但中断程序没反映,为什么。。。。
还有我用的Keil+J-link
调试的时候开发板自己运行自己的,keil调试没反应,这是为什么。。。
急啊...
#include <lm3s101.h>
#include "hw_ints.h"
#include "hw_memmap.h"
#include "hw_types.h"
#include "hw_gpio.h"
#include "gpio.h"
#include "sysctl.h"
#define PIN4 GPIO_PIN_4 //0x0000 0010
#define PIN5 GPIO_PIN_5 //0x0000 0020
void GPIO_Port_B_ISR(void);
void GPIO_CONFIG(void);
int sing=1;
unsigned long u=0x00000020;
void GPIO_CONFIG(void)
{
//时钟设置
SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN |SYSCTL_XTAL_6MHZ);
//GIOP B口使能
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);
//设置PB1、3口输入 PB4、5口输出
GPIODirModeSet(GPIO_PORTB_BASE, GPIO_PIN_1|GPIO_PIN_3, GPIO_DIR_MODE_IN);
GPIODirModeSet(GPIO_PORTB_BASE, GPIO_PIN_4|GPIO_PIN_5, GPIO_DIR_MODE_OUT);
//设置中断
GPIOIntTypeSet(GPIO_PORTB_BASE,GPIO_PIN_1|GPIO_PIN_3,GPIO_RISING_EDGE);
//中断使能
GPIOPinIntEnable(GPIO_PORTB_BASE,GPIO_PIN_1|GPIO_PIN_3);
IntEnable(INT_GPIOB);
//注册中断程序
IntRegister(INT_GPIOB,GPIO_Port_B_ISR);
IntEnable(INT_GPIOB);
IntMasterEnable( );
}
//延时程序
void delay(int d)
{
for(;d!=0;--d);
}
//中断服务程序
void GPIO_Port_B_ISR(void)
{
unsigned long ulStatus;
ulStatus=GPIOPinIntStatus(GPIO_PORTB_BASE,true); // 读取中断状态
GPIOPinIntClear(GPIO_PORTB_BASE , ulStatus); // 清除中断状态,
if(sing==1)
{
sing=0;
GPIOPinWrite(GPIO_PORTB_BASE,PIN5,u);
}
else
{
sing=1;
GPIOPinWrite(GPIO_PORTB_BASE,PIN5,~u);
}
}
//主程序入口
int main(void)
{
GPIO_CONFIG();
for(;;)
{
while(sing==1)
{
GPIOPinWrite(GPIO_PORTB_BASE,PIN4,u); //01
delay(800000); //延时
GPIOPinWrite(GPIO_PORTB_BASE,PIN4,~u); //10
delay(800000);
}
}
} |