MCUXpresso SDK API Reference Manual  Rev. 0
NXP Semiconductors
 All Data Structures Functions Variables Typedefs Enumerations Enumerator Groups Pages
Pdm_edma

Overview

Data Structures

struct  pdm_edma_transfer_t
 PDM edma transfer. More...
 
struct  pdm_edma_handle_t
 PDM DMA transfer handle, users should not touch the content of the handle. More...
 

Typedefs

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.
 

Driver version

#define FSL_PDM_EDMA_DRIVER_VERSION   (MAKE_VERSION(2, 5, 0))
 Version 2.5.0.
 

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_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...
 

Data Structure Documentation

struct pdm_edma_transfer_t

Data Fields

volatile uint8_t * data
 Data start address to transfer. More...
 
volatile size_t dataSize
 Total Transfer bytes size. More...
 
struct _pdm_edma_transfer * linkTransfer
 linked transfer configurations
 

Field Documentation

volatile uint8_t* pdm_edma_transfer_t::data
volatile size_t pdm_edma_transfer_t::dataSize
struct _pdm_edma_handle

PDM edma handler.

Data Fields

edma_handle_tdmaHandle
 DMA handler for PDM send.
 
uint8_t count
 The transfer data count in a DMA request.
 
uint32_t receivedBytes
 total transfer count
 
uint32_t state
 Internal state for PDM eDMA transfer.
 
pdm_edma_callback_t callback
 Callback for users while transfer finish or error occurs.
 
bool isLoopTransfer
 loop transfer
 
void * userData
 User callback parameter.
 
edma_tcd_ttcd
 TCD pool for eDMA transfer. More...
 
uint32_t tcdNum
 TCD number.
 
uint32_t tcdUser
 Index for user to queue transfer. More...
 
uint32_t tcdDriver
 Index for driver to get the transfer data and size.
 
volatile uint32_t tcdUsedNum
 Index for user to queue transfer. More...
 
uint8_t endChannel
 The last enabled channel.
 
uint8_t channelNums
 total channel numbers
 

Field Documentation

edma_tcd_t* pdm_edma_handle_t::tcd
uint32_t pdm_edma_handle_t::tcdUser
volatile uint32_t pdm_edma_handle_t::tcdUsedNum

Function Documentation

void PDM_TransferInstallEDMATCDMemory ( pdm_edma_handle_t *  handle,
void *  tcdAddr,
size_t  tcdNum 
)
Parameters
handlePointer to EDMA channel transfer handle.
tcdAddrEDMA head descriptor address.
tcdNumEDMA link descriptor address.
void PDM_TransferCreateHandleEDMA ( PDM_Type *  base,
pdm_edma_handle_t *  handle,
pdm_edma_callback_t  callback,
void *  userData,
edma_handle_t dmaHandle 
)

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.

Parameters
basePDM base pointer.
handlePDM eDMA handle pointer.
basePDM peripheral base address.
callbackPointer to user callback function.
userDataUser parameter passed to the callback function.
dmaHandleeDMA handle pointer, this handle shall be static allocated by users.
void PDM_TransferSetChannelConfigEDMA ( PDM_Type *  base,
pdm_edma_handle_t *  handle,
uint32_t  channel,
const pdm_channel_config_t config 
)
Parameters
basePDM base pointer.
handlePDM eDMA handle pointer.
channelchannel index.
configpdm channel configurations.
status_t PDM_TransferReceiveEDMA ( PDM_Type *  base,
pdm_edma_handle_t *  handle,
pdm_edma_transfer_t xfer 
)
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.
  1. 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:
    * 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]
    * },
    * };
    *
  2. Multi channel case: This function support receive multi pdm channel data, for example, if two channel is requested,
    * PDM_TransferSetChannelConfigEDMA(DEMO_PDM, &s_pdmRxHandle_0, DEMO_PDM_ENABLE_CHANNEL_0, &channelConfig);
    * PDM_TransferSetChannelConfigEDMA(DEMO_PDM, &s_pdmRxHandle_0, DEMO_PDM_ENABLE_CHANNEL_1, &channelConfig);
    * PDM_TransferReceiveEDMA(DEMO_PDM, &s_pdmRxHandle_0, pdmXfer);
    *

    Then the output data will be formatted as:

|CHANNEL0 | CHANNEL1 | CHANNEL0 | CHANNEL1 | CHANNEL0 | CHANNEL 1 | ....|

Parameters
basePDM base pointer
handlePDM eDMA handle pointer.
xferPointer to DMA transfer structure.
Return values
kStatus_SuccessStart a PDM eDMA receive successfully.
kStatus_InvalidArgumentThe input argument is invalid.
kStatus_RxBusyPDM is busy receiving data.
void PDM_TransferTerminateReceiveEDMA ( PDM_Type *  base,
pdm_edma_handle_t *  handle 
)

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.

Parameters
basePDM base pointer.
handlePDM eDMA handle pointer.
void PDM_TransferAbortReceiveEDMA ( PDM_Type *  base,
pdm_edma_handle_t *  handle 
)

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.

Parameters
basePDM base pointer
handlePDM eDMA handle pointer.
status_t PDM_TransferGetReceiveCountEDMA ( PDM_Type *  base,
pdm_edma_handle_t *  handle,
size_t *  count 
)
Parameters
basePDM base pointer
handlePDM eDMA handle pointer.
countBytes count received by PDM.
Return values
kStatus_SuccessSucceed get the transfer count.
kStatus_NoTransferInProgressThere is no non-blocking transaction in progress.