@@ -262,12 +262,14 @@ void i2c_custom_init(i2c_t *obj, i2c_timing_e timing, uint32_t addressingMode, u
262262
263263 handle -> State = HAL_I2C_STATE_RESET ;
264264
265- HAL_NVIC_SetPriority (obj -> irq , 0 , 1 );
266- HAL_NVIC_EnableIRQ (obj -> irq );
265+ if (master == 0 ) {
266+ HAL_NVIC_SetPriority (obj -> irq , 0 , 1 );
267+ HAL_NVIC_EnableIRQ (obj -> irq );
267268#ifdef STM32F1xx
268- HAL_NVIC_SetPriority (obj -> irqER , 0 , 1 );
269- HAL_NVIC_EnableIRQ (obj -> irqER );
269+ HAL_NVIC_SetPriority (obj -> irqER , 0 , 1 );
270+ HAL_NVIC_EnableIRQ (obj -> irqER );
270271#endif
272+ }
271273
272274 // Init the I2C
273275 HAL_I2C_Init (handle );
@@ -340,18 +342,17 @@ i2c_status_e i2c_master_write(i2c_t *obj, uint8_t dev_address,
340342
341343{
342344 i2c_status_e ret = I2C_ERROR ;
343- uint32_t tickstart = HAL_GetTick ();
345+ HAL_StatusTypeDef status = HAL_OK ;
346+
347+ // Check the communication status
348+ status = HAL_I2C_Master_Transmit (& (obj -> handle ), dev_address , data , size , I2C_TIMEOUT_TICK );
344349
345- if (HAL_I2C_Master_Transmit_IT ( & ( obj -> handle ), dev_address , data , size ) == HAL_OK ){
350+ if (status == HAL_OK )
346351 ret = I2C_OK ;
347- // wait for transfer completion
348- while ((HAL_I2C_GetState (& (obj -> handle )) != HAL_I2C_STATE_READY )
349- && (ret != I2C_TIMEOUT )){
350- if ((HAL_GetTick () - tickstart ) > I2C_TIMEOUT_TICK ) {
351- ret = I2C_TIMEOUT ;
352- }
353- }
354- }
352+ else if (status == HAL_TIMEOUT )
353+ ret = I2C_TIMEOUT ;
354+ else
355+ ret = I2C_ERROR ;
355356
356357 return ret ;
357358}
@@ -385,17 +386,9 @@ void i2c_slave_write_IT(i2c_t *obj, uint8_t *data, uint8_t size)
385386i2c_status_e i2c_master_read (i2c_t * obj , uint8_t dev_address , uint8_t * data , uint8_t size )
386387{
387388 i2c_status_e ret = I2C_ERROR ;
388- uint32_t tickstart = HAL_GetTick ();
389389
390- if (HAL_I2C_Master_Receive_IT (& (obj -> handle ), dev_address , data , size ) == HAL_OK ) {
390+ if (HAL_I2C_Master_Receive (& (obj -> handle ), dev_address , data , size , I2C_TIMEOUT_TICK ) == HAL_OK ) {
391391 ret = I2C_OK ;
392- // wait for transfer completion
393- while ((HAL_I2C_GetState (& (obj -> handle )) != HAL_I2C_STATE_READY )
394- && (ret != I2C_TIMEOUT )){
395- if ((HAL_GetTick () - tickstart ) > I2C_TIMEOUT_TICK ) {
396- ret = I2C_TIMEOUT ;
397- }
398- }
399392 }
400393
401394 return ret ;
0 commit comments