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

📄 uart_dma.asm

📁 adi bf533视频编码程序
💻 ASM
字号:
#include "defBF533.h"

.GLOBAL _UART_DMA_INI;
.GLOBAL _UART_DMA_EN;

.global _uart_dma_stop;


.section L1_data_b;

.align 4;
.global uart_dma_queue;
uart_dma_queue:
.byte4 _uart_dma_queue[4*8];
uart_dma_queue.end:

.extern _tx_buffer;

.section L1_code;

//void UART_DMA_INT(void);
_UART_DMA_INI:

	[--sp] = (r7:4, p5:3);
	[--sp] = rets;

	p0.h = hi(DMA7_NEXT_DESC_PTR);
	p0.l = lo(DMA7_NEXT_DESC_PTR);
	
	r0 = 3(z);
	w[p0+DMA7_IRQ_STATUS-DMA7_NEXT_DESC_PTR] = r0;		//clear DMA_DONE and DMA_ERR bits

	r0.l = _uart_dma_queue;
	r0.h = _uart_dma_queue;
	i0 = r0;	

//	changed on 2007-07-18	
//	r1.l = _tx_buffer;	//next descriptor address;
//	r1.h = _tx_buffer;
	p2.l = _tx_buffer;
	p2.h = _tx_buffer;
	r1 = [p2];
	
	r2.l = 0;
	r2.h = 4;		//buffer address modifier
	
	r3.l = 0x6811;		//config
	
	r4.l = 0;		//xcont,64k;
	r4.h = 1;		//xmod
	r5.l = 4;		//ycont, 4;
	r5.h = 1;		//ymod
	
	p1 = 7(z);
	[--sp] = r0;
	r0 += 16;
	lsetup(set_dma_array_s, set_dma_array_e) lc0 = p1;
set_dma_array_s:
		w[i0++] = r0.l;
		w[i0++] = r1.l;
		w[i0++] = r1.h;
		w[i0++] = r3.l;
		w[i0++] = r4.l;
		w[i0++] = r4.h;
		w[i0++] = r5.l;
		w[i0++] = r5.h;
		r0 += 16;
set_dma_array_e:
		r1 = r1 + r2;
	
	r0 = [sp++];				//dma chain;
	w[i0++] = r0.l;
	w[i0++] = r1.l;
	w[i0++] = r1.h;
	w[i0++] = r3.l;
	w[i0++] = r4.l;
	w[i0++] = r4.h;
	w[i0++] = r5.l;
	w[i0++] = r5.h;
	
	
	[p0+DMA7_NEXT_DESC_PTR-	DMA7_NEXT_DESC_PTR] = r0;
	ssync;
	
	w[p0+DMA7_CONFIG-DMA7_NEXT_DESC_PTR] = r3;

	SSYNC;
	
	rets = [sp++];
	(r7:4, p5:3) = [sp++];
	
_UART_DMA_INI.END:
RTS;

//void uart_dma_stop(int block_index);
_uart_dma_stop:

	[--sp] = (r7:4, p5:3);
	[--sp] = rets;

	r1.l = _uart_dma_queue;
	r1.h = _uart_dma_queue;
	r0 <<= 4;
	r0 = r0 + r1;
		
	r0 += 6; 			//config offset
	p0 = r0;
	r0.l = 0x0011;
	w[p0] = r0;
	
	
	rets = [sp++];
	(r7:4, p5:3) = [sp++];

_uart_dma_stop.end:
rts;


_UART_DMA_EN:
	
	p0.h = hi(DMA7_NEXT_DESC_PTR);
	p0.l = lo(DMA7_NEXT_DESC_PTR);
	
	r1 = 0x1081;
	w[p0+DMA7_CONFIG-DMA7_NEXT_DESC_PTR] = r1;
	SSYNC;
	
_UART_DMA_EN.END:
RTS;


.global _uart_en;
_uart_en:
	
	p0.l = lo(UART_GCTL);
	p0.h = hi(UART_GCTL);
	
	r0 = w[p0+UART_LCR-UART_GCTL](z);
	r1.l = 0x7fff;
	r1 = r0&r1;
	w[p0+UART_LCR-UART_GCTL] = r1;
	ssync;
	
	r1 = 2(z);
	w[p0+UART_IER - UART_GCTL] = r1;
	
	ssync;	
	
_uart_en.end:
rts;

⌨️ 快捷键说明

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