DSP程序运行中止(DMA汇编操作)——什么问题?
通过汇编在二级bootloader中实现DMA,通过DMA来将程序段.text从外部的ROM搬至内部的程序RAM中。但是程序运行过程中,异常中止了,通过仿真器查明,程序停在了DMA的主控制寄存器查询位置(下面代码wait标示处)。但是,在这个循环部分里面打入断点之行,可以正常引导入main函数。
程序的boot程序如下所示,大家帮忙分析分析。我初步断定可能是由于DMA的寄存器使用有问题。。。
;****************************************************************
; DMA操作
;****************************************************************
retPlace:
;****************************************************************
; DMA Register:PRICTL、SECCTL
;****************************************************************
mvklPRICTL0,A4
mvkl0x00000000,B4
mvkhPRICTL0,A4
mvkh0x00000000,B4
stw B4,*A4
nop 5
mvklSECCTL0,A4
mvkl0x00000000,B4
mvkhSECCTL0,A4
mvkh0x00000000,B4
stw B4,*A4
nop 5
;****************************************************************
; DMA Register:DMA0_SRA、DMA0_DSA、DMA0_CNT
;****************************************************************
mvklDMA0_SRA,A4
mvklDMA0_SRA_V,B4
mvkhDMA0_SRA,A4
mvkhDMA0_SRA_V,B4
stw B4,*A4
nop 5
mvklDMA0_DSA,A4
mvklDMA0_DSA_V,B4
mvkhDMA0_DSA,A4
mvkhDMA0_DSA_V,B4
stw B4,*A4
nop 5
mvklDMA0_CNT,A4
mvklDMA0_CNT_V,B4
mvkhDMA0_CNT,A4
mvkhDMA0_CNT_V,B4
stw B4,*A4
nop 5
;****************************************************************
; 启动DMA开始传输
;****************************************************************
mvklPRICTL0,A4
mvkl0x00000001,B4
mvkhPRICTL0,A4
mvkh0x00000001,B4
stw B4,*A4
nop 5
;****************************************************************
; 判定DMA是否结束
;****************************************************************
wait:
mvklPRICTL0,A4
mvkhPRICTL0,A4
ldw *A4, B2
nop 5
mvkl0x0000000C,A4
mvkh0x0000000C,A4
and A4, B2, B2
[ B2]bwait
[!B2]bcopy_data
nop 5
;***********************************************************
; 将.cinit段和.switch段及其他段搬运到外部数据RAM
;***********************************************************
copy_data:
copy_cinit:
……
……
…… 会不会是流水线冲突,你在wait代码段里多加几个nop试试
页:
[1]