【问题标题】:Setup / Errors with Floating Point on TI AM3517 Cortex-A8TI AM3517 Cortex-A8 上的浮点设置/错误
【发布时间】:2015-08-25 16:24:26
【问题描述】:

执行时遇到未定义的指令异常:

   0xED2D8B0E         VPUSH    {D8-D14}

(注意:该语句由编译器生成,作为 C 语言函数入口协议的一部分。)

初始化代码:

;; Initialize VFP (if needed).
;; BL      __iar_init_vfp  HJ REMOVED AND REPLACED WITH BELOW
 MRC    p15, #0, r1, c1, c0, #2         ; r1 = Access Control Register
 ORR    r1, r1, #(0xf << 20)            ; enable full access for p10,11
 MCR    p15, #0, r1, c1, c0, #2         ; Access Control Register = r1
 MOV    r1, #0
 MCR    p15, #0, r1, c7, c5, #4         ; flush prefetch buffer because of FMXR below
                                        ; and CP 10 & 11 were only just enabled
                                        ; Enable VFP itself
 MOV    r0,#0x40000000
 FMXR   FPEXC, r0                       ; FPEXC = r0

当目标 FPU 设置为 VFPv3 或 VFPV3 + NEON 时,我得到未定义的异常。

初始化代码放在“cstartup.c”文件中,在__iar_program_start?cstartup代码处,跟在这段代码sn-p之后:

MRC         p15,0,R1,C1,C0,0
LDR         R0,=CP_DIS_MASK      ;; 0xFFFFEFFA
AND         R1,R1,R0
ORR         R1,R1,#(1<<12)
MCR         p15,0,R1,C1,C0,0

注册(在 VPUSH 之前):

CPSR:  0x80000113  
APSR:  0x80000000  
SPSR:  0x000001D3

工具:

  • IAR Embedded Workbench IDE 和编译器 - 7.40
  • I-Jet 调试探针
  • 放大 AM3517 评估板
  • TI AM35X Cortex-A8 处理器

问题:

  1. 在上面的初始化代码中,需要哪些语句 NEON,哪个用于 VFP?
  2. NEON 和我是否缺少任何初始化说明? VFP 初始化?
  3. 是否需要在宏文件中放置用于调试的语句 探测?

【问题讨论】:

  • 您的应用程序代码是在安全状态还是非安全状态下运行?如果您希望非安全访问正常工作,那么在从安全世界退出之前肯定有 additional things to do

标签: embedded neon iar fpu cortex-a8


【解决方案1】:

问题中提供的代码正确初始化了 Cortex-A8 处理器上的浮点处理器。

获得未定义指令异常的问题(导致此问题)是由操作系统引起的。将无效值写入 FPEXC 寄存器,导致浮点处理器被禁用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-29
    • 1970-01-01
    • 2015-04-23
    • 1970-01-01
    相关资源
    最近更新 更多