ARM:VIC 如何与闪存向量交互 table?
ARM: How does VIC interact with flash vector table?
我在 ARM LPC2138 上运行中断驱动的 LED 闪光器时遇到问题。如果我改为轮询定时器,它工作正常,所以问题似乎是中断。该程序本质上是网上演示代码的副本,适用于我的 IDE。
我准备好不断尝试并反复失败,因为这就是你的学习方式,但我希望能对 VIC 的工作原理进行具体说明,这样我就可以消除一个潜在的原因。
闪存中有一个中断向量 table,从位置 0x0 开始。 MEMMAP 寄存器允许它映射到 RAM 的底部,0x4000000。不过设置VIC也有代码,如下:
VICVectCntl4 = 0x20 | 4; // 4 通知 VIC 使用哪个地址寄存器。
VICVectAddr4 =(无符号)timerISR; // 中断服务程序地址
VICIntEnable |= 0x10 ; // 启用 tmr0 中断。
当然,我的代码还包含 ISR 函数 timerISR()。
这表明未使用 table 中的定时器向量,因为(我的)ISR 的地址在 VIC 向量地址寄存器中指定。
问:我的程序与 flash/remapped 定时器向量地址之间是否存在任何交互,或者在这种情况下是否被忽略?如果涉及,这是如何发生的?
在此先感谢您的帮助。
查看 LPC2138 数据表的第 13 页,
(http://www.nxp.com/documents/user_manual/UM10120.pdf) 似乎映射在闪存(或 RAM,如果您提到的位已设置)开头的中断是核心处理器异常处理程序。这些中断是所有 ARM7 处理器的标准中断。如果您查看那里提供的特定中断,您会注意到没有什么特定于特定定时器或外围设备。
芯片上的 "VIC" 外围设备旨在轻松处理各种中断源,例如定时器或外部引脚唤醒。它提供了一个额外的工具,用于将特定中断直接绑定到代码中的函数,这就是您调用的代码段似乎正在配置的内容。
LPC2138 上的 VIC 有专门的参考手册,可在此处找到:http://infocenter.arm.com/help/topic/com.arm.doc.ddi0181e/DDI0181.pdf。第 2.2 节操作提供了有关其操作方式的良好信息。
我在 ARM LPC2138 上运行中断驱动的 LED 闪光器时遇到问题。如果我改为轮询定时器,它工作正常,所以问题似乎是中断。该程序本质上是网上演示代码的副本,适用于我的 IDE。
我准备好不断尝试并反复失败,因为这就是你的学习方式,但我希望能对 VIC 的工作原理进行具体说明,这样我就可以消除一个潜在的原因。
闪存中有一个中断向量 table,从位置 0x0 开始。 MEMMAP 寄存器允许它映射到 RAM 的底部,0x4000000。不过设置VIC也有代码,如下:
VICVectCntl4 = 0x20 | 4; // 4 通知 VIC 使用哪个地址寄存器。
VICVectAddr4 =(无符号)timerISR; // 中断服务程序地址
VICIntEnable |= 0x10 ; // 启用 tmr0 中断。
当然,我的代码还包含 ISR 函数 timerISR()。
这表明未使用 table 中的定时器向量,因为(我的)ISR 的地址在 VIC 向量地址寄存器中指定。
问:我的程序与 flash/remapped 定时器向量地址之间是否存在任何交互,或者在这种情况下是否被忽略?如果涉及,这是如何发生的?
在此先感谢您的帮助。
查看 LPC2138 数据表的第 13 页, (http://www.nxp.com/documents/user_manual/UM10120.pdf) 似乎映射在闪存(或 RAM,如果您提到的位已设置)开头的中断是核心处理器异常处理程序。这些中断是所有 ARM7 处理器的标准中断。如果您查看那里提供的特定中断,您会注意到没有什么特定于特定定时器或外围设备。
芯片上的 "VIC" 外围设备旨在轻松处理各种中断源,例如定时器或外部引脚唤醒。它提供了一个额外的工具,用于将特定中断直接绑定到代码中的函数,这就是您调用的代码段似乎正在配置的内容。
LPC2138 上的 VIC 有专门的参考手册,可在此处找到:http://infocenter.arm.com/help/topic/com.arm.doc.ddi0181e/DDI0181.pdf。第 2.2 节操作提供了有关其操作方式的良好信息。