📄 init_dma.c
字号:
/*****************************************************************************
** **
** Project Name: LCD **
** **
******************************************************************************
(C) Copyright 2005 - Analog Devices, Inc. All rights reserved.
File Name: Init_DMA.c
Date Modified: 5/1/05 CL Rev 1.0
Software: VisualDSP++3.5
Hardware: ADSP-BF561 EZ-KIT Lite
Special Connections: None
Purpose: This file initializes the DMA channel.
******************************************************************************/
#include "main.h"
#include "DescriptorDMA_PPI.h"
#define XCNT 429
#define XMOD 4
#define YCNT 525
#define YMOD 4
volatile short config_word;
void Init_DMA_A(volatile short *descript_addr, volatile int *frame_addr){
char i;
short descript_size = DESCRIPTOR_SIZE;
short descript_size_in_bytes;
descript_size_in_bytes = descript_size * sizeof(short);
descript_size <<= 8;
config_word = descript_size|DMA_CONFIG;
*pDMA1_0_X_COUNT = XCNT; // 2 bytes for each pixel, count divided by four if 32-bit DMA transfers are done
*pDMA1_0_X_MODIFY = XMOD;
*pDMA1_0_Y_COUNT = YCNT;
*pDMA1_0_Y_MODIFY = YMOD;
*pDMA1_0_NEXT_DESC_PTR = descript_addr;
ssync();
for(i=1; i<NUM_BUFFERS; i++){
*descript_addr = (unsigned short) ((int)(descript_addr)+(int)(descript_size_in_bytes)) & 0xffff;
*(descript_addr+1) = (unsigned short) ((int) (*frame_addr) & 0xffff);
*(descript_addr+2) = (unsigned short) ((int) (*frame_addr) >> 16);
*(descript_addr+3) = config_word;
frame_addr += 1;
descript_addr = descript_addr+DESCRIPTOR_SIZE;
}
*descript_addr = (unsigned short) ((int)(descript_addr)-(int)(descript_size_in_bytes)*(int)(NUM_BUFFERS-1)) & 0xffff;
*(descript_addr+1) = (unsigned short) ((int) (*frame_addr) & 0xffff);
*(descript_addr+2) = (unsigned short) ((int) (*frame_addr) >> 16);
*(descript_addr+3) = config_word & 0xffff; //0x00ff to stop. 0xffff to loop.
config_word &= 0xfffe;
*pDMA1_0_CONFIG = config_word;
ssync();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -