From 8c7ee88332652e7e79f6c1e4baacabe2183f7e8e Mon Sep 17 00:00:00 2001 From: root Date: Tue, 2 Mar 2021 12:54:03 +0000 Subject: working, with hybrid FLL/PLL, new refclk input and support for max7219 displays, neo 5 and neo 7 and a bazillion other fixes --- app/msf.c | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) (limited to 'app/msf.c') diff --git a/app/msf.c b/app/msf.c index ab85cfe..bf7c376 100644 --- a/app/msf.c +++ b/app/msf.c @@ -42,6 +42,7 @@ void exti_t_isr (void) exti_reset_request (EXTI_T); msf_ring.events[msf_ring.tx_ptr].when = now; + msf_ring.events[msf_ring.tx_ptr].ptp = ptp_get(); msf_ring.events[msf_ring.tx_ptr].value = v; msf_ring.tx_ptr = (msf_ring.tx_ptr + 1) & ERING_MASK; @@ -79,7 +80,7 @@ static int check_min_ident (uint8_t *i) -static void process_bits (uint64_t abs) +static void process_bits (uint64_t abs, uint64_t ptp) { UTC u; EPOCH e; @@ -112,7 +113,7 @@ static void process_bits (uint64_t abs) msf_last_happy = make_happy (abs, 0); - pll_set_offset (e, abs); + pll_set_offset (e, abs, ptp); dump_bits ("msfa", bitsa); dump_bits ("msfb", bitsb); @@ -126,14 +127,14 @@ static void process_bits (uint64_t abs) } -static void report_bits (uint64_t abs, int second, int a, int b) +static void report_bits (uint64_t abs, uint64_t ptp, int second, int a, int b) { if ((!second) || (second > 59)) return; bitsa[second] = a; bitsb[second] = b; - if (second == 59) process_bits (abs); + if (second == 59) process_bits (abs, ptp); } @@ -146,6 +147,7 @@ void msf_dispatch (void) int is_s = 0; uint32_t now; + uint64_t ptp; int v; @@ -153,6 +155,7 @@ void msf_dispatch (void) v = msf_ring.events[msf_ring.rx_ptr].value; now = msf_ring.events[msf_ring.rx_ptr].when; + ptp = msf_ring.events[msf_ring.rx_ptr].ptp; led1_set (v); @@ -160,8 +163,8 @@ void msf_dispatch (void) #if 0 { - abs = abs_extend (now); - EPOCH e = pll_decompose (abs); + abs = ref_extend (now); + EPOCH e = ref_decompose (abs); UTC u = time_epoch_to_utc (e); printf (" MSF %d %02d:%02d.%06d\r\n", v, u.minute, u.second, (int) (u.nanosecond / 1000)); @@ -198,16 +201,16 @@ void msf_dispatch (void) if (is_s) { - abs = abs_extend (now); + abs = ref_extend (now); msf_last_second = abs; - pll_dispatch (msf_last_happy, abs, "MSF"); + pll_dispatch (msf_last_happy, abs, ptp, "MSF"); sprintf (msf_info, "m=%d s=%02d b=%d%d", had_m, second, bita, bitb); if (had_m) { - report_bits (abs, second, bita, bitb); + report_bits (abs, ptp, second, bita, bitb); second++; } -- cgit v1.2.3