]> code.bitgloo.com Git - clyne/stm-game.git/commitdiff
hsi only for adc; run msi at 512k for 360uA
authorClyne Sullivan <clyne@bitgloo.com>
Mon, 30 Nov 2020 00:22:04 +0000 (19:22 -0500)
committerClyne Sullivan <clyne@bitgloo.com>
Mon, 30 Nov 2020 00:22:04 +0000 (19:22 -0500)
Makefile
buttons.c
cfg/mcuconf.h
main.c

index 128703df90d3a5f871acf27d4456351de05fa86d..4eb5c4090ca88c385f1b0ea7d77fdafc4cb46318 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -139,7 +139,7 @@ ASMXSRC = $(ALLXASMSRC)
 INCDIR = $(CONFDIR) $(ALLINC) $(TESTINC)\r
 \r
 # Define C warning options here.\r
-CWARN = -Wall -Wextra -Wundef -pedantic #-Wstrict-prototypes\r
+CWARN = -Wall -Wextra -Wundef -Wno-cpp #-Wstrict-prototypes\r
 \r
 # Define C++ warning options here.\r
 CPPWARN = -Wall -Wextra -Wundef\r
index c79249486eb84bbd16088732f9491c8f5af382a6..5605e69a8423227a0818239795b0509b5b0edc5e 100644 (file)
--- a/buttons.c
+++ b/buttons.c
@@ -47,13 +47,13 @@ void buttons_init()
     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);
 }
 
index 19caa57ebb546d98cc65b80d9219cb55de6617c6..a5809251a3e57ae47b2073fbc8bfd2a08a1a3fca 100644 (file)
 #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
diff --git a/main.c b/main.c
index 9d7001099e08d547d25ca283e65324859c0456fa..ffd5d3f879c182d9369c8155c68833ac84a45376 100644 (file)
--- a/main.c
+++ b/main.c
  *  - 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;
 }
 
@@ -49,6 +51,9 @@ static int readVddmv()
 {
     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);
@@ -57,6 +62,8 @@ static int readVddmv()
     adcSTM32DisableVREF(&ADCD1);
     adcStop(&ADCD1);
 
+    RCC->CR &= ~RCC_CR_HSION;
+
     return 3000 * /* CAL */ *((adcsample_t *)0x1FF80078) / reading;
 }
 
@@ -116,7 +123,8 @@ int main(void)
 {
     halInit();
     chSysInit();
-    RCC->CFGR |= RCC_CFGR_STOPWUCK;
+
+    RCC->CR &= ~RCC_CR_HSION;
 
     buttons_init();