From 1eddb799238e24613935ec59410e8d1d58682ba3 Mon Sep 17 00:00:00 2001
From: Michael Dryden <mdryden@chem.utoronto.ca>
Date: Wed, 4 Feb 2015 19:00:25 -0500
Subject: [PATCH] experiment: changed set_timer_period to return divider used

---
 DSTAT-temp/src/experiment.c | 27 ++++++++++++++++++---------
 DSTAT-temp/src/experiment.h |  2 +-
 2 files changed, 19 insertions(+), 10 deletions(-)

diff --git a/DSTAT-temp/src/experiment.c b/DSTAT-temp/src/experiment.c
index 53070d1..d8a11e7 100644
--- a/DSTAT-temp/src/experiment.c
+++ b/DSTAT-temp/src/experiment.c
@@ -75,43 +75,52 @@ void send_data_int32(int32_t data){
 	udi_cdc_putc(((unsigned char *)(&data))[3]);
 }
 
-void set_timer_period(uint32_t period, volatile void *tc)
+uint16_t set_timer_period(uint32_t period, volatile void *tc)
 {
+	/**
+	 * Sets a suitable timer source and sets period for a 16-bit timer
+	 *
+	 * @param period 32-bit period in CPU cycles
+	 * @param *tc pointer to timer to set
+	 * @return divider used.
+	 */
 	uint16_t temp_div = ceil((double)period/65536);
+	uint16_t divider = 0;
 	
 	if (temp_div == 1)
 	tc_write_clock_source(tc, TC_CLKSEL_DIV1_gc);
 	else if (temp_div == 2){
 		tc_write_clock_source(tc, TC_CLKSEL_DIV2_gc);
-		period /= 2;
+		divider = 2;
 	}
 	else if (temp_div <= 4){
 		tc_write_clock_source(tc, TC_CLKSEL_DIV4_gc);
-		period /= 4;
+		divider = 4;
 	}
 	else if (temp_div <= 8){
 		tc_write_clock_source(tc,TC_CLKSEL_DIV8_gc);
-		period /= 8;
+		divider = 8;
 	}
 	else if (temp_div <= 64){
 		tc_write_clock_source(tc,TC_CLKSEL_DIV64_gc);
-		period /= 64;
+		divider = 64;
 	}
 	else if (temp_div <= 256){
 		tc_write_clock_source(tc,TC_CLKSEL_DIV256_gc);
-		period /= 256;
+		divider = 256;
 	}
 	else if (temp_div <= 1024){
 		tc_write_clock_source(tc,TC_CLKSEL_DIV1024_gc);
-		period /= 1024;
+		divider = 1024;
 	}
 	else{
 		printf("#Frequency/ADC rate is too low\n\r");
-		return;
+		return 0;
 	}
 	
+	period /= divider;
 	tc_write_period(tc, (uint16_t)period);
-	return;
+	return divider;
 }
 
 void pot_init(void){
diff --git a/DSTAT-temp/src/experiment.h b/DSTAT-temp/src/experiment.h
index b52a58e..8b1ab53 100644
--- a/DSTAT-temp/src/experiment.h
+++ b/DSTAT-temp/src/experiment.h
@@ -77,7 +77,7 @@ extern uint8_t autogain_enable;
 
 void send_data_uint16(uint16_t data);
 void send_data_int32(int32_t data);
-void set_timer_period(uint32_t period, volatile void *tc);
+uint16_t set_timer_period(uint32_t period, volatile void *tc);
 void pot_init(void);
 void pot_set_gain(void);
 void volt_exp_start(void);
-- 
GitLab