#include<lpc23xx.h> //DAbt_Handler B DAbt_Handler
#define uchar unsigned char
#define uint unsigned int
typedef unsigned int uint32;
unsigned int flag=1;
#define LED1 (1<<16)
void Timer0_Init(void);
void __irq IRQ_Timer0(void);
void delayms(int ns);
int main(void)
{
IODIR1 |=1<<16;
IOSET1 |=1<<16; //点亮LED1
IODIR1 |=1<<17;
IOSET1 |=1<<17; //点亮LED2
Timer0_Init(); //初始化定时器0
while(1); //等待进入中断程序
}
void delayms(int ns)
{
int i;
int j;
for(j=0;j<ns;j++)
for(i=0;i<1000;i++);
}
/*************定时器0中断程序****************/
void __irq IRQ_Timer0(void)
{
IOCLR1 |=1<<17; //熄灭LED2
if(flag==1)
{
IOCLR1|=LED1; //熄灭LED1
flag=0;
}
else
{
IOSET1|=LED1; //点亮LED1
flag=1;
}
T0IR=0x01; //清除中断标志
VICVectAddr=0x00; //通知VIC中断处理结束
}
/***********定时器0初始化程序**************/
void Timer0_Init(void)
{
T0PR = 0; // 设置定时器0分频为100分频,得110592Hz
T0MCR = 0x03; // 匹配通道0匹配中断并复位T0TC
T0MR0 = 110592; // 比较值(1S定时一次)
T0TCR = 0x03; // 定时器计数器和预分频计数器使能
T0TCR = 0x01;
VICIntSelect = 0x00; // 所有中断通道设置为IRQ中断
VICVectCntl0 = 0x20|4 ; // 第五位 向量IRQ slot使能 | 中断号
VICVectAddr0 = (uint32)IRQ_Timer0; // 设置中断服务程序地址
VICIntEnable = (1 << 4); // 使能定时器0中断 VICVectCntl0 = 0x20|X ,VICIntEnable = (1 << X)
}
用的是LPC2387。进debug调试,就卡在main函数那里了,卡在刚进去那里,就是下面都不走了,但是我直接烧写到板子上的话LED还是可以亮的,只是不进中断。进入DEBUG调试时,STEP都是灰色的,Command显示
Data Abort: ARM Instruction at 0000012CH, Memory Access at FFE08000H
我查了一下LPC23xx的使用手册,上面写FFE08000H这个地址在LPC2387里用不了,2388可以用,于是我把keil的工程换成了LPC2388,DEBUG调试正常了,但是下载到LPC2387的板子里还是不好使。求大神帮忙怎么弄呀 |