TI AM3517 Cortex-A8上的浮点设置/错误



我得到一个未定义的指令异常时执行:

   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代码处,以下代码段:

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嵌入式工作台IDE &编译器- 7.40
  • I-Jet调试探头
  • Zoom AM3517 eval board
  • TI AM35X Cortex-A8处理器

问题:

  1. 在上面的初始化代码中,需要哪些语句NEON和VFP哪个?
  2. 是否有任何初始化指令我错过了NEON和VFP初始化?
  3. 是否有语句我需要放置在宏文件的调试探针吗?

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

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

相关内容

  • 没有找到相关文章

最新更新