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

📄 blinkdevhost.asm_bak

📁 基于ADSP 的PCI 代码
💻 ASM_BAK
字号:

#include "defBF535.h"
#include "pci_ids.h"
#include "My_Header.h"

#define ASYNCB0		0x20000000

.section L2_data;
.align 4;
.var buff[1024];
.var back_buff[1024];


.SECTION program2;

.GLOBAL DMA_TO_TARGET;


.align 4;
DMA_TO_TARGET:

[--SP] = RETS; // push return address

/********* write to MBAP with the address of the host's intended destination  ****************/
P4.H = (PCI_MBAP >> 16); P4.L = (PCI_MBAP & 0xFFFF);
R0.H = L2_BASE >> 16;  R0.L = L2_BASE & 0xFFFF;  
[P4] = R0;
ssync;



	
	p5 = 0x400;
	p4.h = buff; p4.l = buff;
	r0.l = 0x0; r0.h = 0x1234;
	r1 = 0x1111;   r1.h = 0x5678;
	LSETUP(lstart, lfinish) LC0 = P5;
	lstart: r0 = r0 + r1;
	r3 = r0 + r1;
	lfinish:  [p4++] = r3; 


R0.L = START;
R1.L = END;
R0 = R1 - R0;

//r0 = 0x1000;  1k words (each word = 4 bytes)
P0.L = READ;
P0.H = READ;
P1.L = WRITE;
P1.H = WRITE;
P2.L = MDR_DND & 0xFFFF;
P2.H = (MDR_DND >> 16) & 0xFFFF;	//sDMA Memory DMA Next Descriptor Pointer Register
P3.L = DB_NDBP & 0xFFFF;
P3.H = (DB_NDBP >> 16) & 0xFFFF;	//DMA Next Descriptor Base Pointer Register
P4.L = MDW_DND & 0xFFFF;			
P4.H = (MDW_DND >> 16) & 0xFFFF;	//pDMA Memory DMA Next Descriptor Pointer Register
P5.L = MDR_DCFG & 0xFFFF;
P5.H = (MDR_DCFG >> 16) & 0xFFFF;	//sDMA Memory Config Register
I0.L = MDW_DCFG & 0xFFFF;
I0.H = (MDW_DCFG >> 16) & 0xFFFF;	//pDMA Memory Config Register
I1.L = MDR_DSAH & 0xFFFF;
I1.H = (MDR_DSAH >> 16) & 0xFFFF;	//sDMA Memory Start Address High Register
I2.L = MDR_DSAL & 0xFFFF;
I2.H = (MDR_DSAL >> 16) & 0xFFFF;	//sDMA Memory Start Address Low Register

/***********************DMA to L1 Code***********************************************************/
//R0.H = 0x9009;						//sDMA Config Word (8-bit transfers)
//R0.H = 0x8001;						//sDMA Config Word (16-bit transfers)
R0.H = 0x8009;						//sDMA Config Word (32-bit transfers)
 R1.L = START;						//sDMA Start Address Low
 R1.H = START;						//sDMA Start Address High
// r1.l = buff; r1.h = buff;

R2.L = END_DMA;						//sDMA Next Descriptor Pointer

//R2.H = 0x900B;						//pDMA Config Word (8-bit transfers)
//R2.H = 0x8003;						//pDMA Config Word (16-bit transfers)
R2.H = 0x800B;						//pDMA Config Word (32-bit transfers)
R3.L = Memory_Window & 0xFFFF;			//pDMA Start Address Low = PCI MEM WINDOW
R3.H = Memory_Window >> 16;				//pDMA Start Address High = PCI MEM WINDOW
R4.L = END_DMA;




CALL Setup_TCB;
CALL Enable_DMA;
/************************************************************************************************/


DMA_TO_TARGET.END: RETS = [SP++]; // Pop return address
RTS;  

IDLE;
SSYNC;

/********TCB Setup**********/
Setup_TCB:

W[P0+0x2] = R0;						//sDMA Count
[P0+0x4] = R1;						//sDMA Start Address
W[P0+0x8] = R2; 					//sDMA Next Descriptor Pointer

W[P1+0x2] = R0;						//pDMA Count
[P1+0x4] = R3;						//pDMA Start Address
W[P1+0x8] = R4;						//pDMA Next Descriptor Pointer

W[P0] = R0.H;						//sDMA Config Word
W[P1] = R2.H;						//pDMA Config Word
RTS;
/***************************/

/********Enable DMA*********/
Enable_DMA:
R6 = P0;
W[P2] = R6.L;						//sDMA Memory DMA Next Descriptor Pointer Register = FLASH_READ
W[P3] = R6.H;						//DMA Next Descriptor Base Pointer Register

R6 = P1;
W[P4] = R6.L;						//pDMA Memory DMA Next Descriptor Pointer Register = FLASH_WRITE

R6 = W[P5];
BITSET(R6,0);						//Enable DMA for sDMA

R7.L = W[I0];
BITSET(R7,0);						//Enable DMA for pDMA

W[P5] = R6;
.ALIGN 4;
W[I0] = R7.L;
.ALIGN 4;
DMA_WAIT:							//Wait for DMA to Complete
R6 = W[P1];
cc = bittst(R6,15);
IF cc JUMP DMA_WAIT;

RTS;
/***************************/

/*******************************Application Code to be DMAed**********************/
START:
 	
	
	P0.L = FIO_DIR & 0xFFFF;
	P0.H = FIO_DIR >> 16;

	R0 = W[P0];
	R1.L = 0xF800;
	R0 = R0 | R1;
	W[P0] = R0;					//Set PF 15 - PF 11 as Outputs

	P1.L = FIO_FLAG_S & 0xFFFF;
	P1.H = FIO_FLAG_S >> 16;
	P2.L = FIO_FLAG_C & 0xFFFF;
	P2.H = FIO_FLAG_C >> 16;

	P5.H = 0x0353;
	P5.L=0x4600;			//Count to Generate Interrupt Every 2sec for 300MHz
	
	R1.L = 0xA800;			//Affect PF15, PF13, and PF11
	R2.L = 0x5000;			//Affect PF14 and PF 12

	LIGHT:
	W[P1] = R1;			//Set PF15, PF13, and PF11
	CSYNC;
	W[P2] = R2;			//Clear PF14 and PF12
	CSYNC;

	CALL DELAY_LOOP;
 
	W[P1] = R2;			//Set PF14 and PF12
	CSYNC;
	W[P2] = R1;			//Clear PF15, PF13, and PF11
	CSYNC;

	CALL DELAY_LOOP;

	JUMP LIGHT;

	DELAY_LOOP:        
	LSETUP(L_BEGIN, L_END) LC0 = P5;
	L_BEGIN:
	L_END: NOP;    
	RTS;         
END:	NOP; 
/************************************************************************************/

.align 4;
.BYTE2 READ[5];
.align 4;
.BYTE2 WRITE[5];
.align 4;
.BYTE2 END_DMA[1] = 0x0;

⌨️ 快捷键说明

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