📄 read.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 + -