csl_dmaaux.h

来自「dsp在音频处理中的运用」· C头文件 代码 · 共 135 行

H
135
字号
#ifndef _CSL_DMAAUX_H
#define _CSL_DMAAUX_H

#include <cslr_dma.h>
#include <csl_dma.h>

#ifdef __cplusplus
extern "C" {
#endif

static inline
void
	CSL_dmaStart (
		CSL_DmaHandle   hDma
)
{
    /* Local copy of CSDP Register  */
	volatile Uint32 _dma_csr;

    /* Read DMA status register to clear it so new interrupts will be seen */
	/* This would give a compiler warning... Should not be removed */
	_dma_csr = hDma->regs->CSR;

    /* set en bit of CCR */
	CSL_FINS(hDma->regs->CCR, DMA_CCR_EN, 1);
}

static inline
void
	CSL_dmaStop (
		CSL_DmaHandle   hDma
)
{
    /* reset en bit of CCR */
	CSL_FINS(hDma->regs->CCR, DMA_CCR_EN, 0);
}

static inline
void
	CSL_dmaChangeSrcAddr (
		CSL_DmaHandle   hDma,
		Uint32          srcAddr
)
{
    CSL_FINS(hDma->regs->CSSAL, DMA_CSSAL_CSSAL, (srcAddr << 1) & 0xffff);
	/*	Optimized version follows.
	CSL_FINS(hDma->regs->CSSAU, DMA_CSSAU_CSSAU, (srcAddr << 1) >> 16);
	*/
	CSL_FINS(hDma->regs->CSSAU, DMA_CSSAU_CSSAU, (srcAddr >> 15) );
}

static inline
void
	CSL_dmaChangeDestAddr (
		CSL_DmaHandle   hDma,
		Uint32          dstAddr
)
{
	CSL_FINS(hDma->regs->CDSAL, DMA_CDSAL_CDSAL, (dstAddr << 1) & 0xffff);
	/* Optimized version follows.
	CSL_FINS(hDma->regs->CDSAU, DMA_CDSAU_CDSAU, (dstAddr << 1) >> 16);
	*/
	CSL_FINS(hDma->regs->CDSAU, DMA_CDSAU_CDSAU, (dstAddr >> 15) );
}

static inline
void
	CSL_dmaChangeElementCount (
		CSL_DmaHandle   hDma,
		Uint16          elementCount
)
{
	CSL_FINS(hDma->regs->CEN, DMA_CEN_CEN, elementCount);
}

static inline
void
	CSL_dmaChangeFrameCount (
		CSL_DmaHandle   hDma,
		Uint16          frameCount
)
{
    CSL_FINS(hDma->regs->CFN, DMA_CFN_CFN, frameCount);
}

static inline
void
	CSL_dmaClearChannelStatus (
		CSL_DmaHandle   hDma
)
{
    volatile Uint16 temp = hDma->regs->CSR;
}

static inline
void
	CSL_dmaNotifyEndProg(
		CSL_DmaHandle   hDma
)
{
    /* Set ENDPROG to indicate the end of register programming */
    CSL_FINS(hDma->regs->CCR, DMA_CCR_ENDPROG, 1);
}

static inline
void
	CSL_dmaGetStatus(
		CSL_DmaHandle   hDma,
		CSL_DmaStatus * pStatus
)
{
	register Uint32 _dma_csr;   /* Local copy of CSR Register  */

	/* Reading only once is MUST as reading this register clears all the bits in it. */
	_dma_csr = hDma->regs->CSR ;

  	pStatus->timeout	= (Bool)CSL_FEXT(_dma_csr, DMA_CSR_TIMEOUT);
    pStatus->eventDrop	= (Bool)CSL_FEXT(_dma_csr, DMA_CSR_DROP);
    pStatus->halfframe	= (Bool)CSL_FEXT(_dma_csr, DMA_CSR_FIRSTHALF);
    pStatus->frame		= (Bool)CSL_FEXT(_dma_csr, DMA_CSR_FRAME);
    pStatus->lastframe	= (Bool)CSL_FEXT(_dma_csr, DMA_CSR_LAST);
    pStatus->block		= (Bool)CSL_FEXT(_dma_csr, DMA_CSR_BLOCK);
    pStatus->sync		= (Bool)CSL_FEXT(_dma_csr, DMA_CSR_SYNC);

  	pStatus->srcAddrCntr = hDma->regs->CSAC ;
   	pStatus->dstAddrCntr = hDma->regs->CDAC ;
}

#ifdef __cplusplus
}
#endif


#endif

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?