cancel
Showing results for 
Search instead for 
Did you mean: 

I2C slave transmitter HAL code

achin
Associate II
Posted on March 20, 2017 at 18:24

Going through HAL code, I see this

static HAL_StatusTypeDef I2C_SlaveTransmit_TXE(I2C_HandleTypeDef *hi2c)

{

/* Declaration of temporary variables to prevent undefined behavior of volatile usage */

uint32_t CurrentState = hi2c->State;

if(hi2c->XferCount != 0U)

{

/* Write data to DR */

hi2c->Instance->DR = (*hi2c->pBuffPtr++);

hi2c->XferCount--;

if((hi2c->XferCount == 0U) && (CurrentState == HAL_I2C_STATE_BUSY_TX_LISTEN))

{

/* Last Byte is received, disable Interrupt */

__HAL_I2C_DISABLE_IT(hi2c, I2C_IT_BUF);

/* Set state at HAL_I2C_STATE_LISTEN */

hi2c->PreviousState = I2C_STATE_SLAVE_BUSY_TX;

hi2c->State = HAL_I2C_STATE_LISTEN;

/* Call the Tx complete callback to inform upper layer of the end of receive process */

HAL_I2C_SlaveTxCpltCallback(hi2c);

}

}

return HAL_OK;

I am not sure how this approaches the problem with multiple bytes. Since it is just 'if statements', wouldn't that mean I would need it an interrupt to occur for each byte?

0 REPLIES 0