123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268 |
- typedef struct _sai_edma_handle sai_edma_handle_t;
- typedef void (*sai_edma_callback_t)(I2S_Type *base, sai_edma_handle_t *handle, status_t status, void *userData);
- struct _sai_edma_handle
- {
- edma_handle_t *dmaHandle;
- uint8_t nbytes;
- uint8_t bytesPerFrame;
- uint8_t channel;
- uint8_t count;
- uint32_t state;
- sai_edma_callback_t callback;
- void *userData;
- uint8_t tcd[(SAI_XFER_QUEUE_SIZE + 1U) * sizeof(edma_tcd_t)];
- sai_transfer_t saiQueue[SAI_XFER_QUEUE_SIZE];
- size_t transferSize[SAI_XFER_QUEUE_SIZE];
- volatile uint8_t queueUser;
- volatile uint8_t queueDriver;
- };
- extern "C" {
- void SAI_TransferTxCreateHandleEDMA(
- I2S_Type *base, sai_edma_handle_t *handle, sai_edma_callback_t callback, void *userData, edma_handle_t *dmaHandle);
- void SAI_TransferRxCreateHandleEDMA(
- I2S_Type *base, sai_edma_handle_t *handle, sai_edma_callback_t callback, void *userData, edma_handle_t *dmaHandle);
- void SAI_TransferTxSetFormatEDMA(I2S_Type *base,
- sai_edma_handle_t *handle,
- sai_transfer_format_t *format,
- uint32_t mclkSourceClockHz,
- uint32_t bclkSourceClockHz);
- void SAI_TransferRxSetFormatEDMA(I2S_Type *base,
- sai_edma_handle_t *handle,
- sai_transfer_format_t *format,
- uint32_t mclkSourceClockHz,
- uint32_t bclkSourceClockHz);
- status_t SAI_TransferSendEDMA(I2S_Type *base, sai_edma_handle_t *handle, sai_transfer_t *xfer);
- status_t SAI_TransferReceiveEDMA(I2S_Type *base, sai_edma_handle_t *handle, sai_transfer_t *xfer);
- void SAI_TransferTerminateSendEDMA(I2S_Type *base, sai_edma_handle_t *handle);
- void SAI_TransferTerminateReceiveEDMA(I2S_Type *base, sai_edma_handle_t *handle);
- void SAI_TransferAbortSendEDMA(I2S_Type *base, sai_edma_handle_t *handle);
- void SAI_TransferAbortReceiveEDMA(I2S_Type *base, sai_edma_handle_t *handle);
- status_t SAI_TransferGetSendCountEDMA(I2S_Type *base, sai_edma_handle_t *handle, size_t *count);
- status_t SAI_TransferGetReceiveCountEDMA(I2S_Type *base, sai_edma_handle_t *handle, size_t *count);
- }
|