主题中讨论的其他器件:BQ24250
工具/软件:Code Composer Studio
大家好、
我想 使用 I2C 代码读取 bq2250 IC 寄存器0x00的充电状态。
当我调试代码时,它将进入 eusci_b_i2c.c 驱动程序文件的这一步。
//轮询发送中断标志。
while (!(HWREG16 (baseAddress + OFS_UCBxIFG)& UCTXIFG))
{
;
}
请指导我解决问题。
Bq24250的 I2C 代码:
#include "driverlib.h"
#include"clockinit.h"
void i2c_init();
void i2c_write();
uint8_t i2c_read();
void GPIO_init();
uint8_t REG_STATUS=0、REG_val=0;
uint32_t clock_val=0;
#define SLAVE_ADDRESS 0x6A
int main (空)
{
WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器
PM5CTL0 &=~LOCKLPM5;
_BIC_SR_register (GIE);
clockinit();
clock_val=CS_getSMCLK();
GPIO_init();
I2C_init();
_delay_cycles (2000);
reg_val=i2c_read();
while (1);
}
void GPIO_init()
{
GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_P1、GPIO_PIN6 + GPIO_PIN7、GPIO_secondary 模块_function);
}
void i2c_init()
{
EUSCI_B_I2C_initMasterParam param ={0};
param.selectClockSource = EUSCI_B_I2C_CLOCKSOURCE_SMCLK;
param.i2cClk = CS_getSMCLK ();
param.datarate = EUSCI_B_I2C_SET_DATA_RATE_400KBPS;
param.byteCounterThreshold = 1;
param.autoSTOPGeneration = EUSCI_B_I2C_NO_AUTO_STOP;
EUSCI_B_I2C_setSlaveAddress (EUSCI_B0_BASE、SLAVE_ADDRESS);
EUSCI_B_I2C_initMaster (EUSCI_B0_BASE、param);
EUSCI_B_I2C_setMode (EUSCI_B0_BASE、EUSCI_B_I2C_Transmit 模式);
EUSCI_B_I2C_ENABLE (EUSCI_B0_BASE);
EUSCI_B_I2C_clearInterrupt (EUSCI_B0_BASE、EUSCI_B_I2C_Transmit INTERRUPT0 + EUSCI_B_I2C_NAK_INTERRUPT);
EUSCI_B_I2C_enableInterrupt (EUSCI_B0_BASE、EUSCI_B_I2C_Transmit _INTERRUPT0 + EUSCI_B_I2C_NAK_INTERRUPT);
}
uint8_t i2c_read ()
{
//发送单字节数据。
EUSCI_B_I2C_masterSendSingleByte (EUSCI_B0_BASE、0x00);//读取寄存器0x00
//延迟直到传输完成
while (EUSCI_B_I2C_isBusy (EUSCI_B0_BASE))
{
;
}
EUSCI_B_I2C_setMode (EUSCI_B0_BASE、EUSCI_B_I2C_Receive_mode);
EUSCI_B_I2C_clearInterrupt (EUSCI_B0_BASE、EUSCI_B_I2C_Receive_INTERRUPT0+ EUSCI_B_I2C_Transmit INTERRUPT0);
EUSCI_B_I2C_enableInterrupt (EUSCI_B0_BASE、EUSCI_B_I2C_Receive_INTERRUPT0);
REG_STATUS=EUSCI_B_I2C_masterReceiveSingleByte (EUSCI_B0_BASE);
EUSCI_B_I2C_masterReceiveStart (EUSCI_B0_BASE);
REG_STATUS = EUSCI_B_I2C_masterReceiveSingle (EUSCI_B0_BASE);
返回 REG_STATUS;
}