我目前正在 TI Sitara AM 3359 上启动一个裸机项目。事实上,我在这个阶段使用 TI 的 ICE 板进行开发。
对于一些外围设备的初始化,我需要切换到特权模式。我想,系统模式就足够了。现在这就是麻烦开始的地方:我如何进入系统模式?
到目前为止我尝试过:
- 覆盖向量表中的指令:
我将_swihandler的地址存储在地址0x4030CE28。ldr r0, _swihandler mov r1, #0xCE28 ; Load global vector table base address, low movt r1, #0x4030 ; Load global vector table base address, high str r0, [r1]
根据 TI 的文档(spruh73h.pdf,技术参考手册),如果执行 0x4030CE08 处的 SWI 指令,则该词将加载到 PC 中。在调试器中,我可以看到存储的值是 0xE92D4001 而不是我的函数实际所在的 0x4030088C。因此,当执行 SWI 时,跳转不起作用。不知道为什么地址写不正确。 - 重定位向量基地址:
我尝试访问 CP15 的 VBAR 寄存器。每次我这样做时,我都会跳转到未定义的异常向量地址。似乎我不允许从用户模式这样做。我想我在这里遇到了某种先有后有的问题。 - 将自制向量表链接到 0x4030CE00:
我最后的努力是尝试将自己的向量表链接到正确的地址并覆盖默认值。不知何故,我找不到 Code Composer Studio v5 的汇编语法来重新定位我的向量表。我浏览了 spnu118l.pdf(TI 的汇编语言工具文档)中列出的汇编器指令,但找不到有用的东西。我是否必须编写分散文件或使用链接器命令行选项?
这篇文章似乎与我的问题有关。