AM335x Sitara:如何更改CPU模式

时间:2014-04-09 07:03:48

标签: embedded arm interrupt bare-metal cortex-a

我目前正在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寄存器。每次我这样做,我都会跳转到Undefined Exception向量地址。似乎我不允许从用户模式执行此操作。我想我在这里遇到了一些鸡蛋问题。

  • 将自制的向量表链接到0x4030CE00:
    我最后的努力是尝试将我自己的向量表链接到正确的地址并覆盖默认值。不知怎的,我找不到Code Composer Studio v5的汇编语法来重新定位我的向量表。我浏览了spnu118l.pdf(TI的汇编语言工具文档)中列出的汇编程序指令,但找不到有用的东西。我是否必须编写分散文件或使用链接器命令行选项?

This post似乎与我的问题有关。

0 个答案:

没有答案