13039826907 发表于 2019-1-10 08:56

用ARM7写了一个定时器中断,但是一直进不去,求大神帮看一下

#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的板子里还是不好使。求大神帮忙怎么弄呀{:dizzy:}

13039826907 发表于 2019-1-10 13:57

有没有大佬帮看一下啊 搞了三天了还没搞明白 快疯掉了
页: [1]
查看完整版本: 用ARM7写了一个定时器中断,但是一直进不去,求大神帮看一下