From 2b3f07ee08c722f28cbf480dbcc5276707f78ec4 Mon Sep 17 00:00:00 2001 From: Piotr Esden-Tempski Date: Fri, 24 Feb 2012 17:14:50 -0800 Subject: [PATCH] Added reset function to i2c convenience functions. --- include/libopencm3/stm32/i2c.h | 1 + lib/stm32/i2c.c | 15 +++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/include/libopencm3/stm32/i2c.h b/include/libopencm3/stm32/i2c.h index 1cb9a140..cd252431 100644 --- a/include/libopencm3/stm32/i2c.h +++ b/include/libopencm3/stm32/i2c.h @@ -316,6 +316,7 @@ /* --- I2C funtion prototypes----------------------------------------------- */ +void i2c_reset(u32 i2c); void i2c_peripheral_enable(u32 i2c); void i2c_peripheral_disable(u32 i2c); void i2c_send_start(u32 i2c); diff --git a/lib/stm32/i2c.c b/lib/stm32/i2c.c index e1a3b840..41670c30 100644 --- a/lib/stm32/i2c.c +++ b/lib/stm32/i2c.c @@ -18,6 +18,21 @@ */ #include +#include + +void i2c_reset(u32 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; + } +} void i2c_peripheral_enable(u32 i2c) {