解决CCS5.5 调试DM8168过程中,无法配置部分寄存器
来源:互联网 发布:海度网络培训怎么样 编辑:程序博客网 时间:2024/06/05 11:51
如何解决上述问题?初步设想增加 ARM权限(即Supervisor模式),是否能够解决上述问题。
一、解决方案
具体步骤如下:
1、编写启动文件super_startup.asm
;**; \file super_startup.asm;; \brief Firmware startup for supervisor mode;; @author mansoor.ahamed@ti.com;;/.sect".text".state32.globalmystartup.global _c_int00mystartup:ldr pc, RTS_JUMP ;Jump to rtslib _c_int00 but skip 4 instructions ;which puts cpu in user mode RTS_JUMP.long(_c_int00 + 0x10).end
编写完成后,将启动文件添加到工程文件中
2、设置CCS编译器,指定super_startup.asm 第一个启动文件。
在工程文件处右击选择Properties:
设置完成后,点击OK即可。这样就完成,跳过boot.asm中将系统模式修改用户模式。
2、工作机制
在super_startup.asm中跳转到 地址:(_c_int00 + 0x10)处,该处的地址有在哪里呢? 标号_c_int00在boot.asm中定义。
具体详见下面。
***************************************************************;* DEFINE THE USER MODE STACK (DEFAULT SIZE IS 512);***************************************************************__stack:.usect ".stack", 0, 4 .global _c_int00;***************************************************************;* FUNCTION DEF: _c_int00;***************************************************************_c_int00: .asmfunc .if __TI_NEON_SUPPORT__ | __TI_VFP_SUPPORT__ ;*------------------------------------------------------ ;* SETUP PRIVILEGED AND USER MODE ACCESS TO COPROCESSORS ;* 10 AND 11, REQUIRED TO ENABLE NEON/VFP ;* COPROCESSOR ACCESS CONTROL REG ;* BITS [23:22] - CP11, [21:20] - CP10 ;* SET TO 0b11 TO ENABLE USER AND PRIV MODE ACCESS ;*------------------------------------------------------ MRC p15,#0x0,r0,c1,c0,#2 MOV r3,#0xf00000 ORR r0,r0,r3 MCR p15,#0x0,r0,c1,c0,#2 ;*------------------------------------------------------ ; SET THE EN BIT, FPEXC[30] TO ENABLE NEON AND VFP ;*------------------------------------------------------ MOV r0,#0x40000000 FMXR FPEXC,r0 .endif ;*------------------------------------------------------ ;* SET TO USER MODE 调试需要 屏蔽该段代码 hailin ;*------------------------------------------------------ MRS r0, cpsr BIC r0, r0, #0x1F ; CLEAR MODESORR r0, r0, #0x10 ; SET USER MODE; ORR r0, r0, #0x1F ; SET SYS MODE MSR cpsr_cf, r0 ;*------------------------------------------------------ ;* INITIALIZE THE USER MODE STACK ;*------------------------------------------------------ .if __TI_AVOID_EMBEDDED_CONSTANTS MOVW sp, __stack MOVT sp, __stack MOVW r0, __STACK_SIZE MOVT r0, __STACK_SIZE .else LDR sp, c_stack LDR r0, c_STACK_SIZE .endif ADD sp, sp, r0
二、疑问点
2.1 地址(_c_int00 + 0x10)在哪里?
首先明确ARM指令长度概念,A8支持两种指令集:
a. 32bits (ARM状态)
b.16bits (Thumb状态)
注:如何确定使用何种指令集?通过查询CPSR[5]状态判断,当CPSR[5]=1,使用Thumb 或 Thumb EE指令集;当CPSR[5]=0,使用ARM指令集。具体详见下图
A8架构的CPSR描述
在CCS5.5中,用户程序成功加载后,读取CPSR[5]时为0,表示使用ARM指令集。
2.2 为什么跳转(_c_int00 + 0x10)处?
跳转到:(_c_int00 + 0x10),实际上跳过 标号_c_int00后 4条指令(ARM指令集中每条指令占用4个byte),即跳过协处理器设置,导致usr模式无法设置。
0 0
- 解决CCS5.5 调试DM8168过程中,无法配置部分寄存器
- TMS320F28335/ <2> CCS5.5调试过程如何查看GPIO端口的状态
- CCS5.3中配置cache大小
- CCS5.3中通过platform配置cache
- DM8168 Uboot烧写(ccs5.3)
- java调试过程 jdk部分代码无法显示变量值
- 解决VS调试过程中无法启动程序或找不到元素
- 用ccs5调试beaglebone
- ccs5裸机调试AM1808
- DM8168调试之ASSERT (ipcFramesOutLink_tsk.c|IpcFramesOutLink_copyFrameInfo|275)解决
- 解决hadoop 3.0.0配置过程中无法找到hadoop-env.sh的问题
- CCS5.3中通过RTSC中的SYS/BIOS配置cache
- CCS5.4+Proteus8的F28027实践课六、实验板焊接调试(12864部分)
- DM8168 ccs5.4 烧写u-boot到nandflash
- DM8168 ccs5.4 烧写u-boot到nandflash
- tms320f2809硬件调试无法设置寄存器
- DM8168 电源调试总结
- DM8168硬件调试-GPIO
- 谷歌是如何做代码审查的
- gcc编译选项
- 统计建模与R软件-第三章习题答案
- 谢谢你曾经来过
- 美国名校为何青睐爱吃泡面的考生
- 解决CCS5.5 调试DM8168过程中,无法配置部分寄存器
- jdbc方式读取oracle的clob字段实例
- Android4.0 Design之UI设计易犯的错误2
- 常用代码
- java Map及Map.Entry详解
- elasticsearch java api优化
- 物联网的发展面临着哪些问题
- jbpm4.4_ssh_请假完整例子
- c#正则表达式语法