Other Parts Discussed in Thread: BQ24250
Tool/software: Code Composer Studio
hello everyone,
I want to read the charging status of Register 0x00 of bq2250 ic using I2c code.
when i am debugging the code ,its getting struck in this step of eusci_b_i2c.c driver file.
//Poll for transmit interrupt flag.
while(!(HWREG16(baseAddress + OFS_UCBxIFG) & UCTXIFG))
{
;
}
please guide me to solve .
I2c code for Bq24250 :
#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(void)
{
WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
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_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P1,GPIO_PIN6 + GPIO_PIN7,GPIO_SECONDARY_MODULE_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, ¶m);
EUSCI_B_I2C_setMode(EUSCI_B0_BASE, EUSCI_B_I2C_TRANSMIT_MODE);
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()
{
//Send single byte data.
EUSCI_B_I2C_masterSendSingleByte(EUSCI_B0_BASE,0x00);// read register 0x00
//Delay until transmission completes
while(EUSCI_B_I2C_isBusBusy(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);
return reg_status;
}