20231023_InSituLab_emb/InsituLabProject_QRS/Src/Usr/Bsp/McuBspI2c.c
Rjh913828050 4e26d518da 类型:更细
内容:更新十四五程序
人员:任家豪
2024-07-31 08:56:07 +08:00

1074 lines
45 KiB
C

#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;
}