void GPIO_mode(GPIO_pin_type pin, GPIO_mode_type mode) { // ignore unimplemented pins if (pin < 0 || pin >= SIZE_OF_ARRAY(gpio_info) || NULL == gpio_info[pin].name) { return; } switch (mode) { default: case GPIO_INPUT: if (gpio_info[pin].fd < 0 && !GPIO_enable(pin)) { return; } write_file(gpio_info[pin].direction, DIRECTION_in "\n", CONST_STRLEN(DIRECTION_in "\n")); write_file(gpio_info[pin].active_low, "0\n", 2); write_file(gpio_info[pin].state, STATE_rxEnable_pullNone "\n", CONST_STRLEN(STATE_rxEnable_pullNone "\n")); break; case GPIO_OUTPUT: if (gpio_info[pin].fd < 0 && !GPIO_enable(pin)) { return; } write_file(gpio_info[pin].direction, DIRECTION_out "\n", CONST_STRLEN(DIRECTION_out "\n")); write_file(gpio_info[pin].active_low, "0\n", 2); write_file(gpio_info[pin].state, STATE_rxDisable_pullNone "\n", CONST_STRLEN(STATE_rxDisable_pullNone "\n")); break; case GPIO_PWM: // only certain pins allowed switch (pin) { case GPIO_P9_14: // EHRPWM1A PWM_enable(0, "P9_14"); break; case GPIO_P9_16: // EHRPWM1B PWM_enable(1, "P9_16"); break; case GPIO_P8_19: // EHRPWM2A PWM_enable(2, "P8_19"); break; case GPIO_P8_13: // EHRPWM2B PWM_enable(3, "P8_13"); break; default: break; } break; } }
static void LED_enable_intern(led_t led) { led_shift.current_led |= led; led_shift.dirty = TRUE; // TODO PETER REMOVE if (led & LED_SPI_FLASH) { GPIO_enable(GPIOD, GPIO_Pin_13); } }
BOOTLOADER_TEXT void b_spif_write(u32_t addr, u8_t *b, u16_t len) { GPIO_disable(SPI_FLASH_GPIO_PORT, SPI_FLASH_GPIO_PIN); b_spi_txrx(0x06); // write enable GPIO_enable(SPI_FLASH_GPIO_PORT, SPI_FLASH_GPIO_PIN); volatile int a = 0x100; while (a--) ; GPIO_disable(SPI_FLASH_GPIO_PORT, SPI_FLASH_GPIO_PIN); b_spi_txrx(0x02); // write b_spi_txrx((addr >> 16) & 0xff); b_spi_txrx((addr >> 8) & 0xff); b_spi_txrx((addr >> 0) & 0xff); // write data while (len--) { b_spi_txrx(*b++); } GPIO_enable(SPI_FLASH_GPIO_PORT, SPI_FLASH_GPIO_PIN); }
// Configure un port en alternate output push-pull (utilisation de PWM) char Port_IO_Init_Alternate_Output( GPIO_TypeDef * Port, u8 Broche) { GPIO_enable(Port); if (Broche > 7) { Broche -= 8; Port->CRH = (Port->CRH & ~(0xF << Broche*4))| (0b1010 << Broche*4); } else { Port->CRL = (Port->CRL & ~(0xF << Broche*4))| (0b1010 << Broche*4); } return 1; }
BOOTLOADER_TEXT void b_spif_read(u32_t addr, u8_t *b, u16_t len) { GPIO_disable(SPI_FLASH_GPIO_PORT, SPI_FLASH_GPIO_PIN); b_spi_txrx(0x03); // read b_spi_txrx((addr >> 16) & 0xff); b_spi_txrx((addr >> 8) & 0xff); b_spi_txrx((addr >> 0) & 0xff); // get data while (len--) { *b++ = b_spi_txrx(0xff); } GPIO_enable(SPI_FLASH_GPIO_PORT, SPI_FLASH_GPIO_PIN); }
void GPIO_mode(GPIO_pin_type pin, GPIO_mode_type mode) { // ignore unimplemented pins if (pin < 0 || pin >= SIZE_OF_ARRAY(gpio_info) || NULL == gpio_info[pin].name) { return; } switch (mode) { default: case GPIO_INPUT: if (gpio_info[pin].fd < 0 && !GPIO_enable(pin)) { return; } write_pin_file(GPIO_DIRECTION, pin, GPIO_DIRECTION_in "\n", CONST_STRLEN(GPIO_DIRECTION_in "\n")); write_pin_file(GPIO_ACTIVE_LOW, pin, "0\n", 2); write_pin_file(GPIO_EDGE, pin, GPIO_EDGE_none "\n", CONST_STRLEN(GPIO_EDGE_none "\n")); //write_pin_file(GPIO_STATE, pin, STATE_rxEnable_pullNone "\n", CONST_STRLEN(STATE_rxEnable_pullNone "\n")); break; case GPIO_OUTPUT: if (gpio_info[pin].fd < 0 && !GPIO_enable(pin)) { return; } write_pin_file(GPIO_DIRECTION, pin, GPIO_DIRECTION_out "\n", CONST_STRLEN(GPIO_DIRECTION_out "\n")); write_pin_file(GPIO_ACTIVE_LOW, pin, "0\n", 2); write_pin_file(GPIO_EDGE, pin, GPIO_EDGE_none "\n", CONST_STRLEN(GPIO_EDGE_none "\n")); //write_pin_file(GPIO_STATE, pin, STATE_rxDisable_pullNone "\n", CONST_STRLEN(STATE_rxDisable_pullNone "\n")); break; case GPIO_PWM: // only certain pins allowed if (gpio_info[pin].fd < 0 && !PWM_enable(pin)) { return; } break; } }
//Configure un port en input floating char Port_IO_Init_Input( GPIO_TypeDef * Port, u8 Broche) { u8 Decal; GPIO_enable(Port); //Broche 0..7 : config sur registre CRL if (Broche > 0 && Broche <= 7) { Decal = Broche * 4; Port->CRL = (Port->CRL & (~ (0xF << Decal))) | (0x4 << Decal); } //Broche sur 8..15 : config sur registre CRH else if (Broche > 7 && Broche <=15) { Decal = (Broche-8) * 4; Port->CRH = (Port->CRH & (~ (0xF << Decal))) | (0x4 << Decal); } //Numéro de broche incorrect else return 1; return 0; }
void gpio_enable(gpio_port port, gpio_pin pin) { GPIO_enable(io_ports[port], io_pins[pin]); }