打印

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

[复制链接]
927|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
13039826907|  楼主 | 2019-1-9 22:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#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的板子里还是不好使。求大神帮忙怎么弄呀

相关帖子

沙发
13039826907|  楼主 | 2019-1-10 08:48 | 只看该作者
DDDDD

使用特权

评论回复
板凳
Z赤心木QW| | 2019-1-10 11:11 | 只看该作者
定时器是否有个使能开关或者启动开关。
像STM32等单片机是配置好后需要启动才会运行的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

6

帖子

0

粉丝