status_t SPIFI_TransferReceiveDMA(SPIFI_Type *base, spifi_dma_handle_t *handle, spifi_transfer_t *xfer) { assert(handle && (handle->dmaHandle)); dma_transfer_config_t xferConfig; status_t status; /* If previous TX not finished. */ if (kSPIFI_BusBusy == handle->state) { status = kStatus_SPIFI_Busy; } else { handle->state = kSPIFI_BusBusy; /* Prepare transfer. */ DMA_PrepareTransfer(&xferConfig, (void *)SPIFI_GetDataRegisterAddress(base), xfer->data, sizeof(uint32_t), xfer->dataSize, kDMA_PeripheralToMemory, NULL); /* Submit transfer. */ DMA_SubmitTransfer(handle->dmaHandle, &xferConfig); DMA_StartTransfer(handle->dmaHandle); /* Enable SPIFI TX DMA. */ SPIFI_EnableDMA(base, true); status = kStatus_Success; } return status; }
status_t USART_TransferReceiveDMA(USART_Type *base, usart_dma_handle_t *handle, usart_transfer_t *xfer) { assert(handle); assert(handle->rxDmaHandle); assert(xfer); assert(xfer->data); assert(xfer->dataSize); dma_transfer_config_t xferConfig; status_t status; /* If previous RX not finished. */ if (kUSART_RxBusy == handle->rxState) { status = kStatus_USART_RxBusy; } else { handle->rxState = kUSART_RxBusy; handle->rxDataSizeAll = xfer->dataSize; /* Enable DMA request from rxFIFO */ USART_EnableRxDMA(base, true); /* Prepare transfer. */ DMA_PrepareTransfer(&xferConfig, (void *)&base->FIFORD, xfer->data, sizeof(uint8_t), xfer->dataSize, kDMA_PeripheralToMemory, NULL); /* Submit transfer. */ DMA_SubmitTransfer(handle->rxDmaHandle, &xferConfig); DMA_StartTransfer(handle->rxDmaHandle); status = kStatus_Success; } return status; }
status_t UART_TransferReceiveDMA(UART_Type *base, uart_dma_handle_t *handle, uart_transfer_t *xfer) { assert(handle); assert(handle->rxDmaHandle); assert(xfer); assert(xfer->data); assert(xfer->dataSize); dma_transfer_config_t xferConfig; status_t status; /* If previous RX not finished. */ if (kUART_RxBusy == handle->rxState) { status = kStatus_UART_RxBusy; } else { handle->rxState = kUART_RxBusy; handle->rxDataSizeAll = xfer->dataSize; /* Prepare transfer. */ DMA_PrepareTransfer(&xferConfig, (void *)UART_GetDataRegisterAddress(base), sizeof(uint8_t), xfer->data, sizeof(uint8_t), xfer->dataSize, kDMA_PeripheralToMemory); /* Submit transfer. */ DMA_SubmitTransfer(handle->rxDmaHandle, &xferConfig, kDMA_EnableInterrupt); DMA_StartTransfer(handle->rxDmaHandle); /* Enable UART RX DMA. */ UART_EnableRxDMA(base, true); status = kStatus_Success; } return status; }