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

📄 dma.c

📁 TI 无线传输芯片CC1100用 TMS320C5509 驱动的发送程序
💻 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 + -