int machine_init(void) { int i = 0; rcc_clock_setup_hse_3v3(&rcc_hse_25mhz_3v3); gpio_create(NULL, &gpio_led0); gpio_create(NULL, &gpio_button); /* UARTS */ for (i = 0; i < NUM_UARTS; i++) { uart_create(&uart_configs[i]); } /* I2Cs */ for (i = 0; i < NUM_I2CS; i++) { i2c_create(&i2c_configs[i]); } rng_create(1, RCC_RNG); sdio_conf.rcc_reg = (uint32_t *)&RCC_APB2ENR; sdio_conf.rcc_en = RCC_APB2ENR_SDMMC1EN; sdio_init(&sdio_conf); usb_init(&usb_guest); ethernet_init(ð_config); return 0; }
int machine_init(void) { int i; rcc_clock_setup_hse_3v3(&rcc_hse_8mhz_3v3[STM32_CLOCK]); gpio_create(NULL, &Led0); gpio_create(NULL, &Led1); /* Uarts */ for (i = 0; i < NUM_UARTS; i++) { uart_create(&uart_configs[i]); } /* I2Cs */ for (i = 0; i < NUM_I2CS; i++) { i2c_create(&i2c_configs[i]); } #ifdef CONFIG_DEVSTMPE811 stmpe811_init(&ts_conf); #endif rng_create(1, RCC_RNG); return 0; }
int main( int argc, const char *argv[] ) { gpio_config_t led_config; gpio_config_t btn_config; gpio_config_t dip_config; gpio_t leds; gpio_t btns; gpio_t dips; led_config.base = GPIOLED_BASEADDR; led_config.dual = 0; led_config.intr = 1; led_config.bits = 4; btn_config.base = GPIOBTN_BASEADDR; btn_config.dual = 0; btn_config.intr = 1; btn_config.bits = 5; dip_config.base = GPIODIP_BASEADDR; dip_config.dual = 0; dip_config.intr = 1; dip_config.bits = 4; gpio_create( &leds, &led_config ); gpio_create( &btns, &btn_config ); gpio_create( &dips, &dip_config ); gpio_test( &leds, &btns, &dips ); gpio_destroy( &leds ); gpio_destroy( &btns ); gpio_destroy( &dips ); return 0; }
int devspi_create(const struct spi_config *conf) { struct dev_spi *spi = NULL; if (!conf) return -EINVAL; if (conf->base == 0) return -EINVAL; if ((conf->idx < 0) || (conf->idx > MAX_SPIS)) return -EINVAL; spi = kalloc(sizeof(struct dev_spi)); if (!spi) return -ENOMEM; /* Claim pins for SCK/MOSI/MISO */ gpio_create(&mod_spi, &conf->pio_sck); gpio_create(&mod_spi, &conf->pio_mosi); gpio_create(&mod_spi, &conf->pio_miso); /* Erase spi content */ memset(spi, 0, sizeof(struct dev_spi)); /* Enable clocks */ rcc_periph_clock_enable(conf->rcc); rcc_periph_clock_enable(conf->dma_rcc); /* Startup routine */ //spi_disable(conf->base); /**********************************/ /* reset SPI1 */ spi_reset(conf->base); /* init SPI1 master */ spi_init_master(conf->base, SPI_CR1_BAUDRATE_FPCLK_DIV_64, SPI_CR1_CPOL_CLK_TO_0_WHEN_IDLE, SPI_CR1_CPHA_CLK_TRANSITION_1, SPI_CR1_DFF_8BIT, SPI_CR1_MSBFIRST); /* enable SPI1 first */ spi_enable(conf->base); /**********************************/ #if 0 spi_set_master_mode(conf->base); spi_set_baudrate_prescaler(conf->base, SPI_CR1_BR_FPCLK_DIV_256); /* TODO: Calculate prescaler from baudrate */ if(conf->polarity == 0) spi_set_clock_polarity_0(conf->base); else spi_set_clock_polarity_1(conf->base); if(conf->phase == 0) spi_set_clock_phase_0(conf->base); else spi_set_clock_phase_1(conf->base); if(conf->rx_only == 0) spi_set_full_duplex_mode(conf->base); else spi_set_receive_only_mode(conf->base); if(conf->bidir_mode == 0) spi_set_unidirectional_mode(conf->base); else spi_set_bidirectional_mode(conf->base); if(conf->dff_16) spi_set_dff_16bit(conf->base); else spi_set_dff_8bit(conf->base); if(conf->enable_software_slave_management) spi_enable_software_slave_management(conf->base); else spi_disable_software_slave_management(conf->base); if(conf->send_msb_first) spi_send_msb_first(conf->base); else spi_send_lsb_first(conf->base); spi_set_nss_high(conf->base); #endif /* Set up device struct */ spi->base = conf->base; spi->irq = conf->irq; //spi->tx_dma_config = &conf->tx_dma; //spi->rx_dma_config = &conf->rx_dma; spi->mutex = mutex_init(); /* Store address in the DEV_SPI array. */ DEV_SPI[conf->idx] = spi; /* Enable interrupts */ //nvic_set_priority(conf->irq, 1); //nvic_enable_irq(conf->irq); return 0; }