Skip to content

Commit

Permalink
[stm32] implement i2c_reset using rcc_periph_reset_pulse
Browse files Browse the repository at this point in the history
this also adds support for I2C3 in i2c_reset
  • Loading branch information
flixr authored and karlp committed Jun 11, 2014
1 parent 67b538a commit c01f9ee
Showing 1 changed file with 16 additions and 9 deletions.
25 changes: 16 additions & 9 deletions lib/stm32/common/i2c_common_all.c
Expand Up @@ -5,7 +5,7 @@ Thomas Otto <tommi@viadmin.org>
@author @htmlonly &copy; @endhtmlonly 2012
Ken Sarkies <ksarkies@internode.on.net>
Devices can have up to two I2C peripherals. The peripherals support SMBus and
Devices can have up to three I2C peripherals. The peripherals support SMBus and
PMBus variants.
A peripheral begins after reset in Slave mode. To become a Master a start
Expand Down Expand Up @@ -52,14 +52,21 @@ the reset condition. The reset is effected via the RCC peripheral reset system.
void i2c_reset(uint32_t i2c)
{
switch (i2c) {
case I2C1:
rcc_peripheral_reset(&RCC_APB1RSTR, RCC_APB1RSTR_I2C1RST);
rcc_peripheral_clear_reset(&RCC_APB1RSTR, RCC_APB1RSTR_I2C1RST);
break;
case I2C2:
rcc_peripheral_reset(&RCC_APB1RSTR, RCC_APB1RSTR_I2C2RST);
rcc_peripheral_clear_reset(&RCC_APB1RSTR, RCC_APB1RSTR_I2C2RST);
break;
case I2C1:
rcc_periph_reset_pulse(RCC_I2C1);
break;
#if defined(I2C2_BASE)
case I2C2:
rcc_periph_reset_pulse(RCC_I2C2);
break;
#endif
#if defined(I2C3_BASE)
case I2C3:
rcc_periph_reset_pulse(RCC_I2C3);
break;
#endif
default:
break;
}
}

Expand Down

0 comments on commit c01f9ee

Please sign in to comment.