打印

有关T0TIMI_Addr的问题

[复制链接]
2783|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yxgoodman|  楼主 | 2007-4-7 15:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
ADDR, TI, ic, TE, AN
做了个中断程序,然后有以下错误,希望高手指教。

.\debug\eic.o: In function `EIC_Init':
.\debug\eic.o(.text+0xec): undefined reference to `T0TIMI_Addr'

我查找了ST给的标准库,最初定义T0TIMI_Addr的文件是71x_vect.
T0TIMI_Addr     DCD  T0TIMIIRQHandler

然后T0TIMIIRQHandler是一个标号,不知道是多少,而T0TIMI_Addr在eic.c文件里是这样用的。
extern u32 T0TIMI_Addr;
u8 bCounter;
u32 dOffset=((u32)&T0TIMI_Addr);

请高手指教这是怎么回事?
沙发
lut1lut| | 2007-4-9 10:22 | 只看该作者

中断的初始化和跳转过程


1。
在<vect.s>中从“T0TIMI_Addr     DCD  T0TIMIIRQHandler“到“T0OC2_Addr      DCD  T0OC2IRQHandler”定义的是IRQ各个中断的实际处理程序的地址表。T0TIMI_Addr这变量的内容为T0TIMIIRQHandler,即<vect.s>后面部分中定义的函数T0TIMIIRQHandler。
timer0中断到来后,从IRQ模式下的IRQHandler跳到IRQ模式下的T0TIMIIRQHandler,再切换到SYS模式,然后跳到<71/91x_it.c>中的T0TIMI_IRQHandler

T0TIMIIRQHandler
        IRQ_to_SYS
        BL     T0TIMI_IRQHandler
        SYS_to_IRQ
2。
在<71/91x_init.s>中的宏EIC_INIT   MACRO和楼主用到的<eic.c>中的函数void EIC_Init(void)作用一样,初始化EIC模块的各个寄存器,尤其是SIR。当中断到来时,被响应的那个中断的处理程序地址就会在
IRQHandler
。。。
        LDR    r0, =EIC_base_addr
        LDR    r1, =IVR_off_addr
        ADD    pc,r0,r1 
从SIR中硬件读取地址,放在IVR寄存器中,在此firmware读这个寄存器知道该向哪里跳转
请检查整个跳转过程的环节是否完整?

使用特权

评论回复
板凳
ST_ARM| | 2007-4-9 10:22 | 只看该作者

T0TIMIIRQHandler的地址

在C编译器编译后,T0TIMIIRQHandler就有了自己的地址,通过Link就用实际的地址替代了T0TIMIIRQHandler。关于你的错误,要看你的project来定,顺便问一下你用的是什么软件环境?

使用特权

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

本版积分规则

2

主题

1

帖子

0

粉丝