?? dma.asm
字號:
/*
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@//
File Name: DMA.asm
Version: 1.0
Purpose: To Read from flash or Write data to it by DMA method
Software: VisualDSP++3.5
Hardware: ADSP-BF533 EZ-KIT Board
Programmer: EricRao
Orgnization: Supcon Company
Date: 2004.6.8-2004.6.15
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@//
*/
#include "defBF533.h"
//Used to set up pointer registers and offset from them
#define SYSMMR_BASE 0xFFC00000
//Macros
#define OFFSET_( x ) ((x) & 0x0000FFFF)
#define UPPER_( x ) (((x) >> 16) & 0x0000FFFF)
#define LOWER_( x ) ((x) & 0x0000FFFF)
//Globals
.global _MEM_DMA_Setup;
.global _MEM_DMA;
.section program;
//------------------------------------------------------------------------------//
// Function: MEM_DMA
// //
// Parameters: //
// //
// Purpose: To read data from flash by DMA method //
// Returns: None //
//------------------------------------------------------------------------------//
_MEM_DMA:
[--SP]=RETS;
// Choose DMA stream 0;
// Parameters for MEM_DMA function:
// R0 = source address
// R1 = destination address
// R2 = count
// R3 = source config
// R4 = dest config
// modify registers have already been set up
// changes R0, but after the call to this routine, R0 is usually
// set to the value DMA CURRENT register
// Source Base Address
[P1+OFFSET_(MDMA_S0_START_ADDR)] = R0;
// Source Count
W[P1+OFFSET_(MDMA_S0_X_COUNT)] = R2;
// Destination Base Address
[P1+OFFSET_(MDMA_D0_START_ADDR)] = R1;
// Destination Count
W[P1+OFFSET_(MDMA_D0_X_COUNT)] = R2;
// Source DMAConfig
W[P1+OFFSET_(MDMA_S0_CONFIG)] = R3;
// Destination DMAConfig
W[P1+OFFSET_(MDMA_D0_CONFIG)] = R4;
// Wait for DMA to Complete
IDLE;
R0 = 0x1;
// Write 1 to clear DMA interrupt
W[P1+OFFSET_(MDMA_D0_IRQ_STATUS)] = R0;
RETS=[SP++];
_MEM_DMA.END:
nop;
RTS;
//------------------------------------------------------------------------------//
// Function: MEM_DMA
// //
// Parameters: //
// //
// Purpose: To read data from flash by DMA method //
// Returns: None //
//------------------------------------------------------------------------------//
_MEM_DMA_Setup:
[--SP]=RETS;
// P1 Points to the beginning of SYSTEM MMR Space
P1.H = UPPER_(SYSMMR_BASE);
P1.L = LOWER_(SYSMMR_BASE);
// Enable Wake-Up function for MDMA destination
[P1+OFFSET_(SIC_IWR)]=R0;
// Set DMA for 16-bit flash read with modify = 2 bytes
W[P1+OFFSET_(MDMA_S0_X_MODIFY)]=R1;
// Destination Modify = 2 for 16 bit transfers
W[P1+OFFSET_(MDMA_D0_X_MODIFY)]=R1;
RETS=[SP++];
_MEM_DMA_Setup.END:
nop;
RTS;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -