打印

求ARM7 LPC2103老手指点,在线等待

[复制链接]
2429|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Hnc2012|  楼主 | 2012-8-16 15:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
目前小弟刚接触ARM7处理器,芯片为LPC2103,在用TIMER0实现定时中断时,一直提示有错,小弟的开发环境是IAR,查询方式是OK的,中断方式就是不行啊,求高手指教:
例程代码如下:
void InitTimer0(void)
{
    //IRQEnable();
    T0TCR = 2;
    T0TC = 0;
    T0PR = 0;
    T0MCR = 0x03;
    T0MR0 = 11059200/2;
    T0TCR = 0x01;
    // Assign to IRQ
    VICIntSelect = VICIntSelect&(~(1<<4));
    // Set interrupt slots
    VICVectAddr0 = (unsigned int)IRQ_Timer0;//Interrupt Vector Enter Address
    VICVectCntl0 = 0x20|0x04;                //Interrupt Vector Privilege Level
    // Timer 0 interrupt enable
    VICIntEnable = 1<<0x04;
}

void __irq  IRQ_Timer0(void)
{
     if((IO0SET&LED1CON)==0)              
     IO0SET =  LED1CON|LED2CON|LED3CON;   //LED2端口高电平               
     else
     IO0CLR = LED1CON|LED2CON|LED3CON;    //LED2端口低电平   
        
     T0IR = 0x01;
     VICVectAddr0 = 0;
}

这种写法系统提示:Error[Pa002]: the type attribute "__irq" is not allowed on this declaration ;

我在网上看也有 __irq void IRQ_Timer0(void)写法,这种写法编译是没有问题的;
但进不了中断;
小弟在线等待解答。

相关帖子

沙发
cao884203| | 2012-8-17 13:32 | 只看该作者
T0TCR = 2是什么意思 如果 T0TCR = 0x01启动了 MR0还能改么?不都是TCR最后启动的么 我也刚学

使用特权

评论回复
板凳
zqxat2007| | 2012-8-30 14:52 | 只看该作者
本帖最后由 zqxat2007 于 2012-9-3 16:21 编辑

一看程序 就知道楼主是粘贴zlg的模板 ,zlg的 一般都是ads下运行的 ,后来也有keil下的移植

你这个写法 是ads的 不通用  而且函数是zlg自己加的 建议用 keil 学习

使用特权

评论回复
地板
阿南| | 2012-8-30 20:19 | 只看该作者
进不了中断,需要确定是否有产生中断标志,是否已经进入中断入口0x18,是否在处理中断时程序跑飞,中断向量表是否正确等。

使用特权

评论回复
5
ningling_21| | 2012-9-2 16:24 | 只看该作者
void __irq  IRQ_Timer0(void)

中断函数需要在 启动文件 *.s 中有声明才行,否则肯定报错...

使用特权

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

本版积分规则

0

主题

1

帖子

0

粉丝