https://blog.csdn.net/pxy198831/article/details/86615497
DSP TMS320C5509A之ADC MAX121中的ADC芯片即是采用DMA的方式进行控制的,
设置为一个字节打断CPU一次,进行数据的处理,程序如下:
#include <csl.h>
#include <csl_mcbsp.h>
#include <csl_dma.h>
#include "Inc\dsplib.h"
#include "Inc\Globe.h"
#include "Inc\DMA.h"
#include "Inc\fdacoefs.h"
#include "Inc\fdacoefs_audio_bp.h"
#include "Inc\fdacoefs_audio_hp.h"
#include "Inc\sin_table.h"
/* dst data table address */
#pragma DATA_SECTION(dstPing,".globe_para");
Uint16 dstPing[ADC_N];
#pragma DATA_SECTION(dstPing,".globe_para");
Uint16 dstPong[ADC_N];
#pragma DATA_SECTION(pingpong,".globe_para");
Uint16 pingpong;
#pragma DATA_SECTION(agcBuf,".globe_para");
Uint32 agcBuf[AGC_DMA_N];
#pragma DATA_SECTION(audioBuf,".globe_para");
Uint16 audioBuf[AUDIO_DMA_N];
#pragma DATA_SECTION(audio_DDS,".globe_para");
int audio_DDS[1024];
Uint16 Index;
int head=0,rear=0;
TAGC_OUT *AGC_OUT;
//#define AGC_OUT ((TAGC_OUT *)agcBuf)
/*define NCO*/
//DDS NCO
#define K 4505
unsigned int rom_result;
unsigned int sin_addr;
unsigned int cos_addr;
int sin,cos;
#pragma DATA_SECTION(I_dbuf,".globe_para");
DATA I_dbuf[53];
#pragma DATA_SECTION(Q_dbuf,".globe_para");
DATA Q_dbuf[53];
#pragma DATA_SECTION(BP_dbuf,".globe_para");
DATA BP_dbuf[300];
#pragma DATA_SECTION(BP_dbuf_out,".globe_para");
DATA BP_dbuf_out[300];
#pragma DATA_SECTION(BS_dbuf,".globe_para");
DATA BS_dbuf[400];
//Step 2: Define and initialize the DMA channel configuration structure.
interrupt void dmaCh0Isr(void);
void dmaCh0Process(void); //处理收到的数据
void dmaDmod(void);
void IniDMA_CH0(void);
void IniDMA_CH1(void);
void IniDMA_CH2(void);
void IniDDS(void);
void IniFIR(void);
void IniDMAPara(void); //初始化DMA全局参数
int AGC_audio(int AGC_in);
/**/
#pragma DATA_SECTION(tmpadc,".input");
int tmpadc[1024];
int tmp_index;
//CH0用于ADC的采样
DMA_Config DMACH0_Cfg = { /* DMA configuration structure*/
DMA_DMACSDP_RMK(
DMA_DMACSDP_DSTBEN_NOBURST, /* Destination burst
DMA_DMACSDP_DSTBEN_NOBURST
DMA_DMACSDP_DSTBEN_BURST4
*/
DMA_DMACSDP_DSTPACK_OFF, /* Destination packing
DMA_DMACSDP_DSTPACK_ON
DMA_DMACSDP_DSTPACK_OFF */
DMA_DMACSDP_DST_DARAM, /* Destination selection
DMA_DMACSDP_DST_SARAM
DMA_DMACSDP_DST_DARAM
DMA_DMACSDP_DST_EMIF
DMA_DMACSDP_DST_PERIPH */
DMA_DMACSDP_SRCBEN_NOBURST, /* Source burst
DMA_DMACSDP_SRCBEN_NOBURST
DMA_DMACSDP_SRCBEN_BURST4 */
DMA_DMACSDP_SRCPACK_OFF, /* Source packing
DMA_DMACSDP_SRCPACK_ON
DMA_DMACSDP_SRCPACK_OFF */
DMA_DMACSDP_SRC_PERIPH, /* Source selection
DMA_DMACSDP_SRC_SARAM
DMA_DMACSDP_SRC_DARAM
DMA_DMACSDP_SRC_EMIF
DMA_DMACSDP_SRC_PERIPH */
DMA_DMACSDP_DATATYPE_16BIT /* Data type
DMA_DMACSDP_DATATYPE_8BIT
DMA_DMACSDP_DATATYPE_16BIT
DMA_DMACSDP_DATATYPE_32BIT */
), /* DMACSDP */
DMA_DMACCR_RMK(
DMA_DMACCR_DSTAMODE_POSTINC, /* Destination address mode
DMA_DMACCR_DSTAMODE_CONST
DMA_DMACCR_DSTAMODE_POSTINC
DMA_DMACCR_DSTAMODE_SGLINDX
DMA_DMACCR_DSTAMODE_DBLINDX */
DMA_DMACCR_SRCAMODE_CONST, /* Source address mode 源地址不改变
DMA_DMACCR_SRCAMODE_CONST
DMA_DMACCR_SRCAMODE_POSTINC
DMA_DMACCR_SRCAMODE_SGLINDX
DMA_DMACCR_SRCAMODE_DBLINDX */
DMA_DMACCR_ENDPROG_OFF, /* End of programmation bit
DMA_DMACCR_ENDPROG_ON
DMA_DMACCR_ENDPROG_OFF */
DMA_DMACCR_REPEAT_OFF, /* Repeat condition
DMA_DMACCR_REPEAT_ON
DMA_DMACCR_REPEAT_ALWAYS
DMA_DMACCR_REPEAT_ENDPROG1
DMA_DMACCR_REPEAT_OFF */
DMA_DMACCR_AUTOINIT_OFF,/* Auto initialization bit 。。。。。。。。。。。。。
DMA_DMACCR_AUTOINIT_ON
DMA_DMACCR_AUTOINIT_OFF */
DMA_DMACCR_EN_STOP, /* Channel enable
DMA_DMACCR_EN_START
DMA_DMACCR_EN_STOP */
DMA_DMACCR_PRIO_LOW, /* Channel priority 通道优先级设置为低
DMA_DMACCR_PRIO_HI
DMA_DMACCR_PRIO_LOW */
DMA_DMACCR_FS_ELEMENT, /* Frame\Element Sync
DMA_DMACCR_FS_ENABLE
DMA_DMACCR_FS_DISABLE
DMA_DMACCR_FS_ELEMENT
DMA_DMACCR_FS_FRAME */
DMA_DMACCR_SYNC_REVT0 /* Synchronization control
DMA_DMACCR_SYNC_NONE
DMA_DMACCR_SYNC_REVT0
DMA_DMA