From d6e9b188c71131cf0745b3b25d033a5e16db886e Mon Sep 17 00:00:00 2001 From: Karl Palsson Date: Wed, 1 Mar 2017 23:30:59 +0000 Subject: i2c-master: working on l1 too. Needs retest on f4. then ready to move to new hardware --- tests/i2c-master/main-stm32l1-generic.c | 80 +++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 tests/i2c-master/main-stm32l1-generic.c (limited to 'tests/i2c-master/main-stm32l1-generic.c') diff --git a/tests/i2c-master/main-stm32l1-generic.c b/tests/i2c-master/main-stm32l1-generic.c new file mode 100644 index 0000000..874cf7d --- /dev/null +++ b/tests/i2c-master/main-stm32l1-generic.c @@ -0,0 +1,80 @@ +/* + * Feb 2017 Karl Palsson + */ + +#include +#include +#include +#include +#include +#include +#include + +#include "trace.h" + +#include "hw.h" +#include "i2c-master.h" + +#define LED_DISCO_GREEN_PORT GPIOB +#define LED_DISCO_GREEN_PIN GPIO7 + + +struct hw_detail hw_details = { + .periph = I2C1, + .periph_rcc = RCC_I2C1, + .periph_rst = RST_I2C1, + .pins = GPIO8 | GPIO9, /* our external i2c device on I2c1 */ + .port = GPIOB, + .port_rcc = RCC_GPIOB, + .trigger_rcc = RCC_GPIOB, + .trigger_port = GPIOB, + .trigger_pin = GPIO13, + .i2c_clock_megahz = 32, +}; + + +/* provided in board files please*/ +/** + * Setup any gpios or anything hardware specific. + * Should _only_ be things that can't be done in shared i2cm_init! + */ +static void i2cm_hw_init(void) +{ + /* trigger pin gpio */ + rcc_periph_clock_enable(hw_details.trigger_rcc); + gpio_mode_setup(hw_details.trigger_port, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, hw_details.trigger_pin); + + /* i2c control lines */ + rcc_periph_clock_enable(hw_details.port_rcc); + gpio_mode_setup(hw_details.port, GPIO_MODE_AF, GPIO_PUPD_NONE, hw_details.pins); + gpio_set_output_options(hw_details.port, GPIO_OTYPE_OD, GPIO_OSPEED_10MHZ, hw_details.pins); + gpio_set_af(hw_details.port, GPIO_AF4, hw_details.pins); +} + +static void setup(void) +{ + printf("hi guys!\n"); + i2cm_hw_init(); + i2cm_init(); +} + + +int main(void) +{ + int i, j; + rcc_clock_setup_pll(&rcc_clock_config[RCC_CLOCK_VRANGE1_HSI_PLL_32MHZ]); + /* green led for ticking */ + rcc_periph_clock_enable(RCC_GPIOB); + gpio_mode_setup(LED_DISCO_GREEN_PORT, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, + LED_DISCO_GREEN_PIN); + setup(); + + while (1) { + i2cm_task(); + gpio_toggle(LED_DISCO_GREEN_PORT, LED_DISCO_GREEN_PIN); + for (i = 0; i < 0x800000; i++) { /* Wait a bit. */ + __asm__("NOP"); + } + } + return 0; +} -- cgit