diff --git a/src/temp_sensor.c b/src/temp_sensor.c index 0df956e..6c65ad7 100644 --- a/src/temp_sensor.c +++ b/src/temp_sensor.c @@ -72,7 +72,6 @@ static fxp_t calc_temperature_ntc(uint16_t adc_val) return fxp_sub(temp_k, celsius2kelvin); } - void temp_sensor_init(void) { uint8_t channels[ADC_NUM_CHANNELS] = { @@ -155,3 +154,58 @@ fxp_t temp_sensor_get_internal_temperature(void) { return m_temperature_internal; } + + + +// BEGIN temporary import from libopencm3 + +void adc_set_regular_sequence(uint32_t adc, uint8_t length, uint8_t channel[]) +{ + uint32_t reg32 = 0; + uint8_t i = 0; + bool stepup = false, stepdn = false; + + if (length == 0) { + ADC_CHSELR(adc) = 0; + return; + } + + reg32 |= (1 << channel[0]); + + for (i = 1; i < length; i++) { + reg32 |= (1 << channel[i]); + stepup |= channel[i-1] < channel[i]; + stepdn |= channel[i-1] > channel[i]; + } + + /* Check, if the channel list is in order */ + if (stepup && stepdn) { + //cm3_assert_not_reached(); + } + + /* Update the scan direction flag */ + if (stepdn) { + ADC_CFGR1(adc) |= ADC_CFGR1_SCANDIR; + } else { + ADC_CFGR1(adc) &= ~ADC_CFGR1_SCANDIR; + } + + ADC_CHSELR(adc) = reg32; +} + +/*---------------------------------------------------------------------------*/ +/** @brief ADC Set the Sample Time for All Channels + * + * The sampling time can be selected in ADC clock cycles from 1.5 to 239.5, + * same for all channels. + * + * @param[in] adc Unsigned int32. ADC base address (@ref adc_reg_base) + * @param[in] time Unsigned int8. Sampling time selection (@ref adc_api_smptime) + */ + +void adc_set_sample_time_on_all_channels(uint32_t adc, uint8_t time) +{ + ADC_SMPR1(adc) = time; +} + +// END temporary import from libopencm3