Embedded AM335x Sitara:如何更改CPU模式

Embedded AM335x Sitara:如何更改CPU模式,embedded,arm,interrupt,bare-metal,cortex-a,Embedded,Arm,Interrupt,Bare Metal,Cortex A,我目前正在TI Sitara am 3359上启动一个裸机项目。事实上,我在这个阶段使用TI的ICE板进行开发 对于某些外围设备的初始化,我需要切换到特权模式。我想系统模式就足够了。问题就从这里开始:我如何进入系统模式 到目前为止,我试过: 覆盖向量表中的指令:我将我的_swihandler的地址存储在地址0x4030CE28。 ldr r0 movr1,0xCE28;加载全局向量表基址,低 movtr1,0x4030;加载全局向量表基址,高 strr0[r1] 根据TI的文档spruh73h.

我目前正在TI Sitara am 3359上启动一个裸机项目。事实上,我在这个阶段使用TI的ICE板进行开发

对于某些外围设备的初始化,我需要切换到特权模式。我想系统模式就足够了。问题就从这里开始:我如何进入系统模式

到目前为止,我试过:

覆盖向量表中的指令:我将我的_swihandler的地址存储在地址0x4030CE28。 ldr r0 movr1,0xCE28;加载全局向量表基址,低 movtr1,0x4030;加载全局向量表基址,高 strr0[r1] 根据TI的文档spruh73h.pdf《技术参考手册》,如果执行0x4030CE08处的SWI指令,则该词将加载到PC中。在调试器中,我可以看到存储的值是0xE92D4001,而不是我的函数实际所在的0x4030088C。因此,当执行SWI时,跳转不起作用。不知道为什么地址写得不正确。 重新定位矢量基址:我尝试访问CP15的VBAR寄存器。每次这样做,我都会跳转到未定义的异常向量地址。似乎我不允许在用户模式下这样做。我想我有点鸡和蛋的问题。 将自制的向量表链接到0x4030CE00:我最后的努力是尝试将我自己的向量表链接到正确的地址并覆盖默认值。不知何故,我找不到CodeComposer Studio v5的汇编程序语法来重新定位向量表。我浏览了spnu118l.pdf TI的汇编语言工具文档中列出的汇编指令,但没有找到有用的东西。我必须编写分散文件还是使用链接器命令行选项?
似乎与我的问题有关。

试试ldr r0,=\u;注意等号。我认为您正在加载_swichandler的第一条汇编指令。您还可以使用ldr r1,=0x4030ce28。Google.ltorg和ARM literal pool@artlessnoise:r0的值实际上是_swichandler的第一条指令。我查过了。然而,在标签前面放一个等号是行不通的。它会在表达式中产生错误的术语和非法的符号错误。您使用的是什么汇编程序?这是一个gnu汇编程序扩展。您需要将地址作为数据项放置,然后加载。您也可以尝试adrl r0,\u swihandler。请参阅:@artlessnoise:CodeComposer Studio附带的汇编程序。它应该是某种gcc衍生产品。adrl可以工作,但会产生一个警告:无效指令修饰符被忽略。仅使用adr也可以,但没有警告。那么adr r0、\u swihandler是否可以组装或完全修复问题?通常,使用哪个伪操作取决于_swidhandler相对于代码的位置。如果_swidhandler是外部的,则需要一个定义它的位置。