![]() |
![]() |
Functions | |
| CSL_Status | DMA_init (void) |
| CSL_DMA_Handle | DMA_open (CSL_DMAChanNum chanNum, CSL_DMA_ChannelObj *pDmaChanObj, CSL_Status *status) |
| CSL_Status | DMA_close (CSL_DMA_Handle hDMA) |
| CSL_Status | DMA_config (CSL_DMA_Handle hDMA, CSL_DMA_Config *pConfig) |
| CSL_Status | DMA_getConfig (CSL_DMA_Handle hDMA, CSL_DMA_Config *pConfig) |
| CSL_Status | DMA_start (CSL_DMA_Handle hDMA) |
| CSL_Status | DMA_stop (CSL_DMA_Handle hDMA) |
| CSL_Status | DMA_reset (CSL_DMA_Handle hDMA) |
| CSL_Status | DMA_swapWords (Uint16 *dataBuffer, Uint32 dataLength) |
| Bool | DMA_getLastTransferType (CSL_DMA_Handle hDMA, CSL_Status *status) |
| CSL_Status DMA_close | ( | CSL_DMA_Handle | hDMA | ) |
===========================================================================
DMA_close
Description
This function closes the specified handle to DMA.
Arguments
hDMA Handle to the DMA
Return Value CSL_Status
Pre Condition
DMA_open() must be called before this function call.
Post Condition
After calling this function no other API should be call for the same dma Handle.
Modifies
1. The DMA register will assigned to reset values for this handle.
2. CSL_DMA_ChannelObj object structure
Example
CSL_status status;
CSL_DMAChanNum chanNum;
CSL_DMA_ChannelObj pDmaChanObj
CSL_DMA_Handle hDMA;
...
chanNum = CSL_DMA_CHAN0;
hDMA = DMA_open(chanNum, &pDmaChanObj, &status);
status = DMA_Close(hDMA);
===========================================================================
References CSL_DMA_CHANNEL_FREE, CSL_DMA_ChannelObj::dmaRegs, and CSL_DMA_ChannelObj::isChanFree.
Referenced by MMC_close().
| CSL_Status DMA_config | ( | CSL_DMA_Handle | hDMA, |
| CSL_DMA_Config * | pConfig | ||
| ) |
===========================================================================
DMA_config
Description
It configures the DMA Controller registers of particular handle as per the values passed in the DMA config structure.
Arguments
hDMA Handle to the DMA.
Config Pointer to DMA Config structure.
Return Value CSL_Status
Pre Condition
DMA_open() must be called successfully before this function call.
Post Condition
None
Modifies
1. DMA registers will be updated as per config parameter
2. CSL_DMA_ChannelObj Object will be updated to store some info as passed config parameter.
Example
#define CSL_DMA_BUFFER_SIZE 1024
CSL_DMA_Handle hDMA;
CSL_DMA_Config pConfig;
CSL_status status;
CSL_DMAChanNum chanNum;
CSL_DMA_ChannelObj pDmaChanObj
Uint16 dmaSRCBuff[CSL_DMA_BUFFER_SIZE];
Uint16 dmaDESTBuff[CSL_DMA_BUFFER_SIZE];
...
chanNum = CSL_DMA_CHAN0;
hDMA = DMA_open(chanNum, &pDmaChanObj, &status);
#if (defined(CHIP_C5505_C5515) || defined(CHIP_C5504_C5514))
pConfig.pingPongMode = CSL_DMA_PING_PONG_DISABLE;
#endif
pConfig.autoMode = CSL_DMA_AUTORELOAD_DISABLE;
pConfig.burstLen = CSL_DMA_TXBURST_8WORD;
pConfig.trigger = CSL_DMA_SOFTWARE_TRIGGER;
pConfig.dmaEvt = CSL_DMA_EVT_NONE;
pConfig.dmaInt = CSL_DMA_INTERRUPT_DISABLE;
pConfig.chanDir = CSL_DMA_READ;
pConfig.trfType = CSL_DMA_TRANSFER_MEMORY;
pConfig.dataLen = CSL_DMA_BUFFER_SIZE * 2;
pConfig.srcAddr = (Uint32)dmaSRCBuff;
pConfig.destAddr = (Uint32)dmaDESTBuff;
status = DMA_Config(hDMA, &pConfig);
...
===========================================================================
References CSL_DMA_Config::autoMode, CSL_DMA_Config::burstLen, CSL_DMA_Config::chanDir, CSL_DMA_ChannelObj::chanDir, CSL_DMA_ChannelObj::chanNum, CSL_DMA_ADDR_MODE_FIXED, CSL_DMA_ADDR_MODE_INCREMENT, CSL_DMA_ADDR_SHIFT, CSL_DMA_CHAN0, CSL_DMA_CHAN1, CSL_DMA_CHAN10, CSL_DMA_CHAN11, CSL_DMA_CHAN12, CSL_DMA_CHAN13, CSL_DMA_CHAN14, CSL_DMA_CHAN15, CSL_DMA_CHAN2, CSL_DMA_CHAN3, CSL_DMA_CHAN4, CSL_DMA_CHAN5, CSL_DMA_CHAN6, CSL_DMA_CHAN7, CSL_DMA_CHAN8, CSL_DMA_CHAN9, CSL_DMA_DARAM_ADDR_OFFSET, CSL_DMA_DARAM_END_ADDR, CSL_DMA_DARAM_START_ADDR, CSL_DMA_DMATCR2_DMASTART_SYNC_MASK, CSL_DMA_PING_PONG_ENABLE, CSL_DMA_READ, CSL_DMA_SARAM_ADDR_OFFSET, CSL_DMA_SARAM_END_ADDR, CSL_DMA_SARAM_START_ADDR, CSL_DMA_TRANSFER_MEMORY, CSL_DMA_UINT16_MASK, CSL_DMA_UINT16_NUMBER_BITS, CSL_DMA_WRITE, CSL_DMA_Config::dataLen, CSL_DMA_Config::destAddr, CSL_DMA_Config::dmaEvt, CSL_DMA_Config::dmaInt, CSL_DMA_ChannelObj::dmaInt, CSL_DMA_ChannelObj::dmaRegs, CSL_DMA_ChannelObj::pingPongEnabled, CSL_DMA_Config::pingPongMode, CSL_DMA_Config::srcAddr, CSL_DMA_Config::trfType, CSL_DMA_ChannelObj::trfType, CSL_DMA_Config::trigger, and CSL_DMA_ChannelObj::trigger.
Referenced by MMC_read(), and MMC_write().
| CSL_Status DMA_getConfig | ( | CSL_DMA_Handle | hDMA, |
| CSL_DMA_Config * | pConfig | ||
| ) |
===========================================================================
DMA_getConfig
Description
Gets the config information for the different operations of DMA.
Arguments
hDMA Handle to the DMA
Config Pointer to DMA Config structure
Return Value CSL_Status
Pre Condition
DMA_open() must be called successfully before this function call.
Post Condition
None
Modifies
1. The Config pointer will be updated to store the DMA Register information as per DMA Handle passed.
Example
CSL_DMA_Handle hDMA;
CSL_DMA_Config pConfig;
CSL_status status;
CSL_DMAChanNum chanNum;
CSL_DMA_ChannelObj pDmaChanObj
chanNum = CSL_DMA_CHAN0;
hDMA = DMA_open(chanNum, &pDmaChanObj, &status);
status = DMA_getConfig(hDMA, &pConfig);
===========================================================================
References CSL_DMA_Config::autoMode, CSL_DMA_Config::burstLen, CSL_DMA_ChannelObj::chanDir, CSL_DMA_Config::chanDir, CSL_DMA_ChannelObj::chanNum, CSL_DMA_ADDR_SHIFT, CSL_DMA_CHAN0, CSL_DMA_CHAN1, CSL_DMA_CHAN10, CSL_DMA_CHAN11, CSL_DMA_CHAN12, CSL_DMA_CHAN13, CSL_DMA_CHAN14, CSL_DMA_CHAN15, CSL_DMA_CHAN2, CSL_DMA_CHAN3, CSL_DMA_CHAN4, CSL_DMA_CHAN5, CSL_DMA_CHAN6, CSL_DMA_CHAN7, CSL_DMA_CHAN8, CSL_DMA_CHAN9, CSL_DMA_DARAM_ADDR_OFFSET, CSL_DMA_READ, CSL_DMA_SARAM_ADDR_OFFSET, CSL_DMA_TRANSFER_MEMORY, CSL_DMA_UINT16_NUMBER_BITS, CSL_DMA_WRITE, CSL_DMA_Config::dataLen, CSL_DMA_Config::destAddr, CSL_DMA_Config::dmaEvt, CSL_DMA_Config::dmaInt, CSL_DMA_ChannelObj::dmaRegs, CSL_DMA_Config::pingPongMode, CSL_DMA_Config::srcAddr, CSL_DMA_ChannelObj::trfType, CSL_DMA_Config::trfType, CSL_DMA_ChannelObj::trigger, and CSL_DMA_Config::trigger.
| Bool DMA_getLastTransferType | ( | CSL_DMA_Handle | hDMA, |
| CSL_Status * | status | ||
| ) |
===========================================================================
DMA_getLastTransferType
Description
This function returns type of the last trasfer during Ping-Pong buffer mode. This function will return a 1 or 0. In ping-pong buffer mode with reload enabled, DMA data transfer keeps switching between Ping and Pong data buffers. This function is used to know which buffer is transferred by DMA in the last transfer. 0 - Ping Set Transfer completed 1 - Pong Set Transfer completed
Arguments
hDMA Handle to the DMA
status Status variable to update function Success/Failure status
Return Value CSL_Status
Pre Condition
DMA_start() must be called successfully before this function call
Post Condition
Returns last transfer status
Modifies
none
Example
CSL_DMA_Handle hDMA;
CSL_Status status;
Bool txStatus;
status = DMA_start(hDMA);
status = DMA_getLastTransferType(hDMA, &status);
===========================================================================
===========================================================================
DMA_getLastTransferStatus
Description
This function returns status of the last trasfer during Ping-Pong buffer mode. This function will return a 1 or 0. In ping-pong buffer mode with reload enabled, DMA data transfer keeps switching between Ping and Pong data buffers. This function is used to know which buffer is transferred by DMA in the last transfer. 0 - Ping Set Transfer completed 1 - Pong Set Transfer completed
Arguments
hDMA Handle to the DMA
status Status variable to update function Success/Failure status
Return Value CSL_Status
Pre Condition
DMA_start() must be called successfully before this function call
Post Condition
Returns last transfer status
Modifies
none
Example
CSL_DMA_Handle hDMA;
CSL_Status status;
Bool txStatus;
status = DMA_start(hDMA);
status = DMA_getLastTransferStatus(hDMA, &status);
===========================================================================
References CSL_DMA_ChannelObj::chanNum, CSL_DMA_CHAN0, CSL_DMA_CHAN1, CSL_DMA_CHAN2, CSL_DMA_CHAN3, and CSL_DMA_ChannelObj::dmaRegs.
| CSL_Status DMA_init | ( | void | ) |
===========================================================================
DMA_init
Description
This is the initialization function for the DMA CSL. The function must be called before calling any other API from this CSL. This function is for enabling the clock to the DMA Controller. Currently, the function just return status CSL_SOK. This function should be called only once during system initialization time. This function gates the clock for all the four DMA modules. Application programs may disable the clocks for DMA modules which are are not in use.
Arguments
Return Value CSL_Status
Pre Condition
This should be call first before calling any other DMA Function.
Post Condition
None
Modifies
None
Example
CSL_status status;
status = DMA_init();
===========================================================================
References CSL_DMA_RESET_CLOCK_CYCLE.
| CSL_DMA_Handle DMA_open | ( | CSL_DMAChanNum | chanNum, |
| CSL_DMA_ChannelObj * | pDmaChanObj, | ||
| CSL_Status * | status | ||
| ) |
===========================================================================
DMA_open
Description
This function returns the handle to the DMA instance. This handle is passed to all other CSL APIs.
Arguments
chanNum channel number to use.
pDmaChanObj pointer to dma channel object.
status Status of the function call
Return Value CSL_DMA_Handle
Valid DMA handle will be returned if status value is equal to CSL_SOK.
Pre Condition
DMA_init() API should be called before DMA_open().
Post Condition
1. The status is updated in the status variable. If status returned is
Modifies
1. The status variable
2. CSL_DMA_ChannelObj object structure
Example
CSL_status status;
CSL_DMAChanNum chanNum;
CSL_DMA_ChannelObj pDmaChanObj
CSL_DMA_Handle hDMA;
...
chanNum = CSL_DMA_CHAN0;
hDMA = DMA_open(chanNum, &pDmaChanObj, &status);
...
===========================================================================
References CSL_DMA_ChannelObj::chanDir, CSL_DMA_ChannelObj::chanNum, CSL_DMA_CHAN0, CSL_DMA_CHAN1, CSL_DMA_CHAN10, CSL_DMA_CHAN11, CSL_DMA_CHAN12, CSL_DMA_CHAN13, CSL_DMA_CHAN14, CSL_DMA_CHAN15, CSL_DMA_CHAN2, CSL_DMA_CHAN3, CSL_DMA_CHAN4, CSL_DMA_CHAN5, CSL_DMA_CHAN6, CSL_DMA_CHAN7, CSL_DMA_CHAN8, CSL_DMA_CHAN9, CSL_DMA_CHAN_INV, CSL_DMA_CHANNEL_BUSY, CSL_DMA_ENGINE0, CSL_DMA_ENGINE1, CSL_DMA_ENGINE2, CSL_DMA_ENGINE3, CSL_DMA_READ, CSL_DMA_SOFTWARE_TRIGGER, CSL_DMA_TRANSFER_MEMORY, CSL_DMA_ChannelObj::dmaInstNum, CSL_DMA_ChannelObj::dmaRegs, CSL_DMA_ChannelObj::isChanFree, CSL_DMA_ChannelObj::trfType, and CSL_DMA_ChannelObj::trigger.
| CSL_Status DMA_reset | ( | CSL_DMA_Handle | hDMA | ) |
===========================================================================
DMA_reset
Description
Function reset all the register as per passed handle.
Arguments
hDMA Handle to the DMA
Return Value CSL_Status
Pre Condition
1. DMA_open() must be called successfully before this function call
Post Condition
None
Modifies
DMA Register will be populated with the reset values.
Example
CSL_DMA_Handle hDMA;
CSL_status status;
CSL_DMAChanNum chanNum;
CSL_DMA_ChannelObj pDmaChanObj
chanNum = CSL_DMA_CHAN0;
hDMA = DMA_open(chanNum, &pDmaChanObj, &status);
status = DMA_reset(hDMA);
===========================================================================
References CSL_DMA_ChannelObj::chanNum, CSL_DMA_CHAN0, CSL_DMA_CHAN1, CSL_DMA_CHAN10, CSL_DMA_CHAN11, CSL_DMA_CHAN12, CSL_DMA_CHAN13, CSL_DMA_CHAN14, CSL_DMA_CHAN15, CSL_DMA_CHAN2, CSL_DMA_CHAN3, CSL_DMA_CHAN4, CSL_DMA_CHAN5, CSL_DMA_CHAN6, CSL_DMA_CHAN7, CSL_DMA_CHAN8, CSL_DMA_CHAN9, and CSL_DMA_ChannelObj::dmaRegs.
| CSL_Status DMA_start | ( | CSL_DMA_Handle | hDMA | ) |
===========================================================================
DMA_start
Description
This function trigger to DMA for data transfer.
Arguments
hDMA Handle to the DMA
Return Value CSL_Status
Pre Condition
DMA_config API must be called before calling this API for same handle.
Post Condition
None
Modifies
Destination buffer will be modified after this call.
Example
#define CSL_DMA_BUFFER_SIZE 1024
CSL_DMA_Handle hDMA;
CSL_DMA_Config pConfig;
CSL_status status;
CSL_DMAChanNum chanNum;
CSL_DMA_ChannelObj pDmaChanObj
Uint16 dmaSRCBuff[CSL_DMA_BUFFER_SIZE];
Uint16 dmaDESTBuff[CSL_DMA_BUFFER_SIZE];
chanNum = CSL_DMA_CHAN0;
hDMA = DMA_open(chanNum, &pDmaChanObj, &status);
#if (defined(CHIP_C5505_C5515) || defined(CHIP_C5504_C5514))
pConfig.pingPongMode = CSL_DMA_PING_PONG_DISABLE;
#endif
pConfig.autoMode = CSL_DMA_AUTORELOAD_DISABLE;
pConfig.burstLen = CSL_DMA_TXBURST_8WORD;
pConfig.trigger = CSL_DMA_SOFTWARE_TRIGGER;
pConfig.dmaEvt = CSL_DMA_EVT_NONE;
pConfig.dmaInt = CSL_DMA_INTERRUPT_DISABLE;
pConfig.chanDir = CSL_DMA_READ;
pConfig.trfType = CSL_DMA_TRANSFER_MEMORY;
pConfig.dataLen = CSL_DMA_BUFFER_SIZE * 2;
pConfig.srcAddr = (Uint32)dmaSRCBuff;
pConfig.destAddr = (Uint32)dmaDESTBuff;
status = DMA_Config(hDMA, &pConfig);
status = DMA_start (hDMA);
===========================================================================
| hDMA | Pointer to the object that holds reference to the DMA handle object. |
References CSL_DMA_ChannelObj::chanNum, CSL_DMA_CHAN0, CSL_DMA_CHAN1, CSL_DMA_CHAN2, CSL_DMA_CHAN3, CSL_DMA_CHANNEL_ENABLE, CSL_DMA_DMATCR2_DMASTART_SYNC_MASK, CSL_DMA_EVENT_TRIGGER, CSL_DMA_ChannelObj::dmaRegs, and CSL_DMA_ChannelObj::trigger.
Referenced by MMC_read(), and MMC_write().
| CSL_Status DMA_stop | ( | CSL_DMA_Handle | hDMA | ) |
===========================================================================
DMA_stop
Description
This function set the DMA controller for not transfering the data.
Arguments
hDMA Handle to the DMA
Return Value CSL_Status
Pre Condition
1. DMA_open() must be called successfully before this function call 2. Call DMA_config() for the handle return by DMA_open() 3. call DMA_start() and in the mean while call DMA_stop() if transfer is not required.
Post Condition
None
Modifies
None
Example
#define CSL_DMA_BUFFER_SIZE 1024
CSL_DMA_Handle hDMA;
CSL_DMA_Config pConfig;
CSL_status status;
CSL_DMAChanNum chanNum;
CSL_DMA_ChannelObj pDmaChanObj
Uint16 dmaSRCBuff[CSL_DMA_BUFFER_SIZE];
Uint16 dmaDESTBuff[CSL_DMA_BUFFER_SIZE];
chanNum = CSL_DMA_CHAN0;
hDMA = DMA_open(chanNum, &pDmaChanObj, &status);
#if (defined(CHIP_C5505_C5515) || defined(CHIP_C5504_C5514))
pConfig.pingPongMode = CSL_DMA_PING_PONG_DISABLE;
#endif
pConfig.autoMode = CSL_DMA_AUTORELOAD_DISABLE;
pConfig.burstLen = CSL_DMA_TXBURST_8WORD;
pConfig.trigger = CSL_DMA_SOFTWARE_TRIGGER;
pConfig.dmaEvt = CSL_DMA_EVT_NONE;
pConfig.dmaInt = CSL_DMA_INTERRUPT_DISABLE;
pConfig.chanDir = CSL_DMA_READ;
pConfig.trfType = CSL_DMA_TRANSFER_MEMORY;
pConfig.dataLen = CSL_DMA_BUFFER_SIZE * 2;
pConfig.srcAddr = (Uint32)dmaSRCBuff;
pConfig.destAddr = (Uint32)dmaDESTBuff;
status = DMA_Config(hDMA, &pConfig);
status = DMA_start (hDMA);
status = DMA_stop (hDMA);
===========================================================================
| hDMA | Pointer to the object that holds reference to the DMA handle object. |
References CSL_DMA_ChannelObj::chanNum, CSL_DMA_CHAN0, CSL_DMA_CHAN1, CSL_DMA_CHAN2, CSL_DMA_CHAN3, CSL_DMA_CHANNEL_DISABLE, CSL_DMA_DMATCR2_DMASTART_SYNC_MASK, CSL_DMA_EVENT_TRIGGER, CSL_DMA_ChannelObj::dmaRegs, and CSL_DMA_ChannelObj::trigger.
Referenced by MMC_read(), and MMC_write().
| CSL_Status DMA_swapWords | ( | Uint16 * | dataBuffer, |
| Uint32 | dataLength | ||
| ) |
===========================================================================
DMA_swapWords
Description
This function swaps words in a given buffer
Arguments
dataBuffer Pointer to the buffer which words needs to be swaped
dataLength Length of the valid data buffer in the buffer
Return Value CSL_Status
Pre Condition
None
Post Condition
Swaps the words in the given buffer
Modifies
Order of data in the given buffer
Example
#define DMA_BUF_SIZE (256)
Uint16 dmaBuf [DMA_BUF_SIZE];
CSL_Status status;
status = DMA_swapWords (dmaBuf, DMA_BUF_SIZE);
===========================================================================
Referenced by MMC_read(), and MMC_write().
1.7.4