@@ -262,12 +262,14 @@ void i2c_custom_init(i2c_t *obj, i2c_timing_e timing, uint32_t addressingMode, u
262
262
263
263
handle -> State = HAL_I2C_STATE_RESET ;
264
264
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 );
267
268
#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 );
270
271
#endif
272
+ }
271
273
272
274
// Init the I2C
273
275
HAL_I2C_Init (handle );
@@ -340,18 +342,17 @@ i2c_status_e i2c_master_write(i2c_t *obj, uint8_t dev_address,
340
342
341
343
{
342
344
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 );
344
349
345
- if (HAL_I2C_Master_Transmit_IT ( & ( obj -> handle ), dev_address , data , size ) == HAL_OK ){
350
+ if (status == HAL_OK )
346
351
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 ;
355
356
356
357
return ret ;
357
358
}
@@ -385,17 +386,9 @@ void i2c_slave_write_IT(i2c_t *obj, uint8_t *data, uint8_t size)
385
386
i2c_status_e i2c_master_read (i2c_t * obj , uint8_t dev_address , uint8_t * data , uint8_t size )
386
387
{
387
388
i2c_status_e ret = I2C_ERROR ;
388
- uint32_t tickstart = HAL_GetTick ();
389
389
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 ) {
391
391
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
- }
399
392
}
400
393
401
394
return ret ;
0 commit comments