/** * @brief Initialize an ADC peripheral. * * Initializes the RCC clock line for the given peripheral. Resets * ADC device registers. * * @param dev ADC peripheral to initialize */ void adc_init(const adc_dev *dev) { rcc_clk_enable(dev->clk_id); #ifdef STM32F2 if(dev->clk_id == RCC_ADC1) { rcc_reset_dev(dev->clk_id); } #else rcc_reset_dev(dev->clk_id); #endif }
void adc_init(void) { rcc_set_prescaler(RCC_PRESCALER_ADC, RCC_ADCPRE_PCLK_DIV_6); rcc_clk_enable(RCC_ADC1); rcc_reset_dev(RCC_ADC1); ADC_CR1 = 0; ADC_CR2 = CR2_EXTSEL_SWSTART | CR2_EXTTRIG; // Software triggers conversions ADC_SQR1 = 0; /* Up the sample conversion time to 55.5 cycles/sec, see note above */ /* TODO: fix magic numbers */ ADC_SMPR1 = 0xB6DB6D; ADC_SMPR2 = 0x2DB6DB6D; /* Enable the ADC */ CR2_ADON_BIT = 1; /* Reset the calibration registers and then perform a reset */ CR2_RSTCAL_BIT = 1; while(CR2_RSTCAL_BIT) ; CR2_CAL_BIT = 1; while(CR2_CAL_BIT) ; }
void usart_release(usart_num num) { const usart_dev *dev = usart_get_dev(num); rcc_reset_dev(dev->clk_id); nvic_irq_disable(dev->irq); usart_set_unused(num); }
/** * @brief Initialize the digital to analog converter * @param dev DAC device * @param flags Flags: * DAC_CH1: Enable channel 1 * DAC_CH2: Enable channel 2 * @sideeffect May set PA4 or PA5 to INPUT_ANALOG */ void dac_init(const dac_dev *dev, uint32 flags) { /* First turn on the clock */ rcc_clk_enable(RCC_DAC); rcc_reset_dev(RCC_DAC); if (flags & DAC_CH1) { dac_enable_channel(dev, 1); } if (flags & DAC_CH2) { dac_enable_channel(dev, 2); } }
/** * @brief Initialize an I2C device and reset its registers to their * default values. * @param dev Device to initialize. */ void i2c_init(i2c_dev *dev) { rcc_reset_dev(dev->clk_id); rcc_clk_enable(dev->clk_id); _i2c_irq_priority_fixup(dev); }
/** * @brief Initialize and reset the SDIO device. */ void sdio_init(void) { rcc_clk_enable(RCC_SDIO); rcc_reset_dev(RCC_SDIO); }
/** * @brief Initialize and reset a SPI device. * @param dev Device to initialize and reset. */ void spi_init(spi_dev *dev) { rcc_clk_enable(dev->clk_id); rcc_reset_dev(dev->clk_id); }
/** * @brief Initialize an I2C device and reset its registers to their * default values. * @param dev Device to initialize. */ void i2c_init(i2c_dev *dev) { rcc_reset_dev(dev->clk_id); rcc_clk_enable(dev->clk_id); }
/** * Initialize a timer, and reset its register map. * @param dev Timer to initialize */ void timer_init(timer_dev *dev) { rcc_clk_enable(dev->clk_id); rcc_reset_dev(dev->clk_id); }
/** * @brief Initialize an ADC peripheral. * * Initializes the RCC clock line for the given peripheral. Resets * ADC device registers. * * @param dev ADC peripheral to initialize */ void adc_init(const adc_dev *dev) { rcc_clk_enable(dev->clk_id); rcc_reset_dev(dev->clk_id); }
/** * @brief Initialize a CAN peripheral. * * Initializes the RCC clock line for the given peripheral. Resets * CAN device registers. * * @param dev CAN peripheral to initialize */ void can_init(can_dev* const dev) { rcc_clk_enable(dev->clk_id); rcc_reset_dev(dev->clk_id); }