⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 read.asm

📁 ADI公司Blackfin系列DSP BF533读取SDRAM数据
💻 ASM
字号:
#include "defbf533.h"

.section program;
.global _read;
_read:
link 0x4;
r1=1;


// *pMDMA_D1_START_ADDR = 0xff804000;
  
// MDMA_D1_START_ADDR = 0xffc00e84;    
p1.h=MDMA_D1_START_ADDR>>16; //右移16位,将MDMA_D1_START_ADDR的高16位0xffc0传给p1.h
p1.l=MDMA_D1_START_ADDR&0xffff;
r1.h=0xff80;
r1.l=0x4000;
[p1+0]=r1;   /*DMA要传送数据的目的开始地址(ff804000)*/

r2=[p1+0];  // 将r2清零

// *pMDMA_S1_START_ADDR = 0x00000000;
// MDMA_S1_START_ADDR  = 0xFFC0 0E44;datasheet上为0E44,而运行时显示为0ec4
p1.h=MDMA_S1_START_ADDR>>16;
p1.l=MDMA_S1_START_ADDR&0xffff;

r1=0;       /*DMA要传送数据的源开始地址(00000000)*/


[p1+0]=r1;

r2.h=0x1111;
r2.l=0x1111;
p2.h=0xff80;
p2.l=0x4008;
[p2]=r2;

r2=[p1+0];


// MDMA_D1_X_COUNT = 0xFFC0 0E90
p1.h=MDMA_D1_X_COUNT>>16;
p1.l=MDMA_D1_X_COUNT&0xffff;
r1.h=0x00;
r1=0x000a;
w[p1+0]=r1;//半字,由于MDMA_D1_X_COUNT为16位

r2=[p1+0];

p1.h=MDMA_S1_X_COUNT>>16;   /*设置要传送的字数?
这里我们以32位,即四个字节一次(可以设为为8,16,32)*/
p1.l=MDMA_S1_X_COUNT&0xffff;

r1=0x0a;
w[p1+0]=r1;

r2=[p1+0];

p1.h=MDMA_D1_X_MODIFY>>16;    /*MDMA_D1_X_MODIFY是MDMA_S1_X_COUNT每变化一次的递?
增值(字节),从最初第一字节开始算加法,所以一定要大于4(如果32的话)*/
p1.l=MDMA_D1_X_MODIFY&0XFFFF;

R1=4;
w[p1+0]=R1;

r2=[p1+0];

P1.H=MDMA_S1_X_MODIFY>>16;
P1.L=MDMA_S1_X_MODIFY&0XFFFF;

R1=4;
w[p1+0]=R1;

r2=[p1+0];
//先使DMA配置寄存器配置为零
P1.H=MDMA_S1_CONFIG>>16;
P1.L=MDMA_S1_CONFIG&0XFFFF;

R1=0;
[P1+0]=R1;
SSYNC;

P1.H=MDMA_S1_CONFIG>>16;         /*配置寄存器*/
P1.L=MDMA_S1_CONFIG&0XFFFF;

R1=9;
[P1+0]=R1;
SSYNC;
// 先使DMA目的配置寄存器配置为零
P1.H=MDMA_D1_CONFIG>>16;
P1.L=MDMA_D1_CONFIG&0XFFFF;
R1=0;
[P1+0]=R1;
SSYNC;

P1.H=MDMA_D1_CONFIG>>16;
P1.L=MDMA_D1_CONFIG&0XFFFF;
R1=0X8B;                            /*不是0x0B,8是指中断使能,如果是0x0B,中断不置位*/
[P1+0]=R1;
SSYNC;


DMA_Wait_Loop:
P1.H=MDMA_D1_IRQ_STATUS>>16; 
P1.L=MDMA_D1_IRQ_STATUS&0XFFFF;  
R0=[P1+0];
cc = bittst(R0,0);        /*查看中断寄存器,第零位是传输完毕中断*/
if !cc jump DMA_Wait_Loop;

unlink;
rts;
_read.end:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -