#include "McuBspI2c.h" typedef struct { uint8_t Enable; uint8_t I2cMode; // IIC工作模式 uint8_t SlaveAddress; // 从机地址 uint8_t I2cRead; uint8_t I2cWrite; uint32_t I2cSpeed; // IIC通信速率 } BSP_I2C_OBJ; static BSP_I2C_OBJ gMcuBspI2cObj[MCU_BSP_I2C_ALL_NUM] = {0}; int McuBspI2cInit(uint8_t I2cId, uint32_t I2cSpeed, uint8_t I2cMode, uint8_t SlaveAddress) { if (I2cId >= MCU_BSP_I2C_ALL_NUM) { return -1; } while ((gMcuBspI2cObj[I2cId].I2cRead == MCU_BSP_I2C_READ_ENABLE) || (gMcuBspI2cObj[I2cId].I2cWrite == MCU_BSP_I2C_WRITE_ENABLE)) { } gMcuBspI2cObj[I2cId].Enable = MCU_BSP_I2C_OFF; gMcuBspI2cObj[I2cId].I2cMode = I2cMode; gMcuBspI2cObj[I2cId].SlaveAddress = SlaveAddress; gMcuBspI2cObj[I2cId].I2cSpeed = I2cSpeed; if (I2cId == MCU_BSP_I2C0) { SysCtlPeripheralEnable(SYSCTL_PERIPH_I2C0); SysCtlPeripheralEnable(MCU_BSP_I2C0_SCL_GPIO_CLK); SysCtlPeripheralEnable(MCU_BSP_I2C0_SDA_GPIO_CLK); GPIOPinConfigure(MCU_BSP_I2C0_SCL_PIN_CONF); GPIOPinConfigure(MCU_BSP_I2C0_SDA_PIN_CONF); GPIOPinTypeI2CSCL(MCU_BSP_I2C0_SCL_GPIO, MCU_BSP_I2C0_SCL_GPIO_PIN); GPIOPinTypeI2C(MCU_BSP_I2C0_SDA_GPIO, MCU_BSP_I2C0_SDA_GPIO_PIN); if (I2cMode == MCU_BSP_I2C_MASTER) { if (I2cSpeed == MCU_BSP_I2C_SPEED100000) { I2CMasterInitExpClk(I2C0_BASE, SysFreqGet(), false); } else { I2CMasterInitExpClk(I2C0_BASE, SysFreqGet(), true); } } else { I2CSlaveInit(I2C0_BASE, SlaveAddress); } } if (I2cId == MCU_BSP_I2C1) { SysCtlPeripheralEnable(SYSCTL_PERIPH_I2C1); SysCtlPeripheralEnable(MCU_BSP_I2C1_SCL_GPIO_CLK); SysCtlPeripheralEnable(MCU_BSP_I2C1_SDA_GPIO_CLK); GPIOPinConfigure(MCU_BSP_I2C1_SCL_PIN_CONF); GPIOPinConfigure(MCU_BSP_I2C1_SDA_PIN_CONF); GPIOPinTypeI2CSCL(MCU_BSP_I2C1_SCL_GPIO, MCU_BSP_I2C1_SCL_GPIO_PIN); GPIOPinTypeI2C(MCU_BSP_I2C1_SDA_GPIO, MCU_BSP_I2C1_SDA_GPIO_PIN); if (I2cMode == MCU_BSP_I2C_MASTER) { if (I2cSpeed == MCU_BSP_I2C_SPEED100000) { I2CMasterInitExpClk(I2C1_BASE, SysFreqGet(), false); } else { I2CMasterInitExpClk(I2C1_BASE, SysFreqGet(), true); } } else { I2CSlaveInit(I2C1_BASE, SlaveAddress); } } if (I2cId == MCU_BSP_I2C2) { SysCtlPeripheralEnable(SYSCTL_PERIPH_I2C2); SysCtlPeripheralEnable(MCU_BSP_I2C2_SCL_GPIO_CLK); SysCtlPeripheralEnable(MCU_BSP_I2C2_SDA_GPIO_CLK); GPIOPinConfigure(MCU_BSP_I2C2_SCL_PIN_CONF); GPIOPinConfigure(MCU_BSP_I2C2_SDA_PIN_CONF); GPIOPinTypeI2CSCL(MCU_BSP_I2C2_SCL_GPIO, MCU_BSP_I2C2_SCL_GPIO_PIN); GPIOPinTypeI2C(MCU_BSP_I2C2_SDA_GPIO, MCU_BSP_I2C2_SDA_GPIO_PIN); if (I2cMode == MCU_BSP_I2C_MASTER) { if (I2cSpeed == MCU_BSP_I2C_SPEED100000) { I2CMasterInitExpClk(I2C2_BASE, SysFreqGet(), false); } else { I2CMasterInitExpClk(I2C2_BASE, SysFreqGet(), true); } } else { I2CSlaveInit(I2C2_BASE, SlaveAddress); } } if (I2cId == MCU_BSP_I2C3) { SysCtlPeripheralEnable(SYSCTL_PERIPH_I2C3); SysCtlPeripheralEnable(MCU_BSP_I2C3_SCL_GPIO_CLK); SysCtlPeripheralEnable(MCU_BSP_I2C3_SDA_GPIO_CLK); GPIOPinConfigure(MCU_BSP_I2C3_SCL_PIN_CONF); GPIOPinConfigure(MCU_BSP_I2C3_SDA_PIN_CONF); GPIOPinTypeI2CSCL(MCU_BSP_I2C3_SCL_GPIO, MCU_BSP_I2C3_SCL_GPIO_PIN); GPIOPinTypeI2C(MCU_BSP_I2C3_SDA_GPIO, MCU_BSP_I2C3_SDA_GPIO_PIN); if (I2cMode == MCU_BSP_I2C_MASTER) { if (I2cSpeed == MCU_BSP_I2C_SPEED100000) { I2CMasterInitExpClk(I2C3_BASE, SysFreqGet(), false); } else { I2CMasterInitExpClk(I2C3_BASE, SysFreqGet(), true); } } else { I2CSlaveInit(I2C3_BASE, SlaveAddress); } } if (I2cId == MCU_BSP_I2C4) { SysCtlPeripheralEnable(SYSCTL_PERIPH_I2C4); SysCtlPeripheralEnable(MCU_BSP_I2C4_SCL_GPIO_CLK); SysCtlPeripheralEnable(MCU_BSP_I2C4_SDA_GPIO_CLK); GPIOPinConfigure(MCU_BSP_I2C4_SCL_PIN_CONF); GPIOPinConfigure(MCU_BSP_I2C4_SDA_PIN_CONF); GPIOPinTypeI2CSCL(MCU_BSP_I2C4_SCL_GPIO, MCU_BSP_I2C4_SCL_GPIO_PIN); GPIOPinTypeI2C(MCU_BSP_I2C4_SDA_GPIO, MCU_BSP_I2C4_SDA_GPIO_PIN); if (I2cMode == MCU_BSP_I2C_MASTER) { if (I2cSpeed == MCU_BSP_I2C_SPEED100000) { I2CMasterInitExpClk(I2C4_BASE, SysFreqGet(), false); } else { I2CMasterInitExpClk(I2C4_BASE, SysFreqGet(), true); } } else { I2CSlaveInit(I2C4_BASE, SlaveAddress); } } if (I2cId == MCU_BSP_I2C5) { SysCtlPeripheralEnable(SYSCTL_PERIPH_I2C5); SysCtlPeripheralEnable(MCU_BSP_I2C5_SCL_GPIO_CLK); SysCtlPeripheralEnable(MCU_BSP_I2C5_SDA_GPIO_CLK); GPIOPinConfigure(MCU_BSP_I2C5_SCL_PIN_CONF); GPIOPinConfigure(MCU_BSP_I2C5_SDA_PIN_CONF); GPIOPinTypeI2CSCL(MCU_BSP_I2C5_SCL_GPIO, MCU_BSP_I2C5_SCL_GPIO_PIN); GPIOPinTypeI2C(MCU_BSP_I2C5_SDA_GPIO, MCU_BSP_I2C5_SDA_GPIO_PIN); if (I2cMode == MCU_BSP_I2C_MASTER) { if (I2cSpeed == MCU_BSP_I2C_SPEED100000) { I2CMasterInitExpClk(I2C5_BASE, SysFreqGet(), false); } else { I2CMasterInitExpClk(I2C5_BASE, SysFreqGet(), true); } } else { I2CSlaveInit(I2C5_BASE, SlaveAddress); } } if (I2cId == MCU_BSP_I2C6) { SysCtlPeripheralEnable(SYSCTL_PERIPH_I2C6); SysCtlPeripheralEnable(MCU_BSP_I2C6_SCL_GPIO_CLK); SysCtlPeripheralEnable(MCU_BSP_I2C6_SDA_GPIO_CLK); GPIOPinConfigure(MCU_BSP_I2C6_SCL_PIN_CONF); GPIOPinConfigure(MCU_BSP_I2C6_SDA_PIN_CONF); GPIOPinTypeI2CSCL(MCU_BSP_I2C6_SCL_GPIO, MCU_BSP_I2C6_SCL_GPIO_PIN); GPIOPinTypeI2C(MCU_BSP_I2C6_SDA_GPIO, MCU_BSP_I2C6_SDA_GPIO_PIN); if (I2cMode == MCU_BSP_I2C_MASTER) { if (I2cSpeed == MCU_BSP_I2C_SPEED100000) { I2CMasterInitExpClk(I2C6_BASE, SysFreqGet(), false); } else { I2CMasterInitExpClk(I2C6_BASE, SysFreqGet(), true); } } else { I2CSlaveInit(I2C6_BASE, SlaveAddress); } } if (I2cId == MCU_BSP_I2C7) { SysCtlPeripheralEnable(SYSCTL_PERIPH_I2C7); SysCtlPeripheralEnable(MCU_BSP_I2C7_SCL_GPIO_CLK); SysCtlPeripheralEnable(MCU_BSP_I2C7_SDA_GPIO_CLK); GPIOPinConfigure(MCU_BSP_I2C7_SCL_PIN_CONF); GPIOPinConfigure(MCU_BSP_I2C7_SDA_PIN_CONF); GPIOPinTypeI2CSCL(MCU_BSP_I2C7_SCL_GPIO, MCU_BSP_I2C7_SCL_GPIO_PIN); GPIOPinTypeI2C(MCU_BSP_I2C7_SDA_GPIO, MCU_BSP_I2C7_SDA_GPIO_PIN); if (I2cMode == MCU_BSP_I2C_MASTER) { if (I2cSpeed == MCU_BSP_I2C_SPEED100000) { I2CMasterInitExpClk(I2C7_BASE, SysFreqGet(), false); } else { I2CMasterInitExpClk(I2C7_BASE, SysFreqGet(), true); } } else { I2CSlaveInit(I2C7_BASE, SlaveAddress); } } gMcuBspI2cObj[I2cId].Enable = MCU_BSP_I2C_ON; return 0; } int McuBspI2cSendData(uint8_t I2cId, uint8_t SlaveAddress, uint8_t *SendData, uint32_t SendLen) { uint32_t i; CPU_SR_ALLOC(); if (I2cId >= MCU_BSP_I2C_ALL_NUM) { return -1; } if ((SendData == NULL) || (SendLen == 0) || (gMcuBspI2cObj[I2cId].Enable == MCU_BSP_I2C_OFF)) { return -1; } OS_ENTER_CRITICAL(); gMcuBspI2cObj[I2cId].I2cWrite = MCU_BSP_I2C_WRITE_ENABLE; if (gMcuBspI2cObj[I2cId].I2cMode == MCU_BSP_I2C_MASTER) { if (I2cId == MCU_BSP_I2C0) { while(I2CMasterBusy(I2C0_BASE)){ } I2CMasterSlaveAddrSet(I2C0_BASE, SlaveAddress, false); if (SendLen == 1) { I2CMasterDataPut(I2C0_BASE, *SendData); I2CMasterControl(I2C0_BASE, I2C_MASTER_CMD_SINGLE_SEND); if (I2C_MASTER_ERR_NONE != I2CMasterErr(I2C0_BASE)) { gMcuBspI2cObj[I2cId].I2cWrite = MCU_BSP_I2C_WRITE_DISABLE; OS_EXIT_CRITICAL(); return -1; } while(I2CMasterBusy(I2C0_BASE)){ } gMcuBspI2cObj[I2cId].I2cWrite = MCU_BSP_I2C_WRITE_DISABLE; OS_EXIT_CRITICAL(); return 0; } for (i = 0; i < SendLen; i++) { if (i == 0) { I2CMasterDataPut(I2C0_BASE, SendData[i]); I2CMasterControl(I2C0_BASE, I2C_MASTER_CMD_BURST_SEND_START); } else if (i == SendLen - 1) { I2CMasterDataPut(I2C0_BASE, SendData[i]); I2CMasterControl(I2C0_BASE, I2C_MASTER_CMD_BURST_SEND_FINISH); } else { I2CMasterDataPut(I2C0_BASE, SendData[i]); I2CMasterControl(I2C0_BASE, I2C_MASTER_CMD_BURST_SEND_CONT); } if (I2C_MASTER_ERR_NONE != I2CMasterErr(I2C0_BASE)) { if (i != SendLen - 1) { if ((I2C_MCS_ARBLST & I2CMasterErr(I2C0_BASE)) != I2C_MCS_ARBLST) { I2CMasterControl(I2C0_BASE, I2C_MASTER_CMD_BURST_SEND_ERROR_STOP); } } gMcuBspI2cObj[I2cId].I2cWrite = MCU_BSP_I2C_WRITE_DISABLE; OS_EXIT_CRITICAL(); return -1; } while(I2CMasterBusy(I2C0_BASE)){ } } } else if (I2cId == MCU_BSP_I2C1) { while(I2CMasterBusy(I2C1_BASE)){ } I2CMasterSlaveAddrSet(I2C1_BASE, SlaveAddress, false); if (SendLen == 1) { I2CMasterDataPut(I2C1_BASE, *SendData); I2CMasterControl(I2C1_BASE, I2C_MASTER_CMD_SINGLE_SEND); if (I2C_MASTER_ERR_NONE != I2CMasterErr(I2C1_BASE)) { gMcuBspI2cObj[I2cId].I2cWrite = MCU_BSP_I2C_WRITE_DISABLE; OS_EXIT_CRITICAL(); return -1; } while(I2CMasterBusy(I2C1_BASE)){ } gMcuBspI2cObj[I2cId].I2cWrite = MCU_BSP_I2C_WRITE_DISABLE; OS_EXIT_CRITICAL(); return 0; } for (i = 0; i < SendLen; i++) { if (i == 0) { I2CMasterDataPut(I2C1_BASE, SendData[i]); I2CMasterControl(I2C1_BASE, I2C_MASTER_CMD_BURST_SEND_START); } else if (i == SendLen - 1) { I2CMasterDataPut(I2C1_BASE, SendData[i]); I2CMasterControl(I2C1_BASE, I2C_MASTER_CMD_BURST_SEND_FINISH); } else { I2CMasterDataPut(I2C1_BASE, SendData[i]); I2CMasterControl(I2C1_BASE, I2C_MASTER_CMD_BURST_SEND_CONT); } if (I2C_MASTER_ERR_NONE != I2CMasterErr(I2C1_BASE)) { if (i != SendLen - 1) { if ((I2C_MCS_ARBLST & I2CMasterErr(I2C1_BASE)) != I2C_MCS_ARBLST) { I2CMasterControl(I2C1_BASE, I2C_MASTER_CMD_BURST_SEND_ERROR_STOP); } } gMcuBspI2cObj[I2cId].I2cWrite = MCU_BSP_I2C_WRITE_DISABLE; OS_EXIT_CRITICAL(); return -1; } while(I2CMasterBusy(I2C1_BASE)){ } } } else if (I2cId == MCU_BSP_I2C2) { while(I2CMasterBusy(I2C2_BASE)){ } I2CMasterSlaveAddrSet(I2C2_BASE, SlaveAddress, false); if (SendLen == 1) { I2CMasterDataPut(I2C2_BASE, *SendData); I2CMasterControl(I2C2_BASE, I2C_MASTER_CMD_SINGLE_SEND); if (I2C_MASTER_ERR_NONE != I2CMasterErr(I2C2_BASE)) { gMcuBspI2cObj[I2cId].I2cWrite = MCU_BSP_I2C_WRITE_DISABLE; OS_EXIT_CRITICAL(); return -1; } while(I2CMasterBusy(I2C2_BASE)){ } gMcuBspI2cObj[I2cId].I2cWrite = MCU_BSP_I2C_WRITE_DISABLE; OS_EXIT_CRITICAL(); return 0; } for (i = 0; i < SendLen; i++) { if (i == 0) { I2CMasterDataPut(I2C2_BASE, SendData[i]); I2CMasterControl(I2C2_BASE, I2C_MASTER_CMD_BURST_SEND_START); } else if (i == SendLen - 1) { I2CMasterDataPut(I2C2_BASE, SendData[i]); I2CMasterControl(I2C2_BASE, I2C_MASTER_CMD_BURST_SEND_FINISH); } else { I2CMasterDataPut(I2C2_BASE, SendData[i]); I2CMasterControl(I2C2_BASE, I2C_MASTER_CMD_BURST_SEND_CONT); } if (I2C_MASTER_ERR_NONE != I2CMasterErr(I2C2_BASE)) { if (i != SendLen - 1) { if ((I2C_MCS_ARBLST & I2CMasterErr(I2C2_BASE)) != I2C_MCS_ARBLST) { I2CMasterControl(I2C2_BASE, I2C_MASTER_CMD_BURST_SEND_ERROR_STOP); } } gMcuBspI2cObj[I2cId].I2cWrite = MCU_BSP_I2C_WRITE_DISABLE; OS_EXIT_CRITICAL(); return -1; } while(I2CMasterBusy(I2C2_BASE)){ } } } else if (I2cId == MCU_BSP_I2C3) { while(I2CMasterBusy(I2C3_BASE)){ } I2CMasterSlaveAddrSet(I2C3_BASE, SlaveAddress, false); if (SendLen == 1) { I2CMasterDataPut(I2C3_BASE, *SendData); I2CMasterControl(I2C3_BASE, I2C_MASTER_CMD_SINGLE_SEND); if (I2C_MASTER_ERR_NONE != I2CMasterErr(I2C3_BASE)) { gMcuBspI2cObj[I2cId].I2cWrite = MCU_BSP_I2C_WRITE_DISABLE; OS_EXIT_CRITICAL(); return -1; } while(I2CMasterBusy(I2C3_BASE)){ } gMcuBspI2cObj[I2cId].I2cWrite = MCU_BSP_I2C_WRITE_DISABLE; OS_EXIT_CRITICAL(); return 0; } for (i = 0; i < SendLen; i++) { if (i == 0) { I2CMasterDataPut(I2C3_BASE, SendData[i]); I2CMasterControl(I2C3_BASE, I2C_MASTER_CMD_BURST_SEND_START); } else if (i == SendLen - 1) { I2CMasterDataPut(I2C3_BASE, SendData[i]); I2CMasterControl(I2C3_BASE, I2C_MASTER_CMD_BURST_SEND_FINISH); } else { I2CMasterDataPut(I2C3_BASE, SendData[i]); I2CMasterControl(I2C3_BASE, I2C_MASTER_CMD_BURST_SEND_CONT); } if (I2C_MASTER_ERR_NONE != I2CMasterErr(I2C3_BASE)) { if (i != SendLen - 1) { if ((I2C_MCS_ARBLST & I2CMasterErr(I2C3_BASE)) != I2C_MCS_ARBLST) { I2CMasterControl(I2C3_BASE, I2C_MASTER_CMD_BURST_SEND_ERROR_STOP); } } gMcuBspI2cObj[I2cId].I2cWrite = MCU_BSP_I2C_WRITE_DISABLE; OS_EXIT_CRITICAL(); return -1; } while(I2CMasterBusy(I2C3_BASE)){ } } } else if (I2cId == MCU_BSP_I2C4) { while(I2CMasterBusy(I2C4_BASE)){ } I2CMasterSlaveAddrSet(I2C4_BASE, SlaveAddress, false); if (SendLen == 1) { I2CMasterDataPut(I2C4_BASE, *SendData); I2CMasterControl(I2C4_BASE, I2C_MASTER_CMD_SINGLE_SEND); if (I2C_MASTER_ERR_NONE != I2CMasterErr(I2C4_BASE)) { gMcuBspI2cObj[I2cId].I2cWrite = MCU_BSP_I2C_WRITE_DISABLE; OS_EXIT_CRITICAL(); return -1; } while(I2CMasterBusy(I2C4_BASE)){ } gMcuBspI2cObj[I2cId].I2cWrite = MCU_BSP_I2C_WRITE_DISABLE; OS_EXIT_CRITICAL(); return 0; } for (i = 0; i < SendLen; i++) { if (i == 0) { I2CMasterDataPut(I2C4_BASE, SendData[i]); I2CMasterControl(I2C4_BASE, I2C_MASTER_CMD_BURST_SEND_START); } else if (i == SendLen - 1) { I2CMasterDataPut(I2C4_BASE, SendData[i]); I2CMasterControl(I2C4_BASE, I2C_MASTER_CMD_BURST_SEND_FINISH); } else { I2CMasterDataPut(I2C4_BASE, SendData[i]); I2CMasterControl(I2C4_BASE, I2C_MASTER_CMD_BURST_SEND_CONT); } if (I2C_MASTER_ERR_NONE != I2CMasterErr(I2C4_BASE)) { if (i != SendLen - 1) { if ((I2C_MCS_ARBLST & I2CMasterErr(I2C4_BASE)) != I2C_MCS_ARBLST) { I2CMasterControl(I2C4_BASE, I2C_MASTER_CMD_BURST_SEND_ERROR_STOP); } } gMcuBspI2cObj[I2cId].I2cWrite = MCU_BSP_I2C_WRITE_DISABLE; OS_EXIT_CRITICAL(); return -1; } while(I2CMasterBusy(I2C4_BASE)){ } } } else if (I2cId == MCU_BSP_I2C5) { while(I2CMasterBusy(I2C5_BASE)){ } I2CMasterSlaveAddrSet(I2C5_BASE, SlaveAddress, false); if (SendLen == 1) { I2CMasterDataPut(I2C5_BASE, *SendData); I2CMasterControl(I2C5_BASE, I2C_MASTER_CMD_SINGLE_SEND); if (I2C_MASTER_ERR_NONE != I2CMasterErr(I2C5_BASE)) { gMcuBspI2cObj[I2cId].I2cWrite = MCU_BSP_I2C_WRITE_DISABLE; OS_EXIT_CRITICAL(); return -1; } while(I2CMasterBusy(I2C5_BASE)){ } gMcuBspI2cObj[I2cId].I2cWrite = MCU_BSP_I2C_WRITE_DISABLE; OS_EXIT_CRITICAL(); return 0; } for (i = 0; i < SendLen; i++) { if (i == 0) { I2CMasterDataPut(I2C5_BASE, SendData[i]); I2CMasterControl(I2C5_BASE, I2C_MASTER_CMD_BURST_SEND_START); } else if (i == SendLen - 1) { I2CMasterDataPut(I2C5_BASE, SendData[i]); I2CMasterControl(I2C5_BASE, I2C_MASTER_CMD_BURST_SEND_FINISH); } else { I2CMasterDataPut(I2C5_BASE, SendData[i]); I2CMasterControl(I2C5_BASE, I2C_MASTER_CMD_BURST_SEND_CONT); } if (I2C_MASTER_ERR_NONE != I2CMasterErr(I2C5_BASE)) { if (i != SendLen - 1) { if ((I2C_MCS_ARBLST & I2CMasterErr(I2C5_BASE)) != I2C_MCS_ARBLST) { I2CMasterControl(I2C5_BASE, I2C_MASTER_CMD_BURST_SEND_ERROR_STOP); } } gMcuBspI2cObj[I2cId].I2cWrite = MCU_BSP_I2C_WRITE_DISABLE; OS_EXIT_CRITICAL(); return -1; } while(I2CMasterBusy(I2C5_BASE)){ } } } else if (I2cId == MCU_BSP_I2C6) { while(I2CMasterBusy(I2C6_BASE)){ } I2CMasterSlaveAddrSet(I2C6_BASE, SlaveAddress, false); if (SendLen == 1) { I2CMasterDataPut(I2C6_BASE, *SendData); I2CMasterControl(I2C6_BASE, I2C_MASTER_CMD_SINGLE_SEND); if (I2C_MASTER_ERR_NONE != I2CMasterErr(I2C6_BASE)) { gMcuBspI2cObj[I2cId].I2cWrite = MCU_BSP_I2C_WRITE_DISABLE; OS_EXIT_CRITICAL(); return -1; } while(I2CMasterBusy(I2C6_BASE)){ } gMcuBspI2cObj[I2cId].I2cWrite = MCU_BSP_I2C_WRITE_DISABLE; OS_EXIT_CRITICAL(); return 0; } for (i = 0; i < SendLen; i++) { if (i == 0) { I2CMasterDataPut(I2C6_BASE, SendData[i]); I2CMasterControl(I2C6_BASE, I2C_MASTER_CMD_BURST_SEND_START); } else if (i == SendLen - 1) { I2CMasterDataPut(I2C6_BASE, SendData[i]); I2CMasterControl(I2C6_BASE, I2C_MASTER_CMD_BURST_SEND_FINISH); } else { I2CMasterDataPut(I2C6_BASE, SendData[i]); I2CMasterControl(I2C6_BASE, I2C_MASTER_CMD_BURST_SEND_CONT); } if (I2C_MASTER_ERR_NONE != I2CMasterErr(I2C6_BASE)) { if (i != SendLen - 1) { if ((I2C_MCS_ARBLST & I2CMasterErr(I2C6_BASE)) != I2C_MCS_ARBLST) { I2CMasterControl(I2C6_BASE, I2C_MASTER_CMD_BURST_SEND_ERROR_STOP); } } gMcuBspI2cObj[I2cId].I2cWrite = MCU_BSP_I2C_WRITE_DISABLE; OS_EXIT_CRITICAL(); return -1; } while(I2CMasterBusy(I2C6_BASE)){ } } } else if (I2cId == MCU_BSP_I2C7) { while(I2CMasterBusy(I2C7_BASE)){ } I2CMasterSlaveAddrSet(I2C7_BASE, SlaveAddress, false); if (SendLen == 1) { I2CMasterDataPut(I2C7_BASE, *SendData); I2CMasterControl(I2C7_BASE, I2C_MASTER_CMD_SINGLE_SEND); if (I2C_MASTER_ERR_NONE != I2CMasterErr(I2C7_BASE)) { gMcuBspI2cObj[I2cId].I2cWrite = MCU_BSP_I2C_WRITE_DISABLE; OS_EXIT_CRITICAL(); return -1; } while(I2CMasterBusy(I2C7_BASE)){ } gMcuBspI2cObj[I2cId].I2cWrite = MCU_BSP_I2C_WRITE_DISABLE; OS_EXIT_CRITICAL(); return 0; } for (i = 0; i < SendLen; i++) { if (i == 0) { I2CMasterDataPut(I2C7_BASE, SendData[i]); I2CMasterControl(I2C7_BASE, I2C_MASTER_CMD_BURST_SEND_START); } else if (i == SendLen - 1) { I2CMasterDataPut(I2C7_BASE, SendData[i]); I2CMasterControl(I2C7_BASE, I2C_MASTER_CMD_BURST_SEND_FINISH); } else { I2CMasterDataPut(I2C7_BASE, SendData[i]); I2CMasterControl(I2C7_BASE, I2C_MASTER_CMD_BURST_SEND_CONT); } if (I2C_MASTER_ERR_NONE != I2CMasterErr(I2C7_BASE)) { if (i != SendLen - 1) { if ((I2C_MCS_ARBLST & I2CMasterErr(I2C7_BASE)) != I2C_MCS_ARBLST) { I2CMasterControl(I2C7_BASE, I2C_MASTER_CMD_BURST_SEND_ERROR_STOP); } } gMcuBspI2cObj[I2cId].I2cWrite = MCU_BSP_I2C_WRITE_DISABLE; OS_EXIT_CRITICAL(); return -1; } while(I2CMasterBusy(I2C7_BASE)){ } } } } else { /* 从机模式代码,暂未开发 */ } gMcuBspI2cObj[I2cId].I2cWrite = MCU_BSP_I2C_WRITE_DISABLE; OS_EXIT_CRITICAL(); return 0; } int McuBspI2cRecvData(uint8_t I2cId, uint8_t SlaveAddress, uint8_t *RecvData, uint32_t RecvLen) { uint32_t i; CPU_SR_ALLOC(); if (I2cId >= MCU_BSP_I2C_ALL_NUM) { return -1; } if ((RecvData == NULL) || (RecvLen == 0) || (gMcuBspI2cObj[I2cId].Enable == MCU_BSP_I2C_OFF)) { return -1; } OS_ENTER_CRITICAL(); gMcuBspI2cObj[I2cId].I2cRead = MCU_BSP_I2C_READ_ENABLE; if (gMcuBspI2cObj[I2cId].I2cMode == MCU_BSP_I2C_MASTER) { if (I2cId == MCU_BSP_I2C0) { while(I2CMasterBusy(I2C0_BASE)){ } I2CMasterSlaveAddrSet(I2C0_BASE, SlaveAddress, true); if (RecvLen == 1) { I2CMasterControl(I2C0_BASE, I2C_MASTER_CMD_SINGLE_RECEIVE); if (I2C_MASTER_ERR_NONE != I2CMasterErr(I2C0_BASE)) { gMcuBspI2cObj[I2cId].I2cRead = MCU_BSP_I2C_READ_DISABLE; OS_EXIT_CRITICAL(); return -1; } while(I2CMasterBusy(I2C0_BASE)){ } *RecvData = I2CMasterDataGet(I2C0_BASE); gMcuBspI2cObj[I2cId].I2cRead = MCU_BSP_I2C_READ_DISABLE; OS_EXIT_CRITICAL(); return 0; } for (i = 0; i < RecvLen; i++) { if (i == 0) { I2CMasterControl(I2C0_BASE, I2C_MASTER_CMD_BURST_RECEIVE_START); } else if (i == RecvLen - 1) { I2CMasterControl(I2C0_BASE, I2C_MASTER_CMD_BURST_RECEIVE_FINISH); } else { I2CMasterControl(I2C0_BASE, I2C_MASTER_CMD_BURST_RECEIVE_CONT); } if (I2C_MASTER_ERR_NONE != I2CMasterErr(I2C0_BASE)) { if (i != RecvLen - 1) { if ((I2C_MCS_ARBLST & I2CMasterErr(I2C0_BASE)) != I2C_MCS_ARBLST) { I2CMasterControl(I2C0_BASE, I2C_MASTER_CMD_BURST_RECEIVE_ERROR_STOP); } } gMcuBspI2cObj[I2cId].I2cRead = MCU_BSP_I2C_READ_DISABLE; OS_EXIT_CRITICAL(); return -1; } while(I2CMasterBusy(I2C0_BASE)){ } RecvData[i] = I2CMasterDataGet(I2C0_BASE); } } else if (I2cId == MCU_BSP_I2C1) { while(I2CMasterBusy(I2C1_BASE)){ } I2CMasterSlaveAddrSet(I2C1_BASE, SlaveAddress, true); if (RecvLen == 1) { I2CMasterControl(I2C1_BASE, I2C_MASTER_CMD_SINGLE_RECEIVE); if (I2C_MASTER_ERR_NONE != I2CMasterErr(I2C1_BASE)) { gMcuBspI2cObj[I2cId].I2cRead = MCU_BSP_I2C_READ_DISABLE; OS_EXIT_CRITICAL(); return -1; } while(I2CMasterBusy(I2C1_BASE)){ } *RecvData = I2CMasterDataGet(I2C1_BASE); gMcuBspI2cObj[I2cId].I2cRead = MCU_BSP_I2C_READ_DISABLE; OS_EXIT_CRITICAL(); return 0; } for (i = 0; i < RecvLen; i++) { if (i == 0) { I2CMasterControl(I2C1_BASE, I2C_MASTER_CMD_BURST_RECEIVE_START); } else if (i == RecvLen - 1) { I2CMasterControl(I2C1_BASE, I2C_MASTER_CMD_BURST_RECEIVE_FINISH); } else { I2CMasterControl(I2C1_BASE, I2C_MASTER_CMD_BURST_RECEIVE_CONT); } if (I2C_MASTER_ERR_NONE != I2CMasterErr(I2C1_BASE)) { if (i != RecvLen - 1) { if ((I2C_MCS_ARBLST & I2CMasterErr(I2C1_BASE)) != I2C_MCS_ARBLST) { I2CMasterControl(I2C1_BASE, I2C_MASTER_CMD_BURST_RECEIVE_ERROR_STOP); } } gMcuBspI2cObj[I2cId].I2cRead = MCU_BSP_I2C_READ_DISABLE; OS_EXIT_CRITICAL(); return -1; } while(I2CMasterBusy(I2C1_BASE)){ } RecvData[i] = I2CMasterDataGet(I2C1_BASE); } } else if (I2cId == MCU_BSP_I2C2) { while(I2CMasterBusy(I2C2_BASE)){ } I2CMasterSlaveAddrSet(I2C2_BASE, SlaveAddress, true); if (RecvLen == 1) { I2CMasterControl(I2C2_BASE, I2C_MASTER_CMD_SINGLE_RECEIVE); if (I2C_MASTER_ERR_NONE != I2CMasterErr(I2C2_BASE)) { gMcuBspI2cObj[I2cId].I2cRead = MCU_BSP_I2C_READ_DISABLE; OS_EXIT_CRITICAL(); return -1; } while(I2CMasterBusy(I2C2_BASE)){ } *RecvData = I2CMasterDataGet(I2C2_BASE); gMcuBspI2cObj[I2cId].I2cRead = MCU_BSP_I2C_READ_DISABLE; OS_EXIT_CRITICAL(); return 0; } for (i = 0; i < RecvLen; i++) { if (i == 0) { I2CMasterControl(I2C2_BASE, I2C_MASTER_CMD_BURST_RECEIVE_START); } else if (i == RecvLen - 1) { I2CMasterControl(I2C2_BASE, I2C_MASTER_CMD_BURST_RECEIVE_FINISH); } else { I2CMasterControl(I2C2_BASE, I2C_MASTER_CMD_BURST_RECEIVE_CONT); } if (I2C_MASTER_ERR_NONE != I2CMasterErr(I2C2_BASE)) { if (i != RecvLen - 1) { if ((I2C_MCS_ARBLST & I2CMasterErr(I2C2_BASE)) != I2C_MCS_ARBLST) { I2CMasterControl(I2C2_BASE, I2C_MASTER_CMD_BURST_RECEIVE_ERROR_STOP); } } gMcuBspI2cObj[I2cId].I2cRead = MCU_BSP_I2C_READ_DISABLE; OS_EXIT_CRITICAL(); return -1; } while(I2CMasterBusy(I2C2_BASE)){ } RecvData[i] = I2CMasterDataGet(I2C2_BASE); } } else if (I2cId == MCU_BSP_I2C3) { while(I2CMasterBusy(I2C3_BASE)){ } I2CMasterSlaveAddrSet(I2C3_BASE, SlaveAddress, true); if (RecvLen == 1) { I2CMasterControl(I2C3_BASE, I2C_MASTER_CMD_SINGLE_RECEIVE); if (I2C_MASTER_ERR_NONE != I2CMasterErr(I2C3_BASE)) { gMcuBspI2cObj[I2cId].I2cRead = MCU_BSP_I2C_READ_DISABLE; OS_EXIT_CRITICAL(); return -1; } while(I2CMasterBusy(I2C3_BASE)){ } *RecvData = I2CMasterDataGet(I2C3_BASE); gMcuBspI2cObj[I2cId].I2cRead = MCU_BSP_I2C_READ_DISABLE; OS_EXIT_CRITICAL(); return 0; } for (i = 0; i < RecvLen; i++) { if (i == 0) { I2CMasterControl(I2C3_BASE, I2C_MASTER_CMD_BURST_RECEIVE_START); } else if (i == RecvLen - 1) { I2CMasterControl(I2C3_BASE, I2C_MASTER_CMD_BURST_RECEIVE_FINISH); } else { I2CMasterControl(I2C3_BASE, I2C_MASTER_CMD_BURST_RECEIVE_CONT); } if (I2C_MASTER_ERR_NONE != I2CMasterErr(I2C3_BASE)) { if (i != RecvLen - 1) { if ((I2C_MCS_ARBLST & I2CMasterErr(I2C3_BASE)) != I2C_MCS_ARBLST) { I2CMasterControl(I2C3_BASE, I2C_MASTER_CMD_BURST_RECEIVE_ERROR_STOP); } } gMcuBspI2cObj[I2cId].I2cRead = MCU_BSP_I2C_READ_DISABLE; OS_EXIT_CRITICAL(); return -1; } while(I2CMasterBusy(I2C3_BASE)){ } RecvData[i] = I2CMasterDataGet(I2C3_BASE); } } else if (I2cId == MCU_BSP_I2C4) { while(I2CMasterBusy(I2C4_BASE)){ } I2CMasterSlaveAddrSet(I2C4_BASE, SlaveAddress, true); if (RecvLen == 1) { I2CMasterControl(I2C4_BASE, I2C_MASTER_CMD_SINGLE_RECEIVE); if (I2C_MASTER_ERR_NONE != I2CMasterErr(I2C4_BASE)) { gMcuBspI2cObj[I2cId].I2cRead = MCU_BSP_I2C_READ_DISABLE; OS_EXIT_CRITICAL(); return -1; } while(I2CMasterBusy(I2C4_BASE)){ } *RecvData = I2CMasterDataGet(I2C4_BASE); gMcuBspI2cObj[I2cId].I2cRead = MCU_BSP_I2C_READ_DISABLE; OS_EXIT_CRITICAL(); return 0; } for (i = 0; i < RecvLen; i++) { if (i == 0) { I2CMasterControl(I2C4_BASE, I2C_MASTER_CMD_BURST_RECEIVE_START); } else if (i == RecvLen - 1) { I2CMasterControl(I2C4_BASE, I2C_MASTER_CMD_BURST_RECEIVE_FINISH); } else { I2CMasterControl(I2C4_BASE, I2C_MASTER_CMD_BURST_RECEIVE_CONT); } if (I2C_MASTER_ERR_NONE != I2CMasterErr(I2C4_BASE)) { if (i != RecvLen - 1) { if ((I2C_MCS_ARBLST & I2CMasterErr(I2C4_BASE)) != I2C_MCS_ARBLST) { I2CMasterControl(I2C4_BASE, I2C_MASTER_CMD_BURST_RECEIVE_ERROR_STOP); } } gMcuBspI2cObj[I2cId].I2cRead = MCU_BSP_I2C_READ_DISABLE; OS_EXIT_CRITICAL(); return -1; } while(I2CMasterBusy(I2C4_BASE)){ } RecvData[i] = I2CMasterDataGet(I2C4_BASE); } } else if (I2cId == MCU_BSP_I2C5) { while(I2CMasterBusy(I2C5_BASE)){ } I2CMasterSlaveAddrSet(I2C5_BASE, SlaveAddress, true); if (RecvLen == 1) { I2CMasterControl(I2C5_BASE, I2C_MASTER_CMD_SINGLE_RECEIVE); if (I2C_MASTER_ERR_NONE != I2CMasterErr(I2C5_BASE)) { gMcuBspI2cObj[I2cId].I2cRead = MCU_BSP_I2C_READ_DISABLE; OS_EXIT_CRITICAL(); return -1; } while(I2CMasterBusy(I2C5_BASE)){ } *RecvData = I2CMasterDataGet(I2C5_BASE); gMcuBspI2cObj[I2cId].I2cRead = MCU_BSP_I2C_READ_DISABLE; OS_EXIT_CRITICAL(); return 0; } for (i = 0; i < RecvLen; i++) { if (i == 0) { I2CMasterControl(I2C5_BASE, I2C_MASTER_CMD_BURST_RECEIVE_START); } else if (i == RecvLen - 1) { I2CMasterControl(I2C5_BASE, I2C_MASTER_CMD_BURST_RECEIVE_FINISH); } else { I2CMasterControl(I2C5_BASE, I2C_MASTER_CMD_BURST_RECEIVE_CONT); } if (I2C_MASTER_ERR_NONE != I2CMasterErr(I2C5_BASE)) { if (i != RecvLen - 1) { if ((I2C_MCS_ARBLST & I2CMasterErr(I2C5_BASE)) != I2C_MCS_ARBLST) { I2CMasterControl(I2C5_BASE, I2C_MASTER_CMD_BURST_RECEIVE_ERROR_STOP); } } gMcuBspI2cObj[I2cId].I2cRead = MCU_BSP_I2C_READ_DISABLE; OS_EXIT_CRITICAL(); return -1; } while(I2CMasterBusy(I2C5_BASE)){ } RecvData[i] = I2CMasterDataGet(I2C5_BASE); } } else if (I2cId == MCU_BSP_I2C6) { while(I2CMasterBusy(I2C6_BASE)){ } I2CMasterSlaveAddrSet(I2C6_BASE, SlaveAddress, true); if (RecvLen == 1) { I2CMasterControl(I2C6_BASE, I2C_MASTER_CMD_SINGLE_RECEIVE); if (I2C_MASTER_ERR_NONE != I2CMasterErr(I2C6_BASE)) { gMcuBspI2cObj[I2cId].I2cRead = MCU_BSP_I2C_READ_DISABLE; OS_EXIT_CRITICAL(); return -1; } while(I2CMasterBusy(I2C6_BASE)){ } *RecvData = I2CMasterDataGet(I2C6_BASE); gMcuBspI2cObj[I2cId].I2cRead = MCU_BSP_I2C_READ_DISABLE; OS_EXIT_CRITICAL(); return 0; } for (i = 0; i < RecvLen; i++) { if (i == 0) { I2CMasterControl(I2C6_BASE, I2C_MASTER_CMD_BURST_RECEIVE_START); } else if (i == RecvLen - 1) { I2CMasterControl(I2C6_BASE, I2C_MASTER_CMD_BURST_RECEIVE_FINISH); } else { I2CMasterControl(I2C6_BASE, I2C_MASTER_CMD_BURST_RECEIVE_CONT); } if (I2C_MASTER_ERR_NONE != I2CMasterErr(I2C6_BASE)) { if (i != RecvLen - 1) { if ((I2C_MCS_ARBLST & I2CMasterErr(I2C6_BASE)) != I2C_MCS_ARBLST) { I2CMasterControl(I2C6_BASE, I2C_MASTER_CMD_BURST_RECEIVE_ERROR_STOP); } } gMcuBspI2cObj[I2cId].I2cRead = MCU_BSP_I2C_READ_DISABLE; OS_EXIT_CRITICAL(); return -1; } while(I2CMasterBusy(I2C6_BASE)){ } RecvData[i] = I2CMasterDataGet(I2C6_BASE); } } else if (I2cId == MCU_BSP_I2C7) { while(I2CMasterBusy(I2C7_BASE)){ } I2CMasterSlaveAddrSet(I2C7_BASE, SlaveAddress, true); if (RecvLen == 1) { I2CMasterControl(I2C7_BASE, I2C_MASTER_CMD_SINGLE_RECEIVE); if (I2C_MASTER_ERR_NONE != I2CMasterErr(I2C7_BASE)) { gMcuBspI2cObj[I2cId].I2cRead = MCU_BSP_I2C_READ_DISABLE; OS_EXIT_CRITICAL(); return -1; } while(I2CMasterBusy(I2C7_BASE)){ } *RecvData = I2CMasterDataGet(I2C7_BASE); gMcuBspI2cObj[I2cId].I2cRead = MCU_BSP_I2C_READ_DISABLE; OS_EXIT_CRITICAL(); return 0; } for (i = 0; i < RecvLen; i++) { if (i == 0) { I2CMasterControl(I2C7_BASE, I2C_MASTER_CMD_BURST_RECEIVE_START); } else if (i == RecvLen - 1) { I2CMasterControl(I2C7_BASE, I2C_MASTER_CMD_BURST_RECEIVE_FINISH); } else { I2CMasterControl(I2C7_BASE, I2C_MASTER_CMD_BURST_RECEIVE_CONT); } if (I2C_MASTER_ERR_NONE != I2CMasterErr(I2C7_BASE)) { if (i != RecvLen - 1) { if ((I2C_MCS_ARBLST & I2CMasterErr(I2C7_BASE)) != I2C_MCS_ARBLST) { I2CMasterControl(I2C7_BASE, I2C_MASTER_CMD_BURST_RECEIVE_ERROR_STOP); } } gMcuBspI2cObj[I2cId].I2cRead = MCU_BSP_I2C_READ_DISABLE; OS_EXIT_CRITICAL(); return -1; } while(I2CMasterBusy(I2C7_BASE)){ } RecvData[i] = I2CMasterDataGet(I2C7_BASE); } } } else { /* 从机接收还没有开发 */ } gMcuBspI2cObj[I2cId].I2cRead = MCU_BSP_I2C_READ_DISABLE; OS_EXIT_CRITICAL(); return 0; } /* 修改IIC配置 */ int McuBspI2cModifyConf(uint8_t I2cId, uint32_t I2cSpeed, uint8_t I2cMode, uint8_t SlaveAddress) { if (I2cId >= MCU_BSP_I2C_ALL_NUM) { return -1; } if (gMcuBspI2cObj[I2cId].Enable == MCU_BSP_I2C_OFF) { return -1; } while ((gMcuBspI2cObj[I2cId].I2cRead == MCU_BSP_I2C_READ_ENABLE) || (gMcuBspI2cObj[I2cId].I2cWrite == MCU_BSP_I2C_WRITE_ENABLE)) { } gMcuBspI2cObj[I2cId].Enable = MCU_BSP_I2C_OFF; if (I2cId == MCU_BSP_I2C0) { while(I2CMasterBusy(I2C0_BASE)){ } if (gMcuBspI2cObj[I2cId].I2cMode == MCU_BSP_I2C_MASTER) { I2CMasterDisable(I2C0_BASE); } else { I2CSlaveDisable(I2C0_BASE); } if (I2cMode == MCU_BSP_I2C_MASTER) { if (I2cSpeed == MCU_BSP_I2C_SPEED100000) { I2CMasterInitExpClk(I2C0_BASE, SysFreqGet(), false); } else { I2CMasterInitExpClk(I2C0_BASE, SysFreqGet(), true); } } else { I2CSlaveInit(I2C0_BASE, SlaveAddress); } } if (I2cId == MCU_BSP_I2C1) { while(I2CMasterBusy(I2C1_BASE)){ } if (gMcuBspI2cObj[I2cId].I2cMode == MCU_BSP_I2C_MASTER) { I2CMasterDisable(I2C1_BASE); } else { I2CSlaveDisable(I2C1_BASE); } if (I2cMode == MCU_BSP_I2C_MASTER) { if (I2cSpeed == MCU_BSP_I2C_SPEED100000) { I2CMasterInitExpClk(I2C1_BASE, SysFreqGet(), false); } else { I2CMasterInitExpClk(I2C1_BASE, SysFreqGet(), true); } } else { I2CSlaveInit(I2C1_BASE, SlaveAddress); } } if (I2cId == MCU_BSP_I2C2) { while(I2CMasterBusy(I2C2_BASE)){ } if (gMcuBspI2cObj[I2cId].I2cMode == MCU_BSP_I2C_MASTER) { I2CMasterDisable(I2C2_BASE); } else { I2CSlaveDisable(I2C2_BASE); } if (I2cMode == MCU_BSP_I2C_MASTER) { if (I2cSpeed == MCU_BSP_I2C_SPEED100000) { I2CMasterInitExpClk(I2C2_BASE, SysFreqGet(), false); } else { I2CMasterInitExpClk(I2C2_BASE, SysFreqGet(), true); } } else { I2CSlaveInit(I2C2_BASE, SlaveAddress); } } if (I2cId == MCU_BSP_I2C3) { while(I2CMasterBusy(I2C3_BASE)){ } if (gMcuBspI2cObj[I2cId].I2cMode == MCU_BSP_I2C_MASTER) { I2CMasterDisable(I2C3_BASE); } else { I2CSlaveDisable(I2C3_BASE); } if (I2cMode == MCU_BSP_I2C_MASTER) { if (I2cSpeed == MCU_BSP_I2C_SPEED100000) { I2CMasterInitExpClk(I2C3_BASE, SysFreqGet(), false); } else { I2CMasterInitExpClk(I2C3_BASE, SysFreqGet(), true); } } else { I2CSlaveInit(I2C3_BASE, SlaveAddress); } } if (I2cId == MCU_BSP_I2C4) { while(I2CMasterBusy(I2C4_BASE)){ } if (gMcuBspI2cObj[I2cId].I2cMode == MCU_BSP_I2C_MASTER) { I2CMasterDisable(I2C4_BASE); } else { I2CSlaveDisable(I2C4_BASE); } if (I2cMode == MCU_BSP_I2C_MASTER) { if (I2cSpeed == MCU_BSP_I2C_SPEED100000) { I2CMasterInitExpClk(I2C4_BASE, SysFreqGet(), false); } else { I2CMasterInitExpClk(I2C4_BASE, SysFreqGet(), true); } } else { I2CSlaveInit(I2C4_BASE, SlaveAddress); } } if (I2cId == MCU_BSP_I2C5) { while(I2CMasterBusy(I2C5_BASE)){ } if (gMcuBspI2cObj[I2cId].I2cMode == MCU_BSP_I2C_MASTER) { I2CMasterDisable(I2C5_BASE); } else { I2CSlaveDisable(I2C5_BASE); } if (I2cMode == MCU_BSP_I2C_MASTER) { if (I2cSpeed == MCU_BSP_I2C_SPEED100000) { I2CMasterInitExpClk(I2C5_BASE, SysFreqGet(), false); } else { I2CMasterInitExpClk(I2C5_BASE, SysFreqGet(), true); } } else { I2CSlaveInit(I2C5_BASE, SlaveAddress); } } if (I2cId == MCU_BSP_I2C6) { while(I2CMasterBusy(I2C6_BASE)){ } if (gMcuBspI2cObj[I2cId].I2cMode == MCU_BSP_I2C_MASTER) { I2CMasterDisable(I2C6_BASE); } else { I2CSlaveDisable(I2C6_BASE); } if (I2cMode == MCU_BSP_I2C_MASTER) { if (I2cSpeed == MCU_BSP_I2C_SPEED100000) { I2CMasterInitExpClk(I2C6_BASE, SysFreqGet(), false); } else { I2CMasterInitExpClk(I2C6_BASE, SysFreqGet(), true); } } else { I2CSlaveInit(I2C6_BASE, SlaveAddress); } } if (I2cId == MCU_BSP_I2C7) { while(I2CMasterBusy(I2C7_BASE)){ } if (gMcuBspI2cObj[I2cId].I2cMode == MCU_BSP_I2C_MASTER) { I2CMasterDisable(I2C7_BASE); } else { I2CSlaveDisable(I2C7_BASE); } if (I2cMode == MCU_BSP_I2C_MASTER) { if (I2cSpeed == MCU_BSP_I2C_SPEED100000) { I2CMasterInitExpClk(I2C7_BASE, SysFreqGet(), false); } else { I2CMasterInitExpClk(I2C7_BASE, SysFreqGet(), true); } } else { I2CSlaveInit(I2C7_BASE, SlaveAddress); } } gMcuBspI2cObj[I2cId].I2cMode = I2cMode; gMcuBspI2cObj[I2cId].SlaveAddress = SlaveAddress; gMcuBspI2cObj[I2cId].I2cSpeed = I2cSpeed; gMcuBspI2cObj[I2cId].Enable = MCU_BSP_I2C_ON; return 0; }