diff --git a/firmware/common/hackrf_core.c b/firmware/common/hackrf_core.c index a562f7c6..1af5e823 100644 --- a/firmware/common/hackrf_core.c +++ b/firmware/common/hackrf_core.c @@ -38,13 +38,15 @@ i2c_bus_t i2c0 = { .obj = (void*)I2C0_BASE, - .init = i2c_lpc_init, + .start = i2c_lpc_start, + .stop = i2c_lpc_stop, .transfer = i2c_lpc_transfer, }; i2c_bus_t i2c1 = { .obj = (void*)I2C1_BASE, - .init = i2c_lpc_init, + .start = i2c_lpc_start, + .stop = i2c_lpc_stop, .transfer = i2c_lpc_transfer, }; @@ -290,7 +292,7 @@ void cpu_clock_init(void) /* use IRC as clock source for APB3 */ CGU_BASE_APB3_CLK = CGU_BASE_APB3_CLK_CLK_SEL(CGU_SRC_IRC); - i2c_bus_init(clock_gen.bus, &i2c_config_si5351c_slow_clock); + i2c_bus_start(clock_gen.bus, &i2c_config_si5351c_slow_clock); si5351c_disable_all_outputs(&clock_gen); si5351c_disable_oeb_pin_control(&clock_gen); @@ -362,7 +364,7 @@ void cpu_clock_init(void) //FIXME disable I2C /* Kick I2C0 down to 400kHz when we switch over to APB1 clock = 204MHz */ - i2c_bus_init(clock_gen.bus, &i2c_config_si5351c_fast_clock); + i2c_bus_start(clock_gen.bus, &i2c_config_si5351c_fast_clock); /* * 12MHz clock is entering LPC XTAL1/OSC input now. On diff --git a/firmware/common/i2c_bus.c b/firmware/common/i2c_bus.c index 6b60455a..7b5497e0 100644 --- a/firmware/common/i2c_bus.c +++ b/firmware/common/i2c_bus.c @@ -21,8 +21,12 @@ #include "i2c_bus.h" -void i2c_bus_init(i2c_bus_t* const bus, const void* const config) { - bus->init(bus, config); +void i2c_bus_start(i2c_bus_t* const bus, const void* const config) { + bus->start(bus, config); +} + +void i2c_bus_stop(i2c_bus_t* const bus) { + bus->stop(bus); } void i2c_bus_transfer( diff --git a/firmware/common/i2c_bus.h b/firmware/common/i2c_bus.h index 784fb602..04b83499 100644 --- a/firmware/common/i2c_bus.h +++ b/firmware/common/i2c_bus.h @@ -30,7 +30,8 @@ typedef struct i2c_bus_t i2c_bus_t; struct i2c_bus_t { void* const obj; - void (*init)(i2c_bus_t* const bus, const void* const config); + void (*start)(i2c_bus_t* const bus, const void* const config); + void (*stop)(i2c_bus_t* const bus); void (*transfer)( i2c_bus_t* const bus, const uint_fast8_t slave_address, @@ -39,7 +40,8 @@ struct i2c_bus_t { ); }; -void i2c_bus_init(i2c_bus_t* const bus, const void* const config); +void i2c_bus_start(i2c_bus_t* const bus, const void* const config); +void i2c_bus_stop(i2c_bus_t* const bus); void i2c_bus_transfer( i2c_bus_t* const bus, const uint_fast8_t slave_address, diff --git a/firmware/common/i2c_lpc.c b/firmware/common/i2c_lpc.c index 73c3e92c..f7bf4393 100644 --- a/firmware/common/i2c_lpc.c +++ b/firmware/common/i2c_lpc.c @@ -26,13 +26,18 @@ /* FIXME return i2c0 status from each function */ -void i2c_lpc_init(i2c_bus_t* const bus, const void* const _config) { +void i2c_lpc_start(i2c_bus_t* const bus, const void* const _config) { const i2c_lpc_config_t* const config = _config; const uint32_t port = (uint32_t)bus->obj; i2c_init(port, config->duty_cycle_count); } +void i2c_lpc_stop(i2c_bus_t* const bus) { + const uint32_t port = (uint32_t)bus->obj; + i2c_disable(port); +} + void i2c_lpc_transfer(i2c_bus_t* const bus, const uint_fast8_t slave_address, const uint8_t* const data_tx, const size_t count_tx, diff --git a/firmware/common/i2c_lpc.h b/firmware/common/i2c_lpc.h index 16c04a22..32c79fcd 100644 --- a/firmware/common/i2c_lpc.h +++ b/firmware/common/i2c_lpc.h @@ -31,7 +31,8 @@ typedef struct i2c_lpc_config_t { const uint16_t duty_cycle_count; } i2c_lpc_config_t; -void i2c_lpc_init(i2c_bus_t* const bus, const void* const config); +void i2c_lpc_start(i2c_bus_t* const bus, const void* const config); +void i2c_lpc_stop(i2c_bus_t* const bus); void i2c_lpc_transfer(i2c_bus_t* const bus, const uint_fast8_t slave_address, const uint8_t* const data_tx, const size_t count_tx, diff --git a/firmware/libopencm3 b/firmware/libopencm3 index aec04e96..10503c7c 160000 --- a/firmware/libopencm3 +++ b/firmware/libopencm3 @@ -1 +1 @@ -Subproject commit aec04e962c2264877580be30fe1e1178ce3f568c +Subproject commit 10503c7cc19647393d98cc66c3dbaf20bd634494