ARM:VIC如何与flash向量表交互?

时间:2017-06-05 06:03:49

标签: vector arm interrupt

我在ARM LPC2138上使用中断驱动的LED闪光灯时遇到问题。如果我更改为轮询定时器,它工作正常,所以问题似乎是中断。该程序本质上是Web上的演示代码的副本,适用于我的IDE。

我已经准备好继续尝试并且反复失败,因为这是你学习的方式,但我很感激有关VIC如何工作的具体说明,所以我可以消除一个潜在的原因。

闪存中有一个中断向量表,从位置0x0开始。 MEMMAP寄存器允许它映射到RAM的底部0x4000000。但是,设置VIC的代码如下:

VICVectCntl4 = 0x20 | 4; // 4通知VIC使用哪个地址寄存器。

VICVectAddr4 =(无符号)timerISR; // ISR地址

VICIntEnable | = 0x10; //启用tmr0中断。

我的代码当然还包含ISR函数timerISR()。

这表明不使用表中的定时器向量,因为(我的)ISR的地址是在VIC向量地址寄存器中指定的。

问:我的程序和flash /重映射定时器向量地址之间是否有任何交互,或者在这种情况下是否被忽略?如果涉及,这是怎么发生的?

提前感谢您的任何帮助。

1 个答案:

答案 0 :(得分:1)

查看LPC2138数据表的第13页,  (http://www.nxp.com/documents/user_manual/UM10120.pdf)似乎在flash(或RAM,如果你提到的位被设置)的开头映射的中断是核心处理器异常处理程序。这些中断是所有ARM7处理器的标准配置。如果您查看那里提供的特定中断,您会注意到特定计时器或外围设备没有特定的中断。

" VIC"芯片上的外设设计用于轻松处理各种中断源,如定时器或外部引脚唤醒。它提供了一个额外的工具,可以将特定的中断直接绑定到代码中的函数,这就是您调用的代码片段似乎正在配置。

LPC2138上有VIC的专用参考手册,可在此处找到:http://infocenter.arm.com/help/topic/com.arm.doc.ddi0181e/DDI0181.pdf。第2.2节“操作”提供了有关其运作方式的良好信息。