Skip to content

Commit 625fe2d

Browse files
committed
Revert "Use interrupt mode for I2C transfers"
This reverts commit 2e9dc4d.
1 parent 7487390 commit 625fe2d

File tree

1 file changed

+16
-23
lines changed

1 file changed

+16
-23
lines changed

Diff for: cores/arduino/stm32/twi.c

+16-23
Original file line numberDiff line numberDiff line change
@@ -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)
385386
i2c_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

Comments
 (0)