static void I2C_MasterTransferEDMAConfig(I2C_Type *base, i2c_master_edma_handle_t *handle) { edma_transfer_config_t transfer_config; if (handle->transfer.direction == kI2C_Read) { transfer_config.srcAddr = (uint32_t)I2C_GetDataRegAddr(base); transfer_config.destAddr = (uint32_t)(handle->transfer.data); transfer_config.majorLoopCounts = (handle->transfer.dataSize - 1); transfer_config.srcTransferSize = kEDMA_TransferSize1Bytes; transfer_config.srcOffset = 0; transfer_config.destTransferSize = kEDMA_TransferSize1Bytes; transfer_config.destOffset = 1; transfer_config.minorLoopBytes = 1; } else { transfer_config.srcAddr = (uint32_t)(handle->transfer.data + 1); transfer_config.destAddr = (uint32_t)I2C_GetDataRegAddr(base); transfer_config.majorLoopCounts = (handle->transfer.dataSize - 1); transfer_config.srcTransferSize = kEDMA_TransferSize1Bytes; transfer_config.srcOffset = 1; transfer_config.destTransferSize = kEDMA_TransferSize1Bytes; transfer_config.destOffset = 0; transfer_config.minorLoopBytes = 1; } EDMA_SubmitTransfer(handle->dmaHandle, &transfer_config); EDMA_StartTransfer(handle->dmaHandle); }
static void I2C_MasterTransferDMAConfig(I2C_Type *base, i2c_master_dma_handle_t *handle) { dma_transfer_config_t transfer_config; dma_transfer_options_t transfer_options = kDMA_EnableInterrupt; if (handle->transfer.direction == kI2C_Read) { transfer_config.srcAddr = (uint32_t)I2C_GetDataRegAddr(base); transfer_config.destAddr = (uint32_t)(handle->transfer.data); transfer_config.transferSize = (handle->transfer.dataSize - 1); transfer_config.srcSize = kDMA_Transfersize8bits; transfer_config.enableSrcIncrement = false; transfer_config.destSize = kDMA_Transfersize8bits; transfer_config.enableDestIncrement = true; } else { transfer_config.srcAddr = (uint32_t)(handle->transfer.data + 1); transfer_config.destAddr = (uint32_t)I2C_GetDataRegAddr(base); transfer_config.transferSize = (handle->transfer.dataSize - 1); transfer_config.srcSize = kDMA_Transfersize8bits; transfer_config.enableSrcIncrement = true; transfer_config.destSize = kDMA_Transfersize8bits; transfer_config.enableDestIncrement = false; } DMA_SubmitTransfer(handle->dmaHandle, &transfer_config, transfer_options); DMA_StartTransfer(handle->dmaHandle); }