From 73e12bd0fdfc0f58212dbd248f7582f923240b62 Mon Sep 17 00:00:00 2001
From: Karl Palsson <karlp@tweak.net.au>
Date: Tue, 3 Nov 2015 23:21:44 +0000
Subject: f3 temp sensor working

---
 tests/adc-power/README.md            |  5 +++++
 tests/adc-power/adc-power.c          | 14 +++++++-------
 tests/adc-power/main-stm32f3-disco.c |  6 +++---
 3 files changed, 15 insertions(+), 10 deletions(-)

(limited to 'tests')

diff --git a/tests/adc-power/README.md b/tests/adc-power/README.md
index 7dbbe8a..7da8ad7 100644
--- a/tests/adc-power/README.md
+++ b/tests/adc-power/README.md
@@ -1,3 +1,8 @@
+
+For most boards, adc channels 1 and 5 are PA1 and PA5.
+
+Not the F3.  oh no, that board is cray cray.  PA0 and PF4
+
 https://github.com/libopencm3/libopencm3/pull/471
 https://github.com/libopencm3/libopencm3/pull/457
 https://github.com/libopencm3/libopencm3/pull/534
diff --git a/tests/adc-power/adc-power.c b/tests/adc-power/adc-power.c
index 4b591a6..db72a8e 100644
--- a/tests/adc-power/adc-power.c
+++ b/tests/adc-power/adc-power.c
@@ -21,10 +21,12 @@
 
 // Still have some bad shit to deal with...
 #if defined(STM32F3)
-#define SAMPLE_TIME_BASIC ADC_SMPR1_SMP_19DOT5CYC
+#define SAMPLE_TIME_BASIC ADC_SMPR1_SMP_181DOT5CYC
+#define SAMPLE_TIME_TEMP ADC_SMPR1_SMP_601DOT5CYC // 2.2usecs or more
+#define SAMPLE_TIME_VREF SAMPLE_TIME_TEMP
 #elif defined(STM32F4)
 #define SAMPLE_TIME_BASIC ADC_SMPR_SMP_28CYC
-#define SAMPLE_TIME_TEMP ADC_SMPR_SMP_144CYC
+#define SAMPLE_TIME_TEMP ADC_SMPR_SMP_144CYC // 10 usecs or more, in theory needs 840cycles!
 #define SAMPLE_TIME_VREF SAMPLE_TIME_TEMP
 #define ADC_CHANNEL_TEMP ADC_CHANNEL_TEMP_F40
 #define SEPARATE_VREF 0
@@ -50,13 +52,8 @@ void adc_power_init(void)
 	rcc_periph_clock_enable(RCC_ADC12);
 	rcc_adc_prescale(RCC_CFGR2_ADCxPRES_PLL_CLK_DIV_1, RCC_CFGR2_ADCxPRES_PLL_CLK_DIV_1);
 	adc_enable_regulator(ADC1);
-	adc_set_sample_time_on_all_channels(ADC1, ADC_SMPR1_SMP_19DOT5CYC);
 #else
 	rcc_periph_clock_enable(RCC_ADC1);
-	adc_set_sample_time_on_all_channels(ADC1, SAMPLE_TIME_BASIC);
-	adc_set_sample_time(ADC1, ADC_CHANNEL_TEMP, SAMPLE_TIME_TEMP);
-	adc_set_sample_time(ADC1, ADC_CHANNEL_TEMP, SAMPLE_TIME_VREF);
-
 #if 0
 	// DANGER DANGER! doing this without DMA is dum.
 	// but... we're busy polling, we should be right... right?
@@ -68,6 +65,9 @@ void adc_power_init(void)
 #endif
 	
 #endif
+	adc_set_sample_time_on_all_channels(ADC1, SAMPLE_TIME_BASIC);
+	adc_set_sample_time(ADC1, ADC_CHANNEL_TEMP, SAMPLE_TIME_TEMP);
+	adc_set_sample_time(ADC1, ADC_CHANNEL_TEMP, SAMPLE_TIME_VREF);
 	adc_enable_temperature_sensor();
 #if (SEPARATE_VREF == 1)
 	adc_enable_vrefint();
diff --git a/tests/adc-power/main-stm32f3-disco.c b/tests/adc-power/main-stm32f3-disco.c
index 277ca17..6ce40a8 100644
--- a/tests/adc-power/main-stm32f3-disco.c
+++ b/tests/adc-power/main-stm32f3-disco.c
@@ -102,8 +102,8 @@ int main(void)
 	printf("hi guys!\n");
 
 	rcc_periph_clock_enable(RCC_GPIOA);
-	gpio_mode_setup(GPIOA, GPIO_MODE_ANALOG, GPIO_PUPD_NONE, GPIO0);
 	gpio_mode_setup(GPIOA, GPIO_MODE_ANALOG, GPIO_PUPD_NONE, GPIO1);
+	gpio_mode_setup(GPIOA, GPIO_MODE_ANALOG, GPIO_PUPD_NONE, GPIO5);
 
 	adc_power_init();
 	for (i = 0; i < 0x1000; i++) { /* need as much as 10 usecs for vreg */
@@ -113,13 +113,13 @@ int main(void)
 		adc_power_task_up();
 		gpio_toggle(GPIOE, GPIO8);
 
-		for (i = 0; i < 0x800000; i++) { /* Wait a bit. */
+		for (i = 0; i < 0x100000; i++) { /* Wait a bit. */
 			__asm__("NOP");
 		}
 		printf("tick...\n");
 		adc_power_task_down();
 		gpio_toggle(GPIOE, GPIO8);
-		for (i = 0; i < 0x800000; i++) { /* Wait a bit. */
+		for (i = 0; i < 0x100000; i++) { /* Wait a bit. */
 			__asm__("NOP");
 		}
 	}
-- 
cgit