palEnablePadEvent(GPIOA, 7, PAL_EVENT_MODE_BOTH_EDGES);
palEnablePadEvent(GPIOA, 9, PAL_EVENT_MODE_BOTH_EDGES);
palEnablePadEvent(GPIOA, 10, PAL_EVENT_MODE_BOTH_EDGES);
- palSetPadCallback(GPIOA, 0, buttonStateHandler, 0x0700);
- palSetPadCallback(GPIOA, 1, buttonStateHandler, 0x0601);
- palSetPadCallback(GPIOA, 2, buttonStateHandler, 0x0502);
- palSetPadCallback(GPIOA, 3, buttonStateHandler, 0x0403);
- palSetPadCallback(GPIOA, 6, buttonStateHandler, 0x0306);
- palSetPadCallback(GPIOA, 7, buttonStateHandler, 0x0207);
- palSetPadCallback(GPIOA, 9, buttonStateHandler, 0x0109);
- palSetPadCallback(GPIOA, 10, buttonStateHandler, 0x000A);
+ palSetPadCallback(GPIOA, 0, buttonStateHandler, (void *)0x0700);
+ palSetPadCallback(GPIOA, 1, buttonStateHandler, (void *)0x0601);
+ palSetPadCallback(GPIOA, 2, buttonStateHandler, (void *)0x0502);
+ palSetPadCallback(GPIOA, 3, buttonStateHandler, (void *)0x0403);
+ palSetPadCallback(GPIOA, 6, buttonStateHandler, (void *)0x0306);
+ palSetPadCallback(GPIOA, 7, buttonStateHandler, (void *)0x0207);
+ palSetPadCallback(GPIOA, 9, buttonStateHandler, (void *)0x0109);
+ palSetPadCallback(GPIOA, 10, buttonStateHandler, (void *)0x000A);
}
#define STM32_LSI_ENABLED TRUE\r
#define STM32_HSE_ENABLED FALSE\r
#define STM32_LSE_ENABLED FALSE\r
-//#define STM32_ADC_CLOCK_ENABLED FALSE\r
-#define STM32_MSIRANGE STM32_MSIRANGE_4M\r
-#define STM32_SW STM32_SW_HSI16\r
+#define STM32_ADC_CLOCK_ENABLED TRUE\r
+#define STM32_MSIRANGE STM32_MSIRANGE_512K\r
+#define STM32_SW STM32_SW_MSI\r
#define STM32_PLLSRC STM32_PLLSRC_HSI16\r
#define STM32_PLLMUL_VALUE 4\r
#define STM32_PLLDIV_VALUE 2\r
-#define STM32_HPRE STM32_HPRE_DIV4\r
+#define STM32_HPRE STM32_HPRE_DIV1\r
#define STM32_PPRE1 STM32_PPRE1_DIV1\r
#define STM32_PPRE2 STM32_PPRE2_DIV1\r
#define STM32_MCOSEL STM32_MCOSEL_NOCLOCK\r
* - Can read buttons through PAL (through interrupts now)
* - Use ADC to read Vintref, print to screen in mV
* - Sleep mode via WFI, saves ~0.5mA (we're running around 1.1mA)
+ * - Run at 512kHz, only use HSI for ADC: 360uA
*/
static volatile bool adc_is_complete = false;
-static void adc_callback(ADCDriver *adcp)
+static void adc_callback(ADCDriver *adcd)
{
+ (void)adcd;
adc_is_complete = true;
}
{
adcsample_t reading = 0;
+ RCC->CR |= RCC_CR_HSION;
+ while (!(RCC->CR & RCC_CR_HSIRDY));
+
adcStart(&ADCD1, &adccfg);
adcSTM32EnableVREF(&ADCD1);
adcStartConversion(&ADCD1, &adcgrpcfg, &reading, 1);
adcSTM32DisableVREF(&ADCD1);
adcStop(&ADCD1);
+ RCC->CR &= ~RCC_CR_HSION;
+
return 3000 * /* CAL */ *((adcsample_t *)0x1FF80078) / reading;
}
{
halInit();
chSysInit();
- RCC->CFGR |= RCC_CFGR_STOPWUCK;
+
+ RCC->CR &= ~RCC_CR_HSION;
buttons_init();