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

📄 dma.asm

📁 flash驱动和简单管理程序
💻 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 + -