RTEMS 6.1-rc1
|
Data Structures | |
struct | _pdm_edma_transfer |
PDM edma transfer. More... | |
struct | _pdm_edma_handle |
PDM DMA transfer handle, users should not touch the content of the handle. More... | |
Driver version | |
enum | _pdm_edma_multi_channel_interleave { kPDM_EDMAMultiChannelInterleavePerChannelSample , kPDM_EDMAMultiChannelInterleavePerChannelBlock } |
pdm multi channel interleave type More... | |
typedef struct _pdm_edma_handle | pdm_edma_handle_t |
PDM edma handler. | |
typedef enum _pdm_edma_multi_channel_interleave | pdm_edma_multi_channel_interleave_t |
pdm multi channel interleave type | |
typedef struct _pdm_edma_transfer | pdm_edma_transfer_t |
PDM edma transfer. | |
typedef void(* | pdm_edma_callback_t) (PDM_Type *base, pdm_edma_handle_t *handle, status_t status, void *userData) |
PDM eDMA transfer callback function for finish and error. | |
#define | FSL_PDM_EDMA_DRIVER_VERSION (MAKE_VERSION(2, 6, 1)) |
PDM eDMA Transactional | |
void | PDM_TransferInstallEDMATCDMemory (pdm_edma_handle_t *handle, void *tcdAddr, size_t tcdNum) |
Install EDMA descriptor memory. More... | |
void | PDM_TransferCreateHandleEDMA (PDM_Type *base, pdm_edma_handle_t *handle, pdm_edma_callback_t callback, void *userData, edma_handle_t *dmaHandle) |
Initializes the PDM Rx eDMA handle. More... | |
void | PDM_TransferSetMultiChannelInterleaveType (pdm_edma_handle_t *handle, pdm_edma_multi_channel_interleave_t multiChannelInterleaveType) |
Initializes the multi PDM channel interleave type. More... | |
void | PDM_TransferSetChannelConfigEDMA (PDM_Type *base, pdm_edma_handle_t *handle, uint32_t channel, const pdm_channel_config_t *config) |
Configures the PDM channel. More... | |
status_t | PDM_TransferReceiveEDMA (PDM_Type *base, pdm_edma_handle_t *handle, pdm_edma_transfer_t *xfer) |
Performs a non-blocking PDM receive using eDMA. More... | |
void | PDM_TransferTerminateReceiveEDMA (PDM_Type *base, pdm_edma_handle_t *handle) |
Terminate all PDM receive. More... | |
void | PDM_TransferAbortReceiveEDMA (PDM_Type *base, pdm_edma_handle_t *handle) |
Aborts a PDM receive using eDMA. More... | |
status_t | PDM_TransferGetReceiveCountEDMA (PDM_Type *base, pdm_edma_handle_t *handle, size_t *count) |
Gets byte count received by PDM. More... | |
#define FSL_PDM_EDMA_DRIVER_VERSION (MAKE_VERSION(2, 6, 1)) |
Version 2.6.1
pdm multi channel interleave type
void PDM_TransferAbortReceiveEDMA | ( | PDM_Type * | base, |
pdm_edma_handle_t * | handle | ||
) |
Aborts a PDM receive using eDMA.
This function only aborts the current transfer slots, the other transfer slots' information still kept in the handler. If users want to terminate all transfer slots, just call PDM_TransferTerminateReceiveEDMA.
base | PDM base pointer |
handle | PDM eDMA handle pointer. |
brief Aborts a PDM receive using eDMA.
This function only aborts the current transfer slots, the other transfer slots' information still kept in the handler. If users want to terminate all transfer slots, just call PDM_TransferTerminateReceiveEDMA.
param base PDM base pointer param handle PDM eDMA handle pointer.
void PDM_TransferCreateHandleEDMA | ( | PDM_Type * | base, |
pdm_edma_handle_t * | handle, | ||
pdm_edma_callback_t | callback, | ||
void * | userData, | ||
edma_handle_t * | dmaHandle | ||
) |
Initializes the PDM Rx eDMA handle.
This function initializes the PDM slave DMA handle, which can be used for other PDM master transactional APIs. Usually, for a specified PDM instance, call this API once to get the initialized handle.
base | PDM base pointer. |
handle | PDM eDMA handle pointer. |
callback | Pointer to user callback function. |
userData | User parameter passed to the callback function. |
dmaHandle | eDMA handle pointer, this handle shall be static allocated by users. |
brief Initializes the PDM Rx eDMA handle.
This function initializes the PDM slave DMA handle, which can be used for other PDM master transactional APIs. Usually, for a specified PDM instance, call this API once to get the initialized handle.
param base PDM base pointer. param handle PDM eDMA handle pointer. param base PDM peripheral base address. param callback Pointer to user callback function. param userData User parameter passed to the callback function. param dmaHandle eDMA handle pointer, this handle shall be static allocated by users.
status_t PDM_TransferGetReceiveCountEDMA | ( | PDM_Type * | base, |
pdm_edma_handle_t * | handle, | ||
size_t * | count | ||
) |
Gets byte count received by PDM.
base | PDM base pointer |
handle | PDM eDMA handle pointer. |
count | Bytes count received by PDM. |
kStatus_Success | Succeed get the transfer count. |
kStatus_NoTransferInProgress | There is no non-blocking transaction in progress. |
brief Gets byte count received by PDM.
param base PDM base pointer param handle PDM eDMA handle pointer. param count Bytes count received by PDM. retval kStatus_Success Succeed get the transfer count. retval kStatus_NoTransferInProgress There is no non-blocking transaction in progress.
void PDM_TransferInstallEDMATCDMemory | ( | pdm_edma_handle_t * | handle, |
void * | tcdAddr, | ||
size_t | tcdNum | ||
) |
Install EDMA descriptor memory.
handle | Pointer to EDMA channel transfer handle. |
tcdAddr | EDMA head descriptor address. |
tcdNum | EDMA link descriptor address. |
brief Install EDMA descriptor memory.
param handle Pointer to EDMA channel transfer handle. param tcdAddr EDMA head descriptor address. param tcdNum EDMA link descriptor address.
status_t PDM_TransferReceiveEDMA | ( | PDM_Type * | base, |
pdm_edma_handle_t * | handle, | ||
pdm_edma_transfer_t * | xfer | ||
) |
Performs a non-blocking PDM receive using eDMA.
The output data will be formatted as below if handle->interleaveType = kPDM_EDMAMultiChannelInterleavePerChannelBlock
|CHANNEL3 | CHANNEL3 | CHANNEL3 | .... | CHANNEL4 | CHANNEL 4 | CHANNEL4 |....| CHANNEL5 | CHANNEL 5 | CHANNEL5
Note: the dataSize of xfer is the total data size, while application using kPDM_EDMAMultiChannelInterleavePerChannelBlock, the buffer size for each PDM channel is channelSize = dataSize / channelNums, then there are limitation for this feature,
base | PDM base pointer |
handle | PDM eDMA handle pointer. |
xfer | Pointer to DMA transfer structure. |
kStatus_Success | Start a PDM eDMA receive successfully. |
kStatus_InvalidArgument | The input argument is invalid. |
kStatus_RxBusy | PDM is busy receiving data. |
brief Performs a non-blocking PDM receive using eDMA.
note This interface returns immediately after the transfer initiates. Call the PDM_GetReceiveRemainingBytes to poll the transfer status and check whether the PDM transfer is finished.
Scatter gather case: This functio support dynamic scatter gather and staic scatter gather, a. for the dynamic scatter gather case: Application should call PDM_TransferReceiveEDMA function continuously to make sure new receive request is submit before the previous one finish. b. for the static scatter gather case: Application should use the link transfer feature and make sure a loop link transfer is provided, such as: code pdm_edma_transfer_t pdmXfer[2] = { { .data = s_buffer, .dataSize = BUFFER_SIZE, .linkTransfer = &pdmXfer[1], },
{ .data = &s_buffer[BUFFER_SIZE], .dataSize = BUFFER_SIZE, .linkTransfer = &pdmXfer[0] }, }; endcode
The output data will be formatted as below if handle->interleaveType = kPDM_EDMAMultiChannelInterleavePerChannelBlock
|CHANNEL3 | CHANNEL3 | CHANNEL3 | .... | CHANNEL4 | CHANNEL 4 | CHANNEL4 |....| CHANNEL5 | CHANNEL 5 | CHANNEL5
Note: the dataSize of xfer is the total data size, while application using kPDM_EDMAMultiChannelInterleavePerChannelBlock, the buffer size for each PDM channel is channelSize = dataSize / channelNums, there are limitation for this feature,
param base PDM base pointer param handle PDM eDMA handle pointer. param xfer Pointer to DMA transfer structure. retval kStatus_Success Start a PDM eDMA receive successfully. retval kStatus_InvalidArgument The input argument is invalid. retval kStatus_RxBusy PDM is busy receiving data.
void PDM_TransferSetChannelConfigEDMA | ( | PDM_Type * | base, |
pdm_edma_handle_t * | handle, | ||
uint32_t | channel, | ||
const pdm_channel_config_t * | config | ||
) |
Configures the PDM channel.
base | PDM base pointer. |
handle | PDM eDMA handle pointer. |
channel | channel index. |
config | pdm channel configurations. |
brief Configures the PDM channel.
param base PDM base pointer. param handle PDM eDMA handle pointer. param channel channel index. param pdmConfig pdm channel configurations.
void PDM_TransferSetMultiChannelInterleaveType | ( | pdm_edma_handle_t * | handle, |
pdm_edma_multi_channel_interleave_t | multiChannelInterleaveType | ||
) |
Initializes the multi PDM channel interleave type.
This function initializes the PDM DMA handle member interleaveType, it shall be called only when application would like to use type kPDM_EDMAMultiChannelInterleavePerChannelBlock, since the default interleaveType is kPDM_EDMAMultiChannelInterleavePerChannelSample always
handle | PDM eDMA handle pointer. |
multiChannelInterleaveType | Multi channel interleave type. |
brief Initializes the multi PDM channel interleave type.
This function initializes the PDM DMA handle member interleaveType, it shall be called only when application would like to use type kPDM_EDMAMultiChannelInterleavePerChannelBlock, since the default interleaveType is kPDM_EDMAMultiChannelInterleavePerChannelSample always
param handle PDM eDMA handle pointer. param multiChannelInterleaveType Multi channel interleave type.
void PDM_TransferTerminateReceiveEDMA | ( | PDM_Type * | base, |
pdm_edma_handle_t * | handle | ||
) |
Terminate all PDM receive.
This function will clear all transfer slots buffered in the pdm queue. If users only want to abort the current transfer slot, please call PDM_TransferAbortReceiveEDMA.
base | PDM base pointer. |
handle | PDM eDMA handle pointer. |
brief Terminate all PDM receive.
This function will clear all transfer slots buffered in the pdm queue. If users only want to abort the current transfer slot, please call PDM_TransferAbortReceiveEDMA.
param base PDM base pointer. param handle PDM eDMA handle pointer.