From eebed918e904dad99d1d912b86e928564d0f0a46 Mon Sep 17 00:00:00 2001 From: Richard Meadows Date: Sun, 15 Mar 2015 21:35:42 +0000 Subject: [PATCH] Measure error of xosc in hz relative to gps timepulse --- firmware/src/main.c | 4 +++- firmware/src/xosc.c | 13 ++++++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/firmware/src/main.c b/firmware/src/main.c index 22d2e11..d0ab5d4 100644 --- a/firmware/src/main.c +++ b/firmware/src/main.c @@ -291,7 +291,9 @@ void init(void) void xosc_measure_callback(uint32_t result) { - result++; + int32_t error = result - XOSC_FREQUENCY; + + error++; } uint8_t telemetry_trigger_flag = 0; diff --git a/firmware/src/xosc.c b/firmware/src/xosc.c index fc7e426..aa7c9f7 100644 --- a/firmware/src/xosc.c +++ b/firmware/src/xosc.c @@ -235,6 +235,7 @@ void measure_xosc_disable(enum xosc_measurement_t measurement_t) { */ void TC2_Handler(void) { uint32_t capture_value; + uint32_t source_freq; if (tc_get_status(TC2) & TC_STATUS_CHANNEL_0_MATCH) { tc_clear_status(TC2, TC_STATUS_CHANNEL_0_MATCH); @@ -247,9 +248,19 @@ void TC2_Handler(void) { /* Measurement done. Read off data */ capture_value = tc_get_capture_value(TC2, 0); + /* Calcuate the frequency of XOSC relative to this source */ + switch (_measurement_t) { + case XOSC_MEASURE_OSC8M: + source_freq = capture_value * XOSC_COUNT_RESOLUTION; + break; + case XOSC_MEASURE_TIMEPULSE: + source_freq = capture_value * XOSC_COUNT_RESOLUTION * GPS_TIMEPULSE_FREQ; + break; + } + /* Callback if we have one */ if (_callback) { - _callback(capture_value * XOSC_COUNT_RESOLUTION); + _callback(source_freq); } /* Disable measurement system */