Hi nxp. First time poster here.
Here is the code I'm using.
I based it on the API docs in the Kinetis SDK 2.0 manual, and my functioning EDMA SPI example.
// I2C init
i2c_master_config_t masterConfig;
I2C_MasterGetDefaultConfig(&masterConfig);
masterConfig.enableHighDrive = 0;
I2C_MasterInit(I2C0, &masterConfig, CLOCK_GetFreq(I2C0_CLK_SRC));
// EDMA init
uint32_t i2cChannel == 19U;
edma_config_t userConfig;
NVIC_SetPriority(DMA3_DMA19_IRQn, DMA0_INTERRUPT_PRIORITY);
DMAMUX_Init(DMAMUX);
DMAMUX_SetSource(DMAMUX, i2cChannel, kDmaRequestMux0I2C0);
DMAMUX_EnableChannel(DMAMUX, i2cChannel);
EDMA_GetDefaultConfig(&userConfig);
EDMA_Init(DMA0, &userConfig);
// Clear handles. Is an intermediary handle needed.
memset(&(i2cEdmaHandle), 0, sizeof(i2cEdmaHandle));
EDMA_CreateHandle(&(i2cEdmaHandle), DMA0, i2cChannel);
I2C_MasterCreateEDMAHandle(I2C0, &i2c_edma_m_handle, I2C_MasterUserCallback, NULL, &i2cEdmaHandle);
// transfer init
masterXfer.slaveAddress = 0x48;
masterXfer.direction = kI2C_Read;
masterXfer.subaddress = 0;
masterXfer.subaddressSize = 1;
masterXfer.data = masterRxData;
masterXfer.dataSize = 2;
masterXfer.flags = kI2C_TransferDefaultFlag;
// in my main loop, requesting data from I2C0
status = I2C_MasterTransferEDMA(I2C0, &i2c_edma_m_handle, &masterXfer);
if ((status != kStatus_Success) && (status != kStatus_DSPI_Busy))
{
I2C_MasterTransferAbortEDMA(I2C0, &i2c_edma_m_handle);
// do things to handle fault
}
// blocking wait for the callback to fire
// callback definition
static void I2C_MasterUserCallback(I2C_Type *base, i2c_master_edma_handle_t *handle, status_t status, void *userData)
{
if (status == kStatus_Success) {
// do stuff with results
}
}