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 + -
显示快捷键?