📄 init_dma.c
字号:
#include "main.h"
/********************************************************************************/
/***** Init_DMA() *****/
/********************************************************************************/
//extern unsigned char Src_Array[360];
extern unsigned char Dst_Array_1[360]; //定义传输的数组
extern unsigned char Dst_Array_2[360];
unsigned short MemDMA_Src_Descriptor[7]; //定义描述符
unsigned short MemDMA_Dst_Descriptor[7]; //定义目标区间
extern bool Array1_empty;
extern bool Array2_empty;
extern int dma_count;
//--------------------------------------------------------------------------//
// Function: Init_MemDMA0 //
//--------------------------------------------------------------------------//
unsigned int testm;
void Init_MemDMA0(void)
{
// configure MemDMA0 Source Descriptor block in memory
while((Array1_empty == 0)&&(Array2_empty == 0))
{ }
MemDMA_Src_Descriptor[0] = (unsigned short)((unsigned int)MemDMA_Src_Descriptor & 0xffff); //
MemDMA_Src_Descriptor[1] = (unsigned short)((unsigned int)MemDMA_Src_Descriptor >> 16);
testm = 0x1110000 + dma_count*360;
asm("ssync;");
MemDMA_Src_Descriptor[2] = (unsigned short)(testm & 0xffff); //dma_count*360; //(unsigned short)((unsigned int)Src_Array & 0xffff); //低位地址
asm("ssync;");
MemDMA_Src_Descriptor[3] = (unsigned short)(testm >> 16); //(unsigned short)((unsigned int)Src_Array >> 16); //高位地址
MemDMA_Src_Descriptor[4] = 0x7725; //配置寄存器
MemDMA_Src_Descriptor[5] = 0xb4; //0x168; // //x_count
MemDMA_Src_Descriptor[6] = 0x0002; //x_modify
// configure MemDMA0 Destination Descriptor block in memory
MemDMA_Dst_Descriptor[0] = (unsigned short)((unsigned int)MemDMA_Dst_Descriptor & 0xffff);
MemDMA_Dst_Descriptor[1] = (unsigned short)((unsigned int)MemDMA_Dst_Descriptor >> 16);
MemDMA_Dst_Descriptor[4] = 0x7727;
MemDMA_Dst_Descriptor[5] = 0xb4; //0x168; //
MemDMA_Dst_Descriptor[6] = 0x0002;
if(dma_count%2 == 0)
{
MemDMA_Dst_Descriptor[2] = (unsigned short)((unsigned int)Dst_Array_1 & 0xffff);
MemDMA_Dst_Descriptor[3] = (unsigned short)((unsigned int)Dst_Array_1 >> 16);
Array1_empty = 0;
}
else
{
MemDMA_Dst_Descriptor[2] = (unsigned short)((unsigned int)Dst_Array_2 & 0xffff);
MemDMA_Dst_Descriptor[3] = (unsigned short)((unsigned int)Dst_Array_2 >> 16);
Array2_empty = 0;
}
// enable MemDMA0 transfers
*pMDMA1_S0_NEXT_DESC_PTR = MemDMA_Src_Descriptor;
*pMDMA1_D0_NEXT_DESC_PTR = MemDMA_Dst_Descriptor;
*pMDMA1_S0_CONFIG = 0x7725;
*pMDMA1_D0_CONFIG = 0x7727;
asm("ssync;");
}
void Disable_MDMA(void)
{
*pMDMA1_S0_CONFIG &= ~DMAEN;//~DMAEN=0xFFFFFFF1 /* Channel Disable */
asm("ssync;");
*pMDMA1_D0_CONFIG &= ~DMAEN;//~DMAEN=0xFFFFFFF1 /* Channel Disable */
asm("ssync;");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -