工具与软件:
我尝试连接 BQ 32000、地址未正确写入、
我将写入0xD0、但地址发送为0x0A 且带 R
我在这里做错了什么。
void I2C_GPIO(){
EALLOW;
GpioCtrlRegs.GPCGMUX2.bit.GPIO92 = 1;// I2C RTC_SCL-A
GpioCtrlRegs.GPCGMUX2.bit.GPIO91 = 1;// I2C RTC_SDA-A
GpioCtrlRegs.GPCMUX2.bit.GPIO92 = 2;// I2C RTC_SCL-A
GpioCtrlRegs.GPCMUX2.bit.GPIO91 = 2;// I2C RTC_SDA-A
GpioCtrlRegs.GPCPUD.bit.GPIO92 = 0;// I2C RTC_SCL-A
GpioCtrlRegs.GPCPUD.bit.GPIO91 = 0;// I2C RTC_SDA-A
GpioCtrlRegs.GPCQSEL2.bit.GPIO92 = 3;// I2C RTC_SCL-A
GpioCtrlRegs.GPCQSEL2.bit.GPIO91 = 3;// I2C RTC_SDA-A
GpioCtrlRegs.GPCGMUX2.bit.GPIO90 = 1;//I2C RTC_IRQ
GpioCtrlRegs.GPCMUX2.bit.GPIO90 = 2;// I2C RTC_IRQ
GpioCtrlRegs.GPCPUD.bit.GPIO90 = 0;// I2C RTC_IRQ
GpioCtrlRegs.GPCDIR.bit.GPIO90 = 0;
GpioCtrlRegs.GPCQSEL2.bit.GPIO90 = 3;// I2C RTC_IRQ
EDIS;
}
//
// I2CA_Init -初始化 I2CA 设置
//
空 RTC_I2CA_Init (空)
{
EALLOW;
I2caRegs.I2CMDR.bit.IRS = 0;
I2caRegs.I2CPS.all = 8;//预分频器-需要在模块时钟上实现7-12MHz (200/16+1 = 11Mhz)
I2caRegs.I2CCLKL = 49;//注意:必须为非零
I2caRegs.I2CCLKH = 49;//注意:必须为非零
// I2caRegs.I2CIR.all = 0x1A;// Enable SCD & ARDY ___interrupts
// I2caRegs.I2CSTR.all = 0xFF;// Enable interrupts
I2caRegs.I2CIER = 0x24;//启用 SCD 和 ARDY 中断
I2caRegs.I2CMDR.all = 0x0020;//使 I2C 退出复位
I2caRegs.I2CMDR.bit.xa = 0;
I2caRegs.I2CFFTX.ALL = 0x6000;// Enable FIFO mode and TXFIFO (启用 FIFO 模式和 TXFIFO)
I2caRegs.I2CFFRX.ALL = 0x2040;// Enable RXFIFO、Clear RXFFINT、
I2caRegs.I2CMDR.bit.IRS = 1;
I2caRegs.I2CMDR.bit.stp = 0;
EDIS;
返回;
}
//
// I2CA_WriteData -发送 I2CA 消息
//
UINT16 I2CA_WriteData ()
{
INT I=0;
//
//等待直到 STP 位从任何之前的主通信中清除。
//模块清除此位的操作被延迟到 SCD 位之后
//设置。 如果在启动新消息之前未检查该位、则为
// I2C 可能会感到困惑。
//
I2caRegs.I2CMDR.bit.IRS = 1;//复位
//
//设置从地址
//
I2caRegs.I2CMDR.bit.MST = 1;//模块选择为主器件
I2caRegs.I2CMDR.bit.TRX = 1;// TX mode (I2caRegs.I2CMDR.bit.TRX = 1)
if (I2caRegs.I2CMDR.bit.stp =1)
{
}
if (I2caRegs.I2CSTR.bit.BB =1)
{
//返回 I2C_BUS_BUS_ERROR;
}
I2caRegs.I2CSAR.bit.SAR = WRITE_ADDRESS_SLAVE;
//
//设置要发送的字节数
// MsgBuffer + Address
//
I2caRegs.I2CCNT = 0x05;
I2caRegs.I2CMDR.bit.STT = 1;//开始通信以在线进行控制
I2caRegs.I2CDXR.bit.data = 0x00;
I2caRegs.I2CDXR.bit.data = 0x20;
I2caRegs.I2CDXR.bit.data = 0x30;
I2caRegs.I2CMDR.bit.stp =1;
返回 I2C_SUCCESS;
}