void humid_sht_init(void) { /* Configure DAT/SCL pin as GPIO */ gpio_setup_input(SHT_DAT_GPIO); gpio_setup_output(SHT_SCK_GPIO); gpio_clear(SHT_SCK_GPIO); humid_sht_available = FALSE; humid_sht_status = SHT_IDLE; }
void humid_sht_init(void) { /* Configure DAT/SCL pin as GPIO */ gpio_setup_input(SHT_DAT_GPIO); gpio_setup_output(SHT_SCK_GPIO); gpio_clear(SHT_SCK_GPIO); humid_sht_available = false; humid_sht_status = SHT_IDLE; #if SHT_SDLOG log_sht_started = false; #endif }
static void i2c_wd_check(struct i2c_periph *periph) { uint32_t i2c = (uint32_t) periph->reg_addr; if (periph->watchdog > WD_DELAY) { if (periph->watchdog == WD_DELAY + 1) { i2c_disable_interrupt(i2c, I2C_CR2_ITEVTEN); i2c_disable_interrupt(i2c, I2C_CR2_ITERREN); i2c_peripheral_disable(i2c); #if USE_I2C1 if (i2c == I2C1) { gpio_setup_output(I2C1_GPIO_PORT, I2C1_GPIO_SCL); gpio_setup_input(I2C1_GPIO_PORT, I2C1_GPIO_SDA); } #endif #if USE_I2C2 if (i2c == I2C2) { gpio_setup_output(I2C2_GPIO_PORT, I2C2_GPIO_SCL); gpio_setup_input(I2C2_GPIO_PORT, I2C2_GPIO_SDA); } #endif #if USE_I2C3 if (i2c == I2C3) { gpio_setup_output(I2C3_GPIO_PORT_SCL, I2C3_GPIO_SCL); gpio_setup_input(I2C3_GPIO_PORT_SDA,I2C3_GPIO_SDA); } #endif i2c_scl_clear(i2c); } else if (periph->watchdog < WD_DELAY + WD_RECOVERY_TICKS) { if ((periph->watchdog - WD_DELAY) % 2) i2c_scl_clear(i2c); else i2c_scl_set(i2c); } else { i2c_scl_set(i2c); /* setup gpios for normal i2c operation again */ i2c_setup_gpio(i2c); periph->trans_insert_idx = 0; periph->trans_extract_idx = 0; periph->status = I2CIdle; i2c_enable_interrupt(i2c, I2C_CR2_ITEVTEN); i2c_enable_interrupt(i2c, I2C_CR2_ITERREN); i2c_peripheral_enable(i2c); periph->watchdog = 0; // restart watchdog periph->errors->timeout_tlow_cnt++; return; } } if (periph->watchdog >= 0) periph->watchdog++; }