📄 dma.c
字号:
#include <csl_dma.h>
#define N 65536//64896
Uint16 srcAddrLo,srcAddrHi;
Uint16 dstAddrLo,dstAddrHi;
#pragma DATA_SECTION(dst, "dstMem")
Uint16 dst[N];
#pragma DATA_SECTION(src, "srcMem")
Uint16 src[N];
/* Create DMA Receive Side Configuration */
/*this transmission is from FIFO to SDRAM*/
DMA_Config Config_DMAfifo = {
DMA_DMACSDP_RMK(
DMA_DMACSDP_DSTBEN_NOBURST,
DMA_DMACSDP_DSTPACK_OFF,
DMA_DMACSDP_DST_EMIF,
DMA_DMACSDP_SRCBEN_NOBURST,
DMA_DMACSDP_SRCPACK_OFF,
DMA_DMACSDP_SRC_EMIF,
DMA_DMACSDP_DATATYPE_16BIT
),
DMA_DMACCR_RMK(
DMA_DMACCR_DSTAMODE_POSTINC,
DMA_DMACCR_SRCAMODE_CONST,
DMA_DMACCR_ENDPROG_ON,
DMA_DMACCR_REPEAT_OFF,
DMA_DMACCR_AUTOINIT_OFF,
DMA_DMACCR_EN_STOP,
DMA_DMACCR_PRIO_HI,
DMA_DMACCR_FS_DISABLE,
DMA_DMACCR_SYNC_NONE
),
DMA_DMACICR_RMK(
DMA_DMACICR_BLOCKIE_ON,
DMA_DMACICR_LASTIE_OFF,
DMA_DMACICR_FRAMEIE_OFF,
DMA_DMACICR_FIRSTHALFIE_OFF,
DMA_DMACICR_DROPIE_OFF,
DMA_DMACICR_TIMEOUTIE_OFF
),
(DMA_AdrPtr)&src, /* DMACSSAL */
0, /* DMACSSAU */
(DMA_AdrPtr)&dst, /* DMACDSAL */
0, /* DMACDSAU */
256, /* 312 elements per frame */
256, /* 208 frame per block */
0, /* DMACFI */
0 /* DMACEI */
};
//syncs MCBSP(SPI mode) transmit with DMA channel 4;
/*DMA_Config Config_DMAxmt = {
DMA_DMACSDP_RMK(
DMA_DMACSDP_DSTBEN_NOBURST, DMA_DMACSDP_DSTPACK_OFF, DMA_DMACSDP_DST_PERIPH, DMA_DMACSDP_SRCBEN_NOBURST, DMA_DMACSDP_SRCPACK_OFF,
DMA_DMACSDP_SRC_EMIF, DMA_DMACSDP_DATATYPE_8BIT
), */ /* DMACSDP */
/* DMA_DMACCR_RMK(
DMA_DMACCR_DSTAMODE_CONST,
DMA_DMACCR_SRCAMODE_POSTINC,
DMA_DMACCR_ENDPROG_ON,
DMA_DMACCR_REPEAT_OFF,
DMA_DMACCR_AUTOINIT_OFF,
DMA_DMACCR_EN_STOP,
DMA_DMACCR_PRIO_LOW,
DMA_DMACCR_FS_DISABLE,
DMA_DMACCR_SYNC_XEVT1
), */ /* DMACCR */
/* DMA_DMACICR_RMK(
DMA_DMACICR_BLOCKIE_OFF,
DMA_DMACICR_LASTIE_OFF,
DMA_DMACICR_FRAMEIE_ON,
DMA_DMACICR_FIRSTHALFIE_OFF,
DMA_DMACICR_DROPIE_OFF,
DMA_DMACICR_TIMEOUTIE_OFF
), */ /* DMACICR */
// 0X4000;//(DMA_AdrPtr)&xmt[1], /* DMACSSAL */ // 0, /* DMACSSAU */
//// (DMA_AdrPtr)(MCBSP_ADDR(DXR11)), /* DMACDSAL */
// 0, /* DMACDSAU */
// N, /* DMACEN */
// 1, /* DMACFN */
// 0, /* DMACFI */
// 0 /* DMACEI */
//};
void initDMA(void);
DMA_Handle hDMAfifo,hDMAxmt;
void initDMA(void)
{
/* Open DMA Channel 0 */
hDMAfifo = DMA_open(DMA_CHA0, 0);
// hDMAxmt = DMA_open(DMA_CHA4, 0);
/* By default, the TMS320C55xx compiler assigns all data symbols word */
/* addresses. The DMA however, expects all addresses to be byte */
/* addresses. Therefore, we must shift the address by 2 in order to */
/* change the word address to a byte address forthe DMA transfer. */
srcAddrLo = (Uint16)(((Uint32)(&src)) << 1) & 0xFFFFu;
srcAddrHi = (Uint16)(((Uint32)(&src)) >> 15) & 0xFFFFu;
dstAddrLo = (Uint16)(((Uint32)(&dst)) << 1) & 0xFFFFu;
dstAddrHi = (Uint16)(((Uint32)(&dst)) >> 15) & 0xFFFFu;
Config_DMAfifo.dmacssal = (DMA_AdrPtr)srcAddrLo;
Config_DMAfifo.dmacssau = srcAddrHi;
Config_DMAfifo.dmacdsal = (DMA_AdrPtr)dstAddrLo;
Config_DMAfifo.dmacdsau = dstAddrHi;
// srcAddrLo = (Uint16)(((Uint32)(0x40000)) << 1) & 0xFFFFu;
// srcAddrHi = (Uint16)(((Uint32)(0x40000)) >> 15) & 0xFFFFu;
// dstAddrLo = (Uint16)(((Uint32)(MCBSP_ADDR(DXR11))) << 1) & 0xFFFFu;
// dstAddrHi = (Uint16)(((Uint32)(MCBSP_ADDR(DXR11))) >> 15) & 0xFFFFu;
// Config_DMAxmt.dmacssal = (DMA_AdrPtr)srcAddrLo;
// Config_DMAxmt.dmacssau = srcAddrHi;
// Config_DMAxmt.dmacdsal = (DMA_AdrPtr)dstAddrLo;
// Config_DMAxmt.dmacdsau = dstAddrHi;
/* Write configuration structure values to DMA control registers */
DMA_config(hDMAfifo, &Config_DMAfifo);
// DMA_config(hDMAfifo, &Config_DMAxmt);
/* Enable DMA channel to begin transfer */
/* DMA_start(hDMAfifo);
while (!DMA_FGETH(hDMAfifo,DMACSR,BLOCK)) {
;
}
DMA_close(hDMAfifo); */
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -