📄 bf533_ez-kit_dma_config.asm
字号:
/******************************************************************************/
//
// Name: BF533 EZ-KIT video ITU-656 receive mode (8bit) for the Omnivision chip OV6630
//
/*****************************************************************************************
(C) Copyright 2003 - Analog Devices, Inc. All rights reserved.
File Name: BF533_EZ-KIT_DMA_Config.asm
Date Modified: 01/08/07 TL Rev 2.0
Software: VisualDSP++4.5, Assembler 1.1.0.2, Linker 3.8.0.2
Hardware: BF533 EZ-KIT Board (rev 1.2), Blackfin EZ-Extender (rev 1.2)
Chip: ADSP-BF533 REV 0.2
Special Connections: None
Purpose: DMA controller setup
Program Parameters:
******************************************************************************************/
#include <defBF533.h>
/*****************************************************************************************/
// Global and extern subroutines
/*****************************************************************************************/
.global BF533_EZ_KIT_DMA_Receive_Config;
.extern Field1_First_Start_Address;
.extern Field1_Second_Start_Address;
/*****************************************************************************************/
// Program Define Section
/*****************************************************************************************/
#define RAM_Length 0xFFFF
#define XCOUNT 0x06B4
#define XMOD 0x0001
#define YCOUNT 0x020D
#define YMOD 0x0001
#define DMA_Final_Transmit_Length 0x6FCC
/*****************************************************************************************/
// Program Variable Section
/*****************************************************************************************/
.section L1_data_a;
// descriptor setup
.align 4;
.byte2 DMA0_Receive_Descriptor_1[8];
.byte2 DMA0_Receive_Descriptor_2[8];
.byte2 DMA0_Receive_Descriptor_3[8];
.byte2 DMA0_Receive_Descriptor_4[8];
.byte2 DMA0_Receive_Descriptor_5[8];
.byte2 DMA0_Receive_Descriptor_6[8];
.byte2 DMA0_Receive_Descriptor_7[8];
.byte2 DMA0_Receive_Descriptor_8[8];
.byte2 DMA0_Receive_Descriptor_9[8];
.byte2 DMA0_Receive_Descriptor_10[8];
.byte2 DMA0_Receive_Descriptor_END = 0;
/*****************************************************************************************/
// Program
/*****************************************************************************************/
.section L1_code;
BF533_EZ_KIT_DMA_Receive_Config:
// Before the descriptor based DMA can run the DMA registers must be written first.
// Base pointer setup
p0.h = hi(DMA0_NEXT_DESC_PTR);
p0.l = lo(DMA0_NEXT_DESC_PTR);
// Write the first descriptors in the DMA descriptor registers
r0.h = DMA0_Receive_Descriptor_1;
r0.l = DMA0_Receive_Descriptor_1;
[p0] = r0;
// Target address of the DMA SDRAM = 0x0
r0.h = 0x0;
r0.l = 0x0;
[p0+DMA0_START_ADDR-DMA0_NEXT_DESC_PTR] = r0;
// RAM_Length 32bit trasnfers will be executed
r0 = RAM_Length(z);
w[p0+DMA0_X_COUNT-DMA0_NEXT_DESC_PTR] = r0;
// The modifier is set to 4 because of the 32bit transfers
r0 = 4(z);
w[p0+DMA0_X_MODIFY-DMA0_NEXT_DESC_PTR] = r0;
//PPI Peripheral is used
r0 = 0x0000(z);
w[p0+DMA0_PERIPHERAL_MAP-DMA0_NEXT_DESC_PTR] = r0;
//large descriptor model; 7 descriptor elements; interrupt; interrupt after completion;
// retain FIFO; linear DMA; 32 bit transfer; DMA still disabled
r0 = 0x770A (z);
w[p0+DMA0_CONFIG-DMA0_NEXT_DESC_PTR] = r0;
SSYNC;
/*******************************************************************************/
// Each descriptor includes the following order and contents:
// Next descriptor address 32bit wide
// Target address 32bit wide
// DMA config register 16bit wide
// XCount register 16bit wide
// XModifier register 16bit wide
//DMA Descriptor 1
p0.l = DMA0_Receive_Descriptor_1;
p0.h = DMA0_Receive_Descriptor_1;
R0.l = DMA0_Receive_Descriptor_2;
R0.h = DMA0_Receive_Descriptor_2;
[p0]= r0;
r0 = 0;
[p0 + 4] = r0;
r0 = 0x770B(z);
w[p0 + 8] = r0;
r0 = RAM_Length(z);
w[p0 + 10] = r0;
r0 = 4(z);
w[p0 + 12] = r0;
//DMA Descriptor 2
p0.l = DMA0_Receive_Descriptor_2;
p0.h = DMA0_Receive_Descriptor_2;
R0.l = DMA0_Receive_Descriptor_3;
R0.h = DMA0_Receive_Descriptor_3;
[p0]= r0;
r0.h = 0x0003;
r0.l = 0xfffc;
[p0 + 4] = r0;
r0 = 0x770B(z);
w[p0 + 8] = r0;
r0 = RAM_Length(z);
w[p0 + 10] = r0;
r0 = 4(z);
w[p0 + 12] = r0;
//DMA Descriptor 3
p0.l = DMA0_Receive_Descriptor_3;
p0.h = DMA0_Receive_Descriptor_3;
R0.l = DMA0_Receive_Descriptor_4;
R0.h = DMA0_Receive_Descriptor_4;
[p0]= r0;
r0.h = 0x0007;
r0.l = 0xFFF8;
[p0 + 4] = r0;
r0 = 0x770B(z);
w[p0 + 8] = r0;
r0 = RAM_Length(z);
w[p0 + 10] = r0;
r0 = 4(z);
w[p0 + 12] = r0;
//DMA Descriptor 4
p0.l = DMA0_Receive_Descriptor_4;
p0.h = DMA0_Receive_Descriptor_4;
R0.l = DMA0_Receive_Descriptor_5;
R0.h = DMA0_Receive_Descriptor_5;
[p0]= r0;
r0.h = 0x000B;
r0.l = 0xFFF4;
[p0 + 4] = r0;
r0 = 0x770B(z);
w[p0 + 8] = r0;
r0 = RAM_Length(z);
w[p0 + 10] = r0;
r0 = 4(z);
w[p0 + 12] = r0;
//DMA Descriptor 5
p0.l = DMA0_Receive_Descriptor_5;
p0.h = DMA0_Receive_Descriptor_5;
R0.l = DMA0_Receive_Descriptor_6;
R0.h = DMA0_Receive_Descriptor_6;
[p0]= r0;
r0.h = 0x000F;
r0.l = 0xFFF0;
[p0 + 4] = r0;
r0 = 0x770B(z);
w[p0 + 8] = r0;
r0 = RAM_Length(z);
w[p0 + 10] = r0;
r0 = 4(z);
w[p0 + 12] = r0;
//DMA Descriptor 6
p0.l = DMA0_Receive_Descriptor_6;
p0.h = DMA0_Receive_Descriptor_6;
R0.l = DMA0_Receive_Descriptor_7;
R0.h = DMA0_Receive_Descriptor_7;
[p0]= r0;
r0.h = 0x0013;
r0.l = 0xFFEC;
[p0 + 4] = r0;
r0 = 0x770B(z);
w[p0 + 8] = r0;
r0 = RAM_Length(z);
w[p0 + 10] = r0;
r0 = 4(z);
w[p0 + 12] = r0;
//DMA Descriptor 7
p0.l = DMA0_Receive_Descriptor_7;
p0.h = DMA0_Receive_Descriptor_7;
R0.l = DMA0_Receive_Descriptor_8;
R0.h = DMA0_Receive_Descriptor_8;
[p0]= r0;
r0.h = 0x0017;
r0.l = 0xFFE8;
[p0 + 4] = r0;
r0 = 0x770B(z);
w[p0 + 8] = r0;
r0 = RAM_Length(z);
w[p0 + 10] = r0;
r0 = 4(z);
w[p0 + 12] = r0;
//DMA Descriptor 8
p0.l = DMA0_Receive_Descriptor_8;
p0.h = DMA0_Receive_Descriptor_8;
R0.l = DMA0_Receive_Descriptor_9;
R0.h = DMA0_Receive_Descriptor_9;
[p0]= r0;
r0.h = 0x001B;
r0.l = 0xFFE4;
[p0 + 4] = r0;
r0 = 0x770B(z);
w[p0 + 8] = r0;
r0 = RAM_Length(z);
w[p0 + 10] = r0;
r0 = 4(z);
w[p0 + 12] = r0;
//DMA Descriptor 9
p0.l = DMA0_Receive_Descriptor_9;
p0.h = DMA0_Receive_Descriptor_9;
R0.l = DMA0_Receive_Descriptor_10;
R0.h = DMA0_Receive_Descriptor_10;
[p0]= r0;
r0.h = 0x001F;
r0.l = 0xFFE0;
[p0 + 4] = r0;
r0 = 0x770B(z);
w[p0 + 8] = r0;
r0 = RAM_Length(z);
w[p0 + 10] = r0;
r0 = 4(z);
w[p0 + 12] = r0;
//DMA Descriptor 10
p0.l = DMA0_Receive_Descriptor_10;
p0.h = DMA0_Receive_Descriptor_10;
R0.l = DMA0_Receive_Descriptor_END;
R0.h = DMA0_Receive_Descriptor_END;
[p0]= r0;
r0.h = 0x0023;
r0.l = 0xFFDC;
[p0 + 4] = r0;
r0 = 0x778B(z);
w[p0 + 8] = r0;
r0 = RAM_Length(z);
w[p0 + 10] = r0;
r0 = 4(z);
w[p0 + 12] = r0;
/*******************************************************************************/
//Enable DMA
p0.h = hi(DMA0_CONFIG);
p0.l = lo(DMA0_CONFIG);
r0.l = w[p0];
bitset(r0,0);
w[p0] = r0.l;
ssync;
BF533_EZ_KIT_DMA_Receive_Config.END:
RTS;
/*******************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -