打印

DSP程序运行中止(DMA汇编操作)——什么问题?

[复制链接]
1607|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
maple502|  楼主 | 2012-12-20 23:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
通过汇编在二级bootloader中实现DMA,通过DMA来将程序段.text从外部的ROM搬至内部的程序RAM中。
但是程序运行过程中,异常中止了,通过仿真器查明,程序停在了DMA的主控制寄存器查询位置(下面代码wait标示处)。但是,在这个循环部分里面打入断点之行,可以正常引导入main函数。
程序的boot程序如下所示,大家帮忙分析分析。我初步断定可能是由于DMA的寄存器使用有问题。。。


;****************************************************************
; DMA操作
;****************************************************************
retPlace:
       ;****************************************************************
        ; DMA Register:PRICTL、SECCTL
        ;****************************************************************
       
            mvkl  PRICTL0,A4
            mvkl  0x00000000,B4

            mvkh  PRICTL0,A4
            mvkh  0x00000000,B4

            stw   B4,*A4
            nop   5
            
            mvkl  SECCTL0,A4
            mvkl  0x00000000,B4

            mvkh  SECCTL0,A4
            mvkh  0x00000000,B4

            stw   B4,*A4
            nop   5            
                               
                ;****************************************************************
        ; DMA Register:DMA0_SRA、DMA0_DSA、DMA0_CNT
        ;****************************************************************
                   
            mvkl  DMA0_SRA,A4
            mvkl  DMA0_SRA_V,B4

            mvkh  DMA0_SRA,A4
            mvkh  DMA0_SRA_V,B4

            stw   B4,*A4
            nop   5                               
          
            mvkl  DMA0_DSA,A4
            mvkl  DMA0_DSA_V,B4

            mvkh  DMA0_DSA,A4
            mvkh  DMA0_DSA_V,B4

            stw   B4,*A4
            nop   5               
            
            mvkl  DMA0_CNT,A4
            mvkl  DMA0_CNT_V,B4

            mvkh  DMA0_CNT,A4
            mvkh  DMA0_CNT_V,B4

            stw   B4,*A4
            nop   5                                      
          
                ;****************************************************************
            ; 启动DMA开始传输
        ;****************************************************************
                        
            mvkl  PRICTL0,A4
            mvkl  0x00000001,B4

            mvkh  PRICTL0,A4
            mvkh  0x00000001,B4

            stw   B4,*A4
            nop   5        
        
       ;****************************************************************
        ; 判定DMA是否结束
     ;****************************************************************
                                     
wait:
            mvkl  PRICTL0,A4
            mvkh  PRICTL0,A4       
            ldw   *A4, B2
            nop   5
            mvkl  0x0000000C,A4
            mvkh  0x0000000C,A4                        
            and   A4, B2, B2
       [ B2]  b  wait
       [!B2]  b  copy_data
            nop   5
                   

;***********************************************************
;    将.cinit段和.switch段及其他段搬运到外部数据RAM
;***********************************************************
copy_data:
copy_cinit:
   ……
  ……
  ……

相关帖子

沙发
jlass| | 2012-12-21 09:08 | 只看该作者
会不会是流水线冲突,你在wait代码段里多加几个nop试试

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

0

帖子

0

粉丝