/** * @file ivec_mcal_i2c.c * @author Akshat Dabas (akshat@vecmocon.com) * @brief This source file contains API and Private members for I2C Functionality * @version 0.1.0 * @date 2024-Mar-27 * * @copyright Copyright (c) 2024 * */ #include "../Core/Include/ivec_mcal_i2c.h" /*REQUIRED I2C CONFIGS*/ /*=======================================================================================PRIVATE_MEMBERS======================================================================================*/ static volatile bool b_I2C0_INIT_FLAG=0; static volatile bool b_I2C1_INIT_FLAG=0; static volatile uint8_t u8RxBuffer0[I2C_PACKETSIZE]; static volatile uint8_t u8RxBuffer1[I2C_PACKETSIZE]; static volatile int i32bufferIdx0=0; static volatile int i32bufferIdx1=0; volatile int i32TempCount=0; volatile int global_len; static const DL_I2C_ClockConfig gI2C_0ClockConfig = { .clockSel = DL_I2C_CLOCK_BUSCLK, .divideRatio = DL_I2C_CLOCK_DIVIDE_1, }; static volatile uint8_t u8GlobalPacket[8]; static volatile IVEC_I2cControllerStatus_e xStatus_i2c = IVEC_I2C_STATUS_IDLE; /*____________________________________________________________________________________________________________________________________________________________________________________________*/ /*============================================================================================================================================================================================= PRIVATE_DECLARATIONS ==============================================================================================================================================================================================*/ void _prv_vI2C_Callback() { switch (DL_I2C_getPendingInterrupt(I2C0)) { case DL_I2C_IIDX_CONTROLLER_RX_DONE: xStatus_i2c = IVEC_I2C_STATUS_RX_COMPLETE; break; case DL_I2C_IIDX_CONTROLLER_TX_DONE: DL_I2C_disableInterrupt(I2C0, DL_I2C_INTERRUPT_CONTROLLER_TXFIFO_TRIGGER); xStatus_i2c = IVEC_I2C_STATUS_TX_COMPLETE; break; case DL_I2C_IIDX_CONTROLLER_RXFIFO_TRIGGER: xStatus_i2c = IVEC_I2C_STATUS_RX_INPROGRESS; /* Receive all bytes from target */ while (DL_I2C_isControllerRXFIFOEmpty(I2C0) != true) { if (i32bufferIdx0