您好,欢迎来到61ic! | [登录] [注册] 忘记密码 | 设为首页 帮助
 . 网站首页 . 业界新闻 . 设计中心 . 移动技术 . TI专栏 . ADI专栏 . FPGA专栏 . 代码工厂 . 官方商城 . 
 . 活动专区 . 新品快递 . 解决方案 . 前沿科技 . TI资源 . ADI资源 . FPGA资源 . 下载中心 . 产品展示 . 
加入收藏
付款方式
联系我们
您现在的位置: 61IC电子在线 >> TI专栏 >> TI CCS >> 参考经验 >> 正文
  解决CCS5.5 调试DM8168过程中,无法配置部分寄存器           ★★★ 【字体:
解决CCS5.5 调试DM8168过程中,无法配置部分寄存器
作者:swat    文章来源:swat    点击数:    更新时间:2014-9-25    

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

一、解决方案

具体步骤如下:

  1、编写启动文件super_startup.asm

 

[csharp] view plaincopy在CODE上查看代码片派生到我的代码片
01.;** 
02.; \file super_startup.asm 
03.; 
04.; \brief Firmware startup for supervisor mode 
05.; 
06.; @author mansoor.ahamed@ti.com 
07.; 
08.;/ 
09. 
10. 
11. 
12.    .sect   ".text" 
13.    .state32 
14.    .global mystartup 
15.    .global _c_int00 
16. 
17.mystartup: 
18.    ldr pc, RTS_JUMP ;Jump to rtslib _c_int00 but skip 4 instructions  
19.                     ;which puts cpu in user mode  
20.      
21. 
22.RTS_JUMP        .long   (_c_int00 + 0x10) 
23.     
24.    .end 


    编写完成后,将启动文件添加到工程文件中

2、设置CCS编译器,指定super_startup.asm 第一个启动文件。

     在工程文件处右击选择Properties:


设置完成后,点击OK即可。这样就完成,跳过boot.asm中将系统模式修改用户模式。

2、工作机制

在super_startup.asm中跳转到 地址:(_c_int00 + 0x10)处,该处的地址有在哪里呢? 标号_c_int00在boot.asm中定义。

具体详见下面。

 

[csharp] view plaincopy在CODE上查看代码片派生到我的代码片
01.*************************************************************** 
02.;* DEFINE THE USER MODE STACK (DEFAULT SIZE IS 512) 
03.;*************************************************************** 
04.__stack:.usect  ".stack", 0, 4 
05. 
06.        .global _c_int00 
07.;*************************************************************** 
08.;* FUNCTION DEF: _c_int00 
09.;*************************************************************** 
10._c_int00: .asmfunc 
11. 
12.        .if __TI_NEON_SUPPORT__ | __TI_VFP_SUPPORT__ 
13.        ;*------------------------------------------------------ 
14.        ;* SETUP PRIVILEGED AND USER MODE ACCESS TO COPROCESSORS 
15.        ;* 10 AND 11, REQUIRED TO ENABLE NEON/VFP 
16.        ;* COPROCESSOR ACCESS CONTROL REG 
17.        ;* BITS [23:22] - CP11, [21:20] - CP10 
18.        ;* SET TO 0b11 TO ENABLE USER AND PRIV MODE ACCESS 
19.        ;*------------------------------------------------------ 
20.        MRC      p15,#0x0,r0,c1,c0,#2 
21.        MOV      r3,#0xf00000 
22.        ORR      r0,r0,r3 
23.        MCR      p15,#0x0,r0,c1,c0,#2 
24. 
25.        ;*------------------------------------------------------ 
26.        ; SET THE EN BIT, FPEXC[30] TO ENABLE NEON AND VFP 
27.        ;*------------------------------------------------------ 
28.        MOV      r0,#0x40000000 
29.        FMXR     FPEXC,r0 
30.        .endif 
31. 
32.        ;*------------------------------------------------------ 
33.        ;* SET TO USER MODE  调试需要 屏蔽该段代码   hailin 
34.        ;*------------------------------------------------------ 
35.        MRS     r0, cpsr 
36.        BIC     r0, r0, #0x1F  ; CLEAR MODES 
37.        ORR     r0, r0, #0x10  ; SET USER MODE 
38.;        ORR     r0, r0, #0x1F  ; SET SYS MODE 
39.        MSR     cpsr_cf, r0 
40. 
41.        ;*------------------------------------------------------ 
42.        ;* INITIALIZE THE USER MODE STACK 
43.        ;*------------------------------------------------------ 
44.        .if __TI_AVOID_EMBEDDED_CONSTANTS 
45.        MOVW    sp, __stack 
46.        MOVT    sp, __stack 
47.        MOVW    r0, __STACK_SIZE 
48.        MOVT    r0, __STACK_SIZE 
49.        .else 
50.        LDR     sp, c_stack 
51.        LDR     r0, c_STACK_SIZE 
52.        .endif 
53.        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模式无法设置。

文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章: 没有了
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
    CCS的一些问题
    CCS5调试linux内核时查看静态…
    CCS5.4在win7 64位下安装失败…
    TI的DSP在CCS下如何读取core…
    CCS5.4安装问题
    CCS V5中设置本地Git服务对软…
    CCS不能显示变量或函数定义即…
    CCS编译中常常遇到的问题以及…
    修改UBOOT和LINUX调试串口(…
    CCS3.3 can't open file…
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    站长:61 湘ICP备13001086号-2