void SAI_TransferAbortReceiveEDMA(I2S_Type *base, sai_edma_handle_t *handle) { assert(handle); /* Disable dma */ EDMA_AbortTransfer(handle->dmaHandle); /* Disable the channel FIFO */ base->RCR3 &= ~I2S_RCR3_RCE_MASK; /* Disable DMA enable bit */ SAI_RxEnableDMA(base, kSAI_FIFORequestDMAEnable, false); /* Disable Rx */ SAI_RxEnable(base, false); /* Reset the FIFO pointer, at the same time clear all error flags if set */ base->RCSR |= (I2S_RCSR_FR_MASK | I2S_RCSR_SR_MASK); base->RCSR &= ~I2S_RCSR_SR_MASK; /* Handle the queue index */ memset(&handle->saiQueue[handle->queueDriver], 0, sizeof(sai_transfer_t)); handle->queueDriver = (handle->queueDriver + 1) % SAI_XFER_QUEUE_SIZE; /* Set the handle state */ handle->state = kSAI_Idle; }
void I2C_MasterTransferAbortEDMA(I2C_Type *base, i2c_master_edma_handle_t *handle) { EDMA_AbortTransfer(handle->dmaHandle); /* Disable dma transfer. */ I2C_EnableDMA(base, false); /* Reset the state to idle. */ handle->state = kIdleState; }
/*! * brief Aborts a SPDIF receive using eDMA. * * param base SPDIF base pointer * param handle SPDIF eDMA handle pointer. */ void SPDIF_TransferAbortReceiveEDMA(SPDIF_Type *base, spdif_edma_handle_t *handle) { assert(handle); /* Disable dma */ EDMA_AbortTransfer(handle->dmaLeftHandle); EDMA_AbortTransfer(handle->dmaRightHandle); /* Disable DMA enable bit */ SPDIF_EnableDMA(base, kSPDIF_RxDMAEnable, false); /* Set internal state */ memset(handle->spdifQueue, 0U, sizeof(handle->spdifQueue)); memset(handle->transferSize, 0U, sizeof(handle->transferSize)); handle->queueUser = 0U; handle->queueDriver = 0U; /* Set the handle state */ handle->state = kSPDIF_Idle; }
void FLEXIO_I2S_TransferAbortReceiveEDMA(FLEXIO_I2S_Type *base, flexio_i2s_edma_handle_t *handle) { assert(handle); /* Disable dma */ EDMA_AbortTransfer(handle->dmaHandle); /* Disable DMA enable bit */ FLEXIO_I2S_RxEnableDMA(base, false); /* Set the handle state */ handle->state = kFLEXIO_I2S_Idle; }
void LPUART_TransferAbortReceiveEDMA(LPUART_Type *base, lpuart_edma_handle_t *handle) { assert(handle); assert(handle->rxEdmaHandle); /* Disable LPUART RX EDMA. */ LPUART_EnableRxDMA(base, false); /* Stop transfer. */ EDMA_AbortTransfer(handle->rxEdmaHandle); handle->rxState = kLPUART_RxIdle; }
void LPUART_TransferAbortSendEDMA(LPUART_Type *base, lpuart_edma_handle_t *handle) { assert(handle); assert(handle->txEdmaHandle); /* Disable LPUART TX EDMA. */ LPUART_EnableTxDMA(base, false); /* Stop transfer. */ EDMA_AbortTransfer(handle->txEdmaHandle); handle->txState = kLPUART_TxIdle; }
void SAI_TransferAbortReceiveEDMA(I2S_Type *base, sai_edma_handle_t *handle) { assert(handle); /* Disable dma */ EDMA_AbortTransfer(handle->dmaHandle); /* Disable DMA enable bit */ SAI_RxEnableDMA(base, kSAI_FIFORequestDMAEnable, false); /* Disable Rx */ SAI_RxEnable(base, false); /* Set the handle state */ handle->state = kSAI_Idle; }
static void SAI_RxEDMACallback(edma_handle_t *handle, void *userData, bool done, uint32_t tcds) { sai_edma_private_handle_t *privHandle = (sai_edma_private_handle_t *)userData; sai_edma_handle_t *saiHandle = privHandle->handle; /* If finished a blcok, call the callback function */ memset(&saiHandle->saiQueue[saiHandle->queueDriver], 0, sizeof(sai_transfer_t)); saiHandle->queueDriver = (saiHandle->queueDriver + 1) % SAI_XFER_QUEUE_SIZE; if (saiHandle->callback) { (saiHandle->callback)(privHandle->base, saiHandle, kStatus_SAI_RxIdle, saiHandle->userData); } /* If all data finished, just stop the transfer */ if (saiHandle->saiQueue[saiHandle->queueDriver].data == NULL) { /* Disable DMA enable bit */ SAI_RxEnableDMA(privHandle->base, kSAI_FIFORequestDMAEnable, false); EDMA_AbortTransfer(handle); } }