解决CCS5.5 调试DM8168过程中,无法配置部分寄存器

如何解决上述问题?初步设想增加 ARM权限(即Supervisor模式),是否能够解决上述问题。

一、解决方案

具体步骤如下:

  1、编写启动文件super_startup.asm

;**
; \file super_startup.asm
;
; \brief Firmware startup for supervisor mode
;
; @author mansoor.ahamed@ti.com
;
;/



	.sect	".text"
	.state32
	.global	mystartup
	.global _c_int00

mystartup:
	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 MODES
		ORR     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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值