diff options
Diffstat (limited to 'app/main.c')
-rw-r--r-- | app/main.c | 140 |
1 files changed, 92 insertions, 48 deletions
@@ -17,37 +17,73 @@ void exti15_10_isr (void) -static void cmd_dispatch (void) +static void process_key (uint8_t c) { - uint8_t c; - while (!ring_read_byte (&rx2_ring, &c)) { + static int unlocked; + static unsigned unlock_sm; + static uint8_t unlock[] = "unlock"; + + if (!unlocked) { + if (c == unlock[unlock_sm]) { + unlock_sm++; + + if (!unlock[unlock_sm]) { + unlocked++; + printf ("Serial now unlocked\n"); + } - printf ("KEY> %c\r\n", c); + return; - switch (c) { - case 'R': - scb_reset_system(); + } else { + unlock_sm = 0; + printf ("serial locked type unlock to unlock\r\n"); + return; + } + } - break; - case 'G': - gps_reset(); - break; + printf ("KEY> %c\r\n", c); + + + switch (c) { + case 'R': + scb_reset_system(); + break; + + case 'G': + gps_reset(); + break; + + case 'I': + gps_bs(); + break; + + case 'A': + //gps_almanac(); + gps_dump_almanac(); + break; + + case 'D': + break; - case 'I': - gps_bs(); - break; - case 'A': - //gps_almanac(); - gps_dump_almanac(); - break; - } } } +static void cmd_dispatch (void) +{ + uint8_t c; + + while (!ring_read_byte (&usart2_rx_ring, &c)) + process_key (c); + + while (!ring_read_byte (&cdcacm_rx_ring, &c)) + process_key (c); + +} + #if 0 static void pd_port (uint32_t p) { @@ -271,37 +307,20 @@ static void clock_setup (void) #define REFCLK_OUT (GPIO8) #define REFCLK_OUT_PORT GPIOA -#define REFCLK_IN (GPIO7) -#define REFCLK_IN_PORT GPIOE static void timer_setup (void) { MAP_INPUT (REFCLK_OUT); - MAP_INPUT (REFCLK_IN); MAP_AF (REFCLK_OUT, GPIO_AF0); - MAP_AF (REFCLK_IN, GPIO_AF1); - #if 0 - /* Divide by 2 to trigger TIM2 */ - timer_reset (TIM1); - timer_set_mode (TIM1, TIM_CR1_CKD_CK_INT, TIM_CR1_CMS_EDGE, TIM_CR1_DIR_UP); - timer_set_master_mode (TIM1, TIM_CR2_MMS_UPDATE); - timer_set_period (TIM1, 1); - timer_slave_set_filter (TIM1, TIM_SMCR_ETF_OFF); - timer_slave_set_prescaler (TIM1, TIM_SMCR_ETPS_OFF); - TIM1_SMCR |= TIM_SMCR_ECE; - timer_enable_counter (TIM1); + /*Old scheme 10MHz -> TIM1 ETR -> TIM2 */ - timer_reset (TIM2); - timer_set_mode (TIM2, TIM_CR1_CKD_CK_INT, TIM_CR1_CMS_EDGE, TIM_CR1_DIR_UP); - timer_slave_set_filter (TIM2, TIM_SMCR_ETF_OFF); /*no filter*/ - timer_slave_set_prescaler (TIM2, TIM_SMCR_ETPS_OFF); /*no prescaler */ - timer_slave_set_polarity (TIM2, TIM_ET_RISING); /*rising edge */ - timer_slave_set_mode (TIM2, TIM_SMCR_SMS_ECM1); /*external clock mode 1*/ - timer_slave_set_trigger (TIM2, TIM_SMCR_TS_ITR0); /*clock from timer 1*/ - timer_enable_counter (TIM2); -#endif +#define REFCLK_IN (GPIO7) +#define REFCLK_IN_PORT GPIOE + + MAP_INPUT (REFCLK_IN); + MAP_AF (REFCLK_IN, GPIO_AF1); @@ -338,6 +357,26 @@ static void timer_setup (void) timer_slave_set_mode (TIM2, TIM_SMCR_SMS_ECM1); /*external clock mode 1*/ timer_slave_set_trigger (TIM2, TIM_SMCR_TS_ITR0); /*clock from timer 1*/ timer_enable_counter (TIM2); +#else + /* New Scheme 10MHz -> TIM2_ETR */ + +#define REFCLK_IN (GPIO15) +#define REFCLK_IN_PORT GPIOA + + MAP_INPUT (REFCLK_IN); + MAP_AF (REFCLK_IN, GPIO_AF1); + + + timer_reset (TIM2); + timer_set_mode (TIM2, TIM_CR1_CKD_CK_INT, TIM_CR1_CMS_EDGE, TIM_CR1_DIR_UP); /* count up with clock*/ + timer_slave_set_filter (TIM2, TIM_SMCR_ETF_OFF); /*no filter*/ + timer_slave_set_prescaler (TIM2, TIM_SMCR_ETPS_OFF); /*no prescaler */ + timer_slave_set_polarity (TIM2, TIM_ET_RISING); /*rising edge */ + timer_slave_set_mode (TIM2, TIM_SMCR_SMS_ECM1); /*external clock mode 1*/ + timer_slave_set_trigger (TIM2, TIM_SMCR_TS_ETRF); /*Trigger from ETRF input */ + timer_enable_counter (TIM2); +#endif + } @@ -412,12 +451,14 @@ system_init (void) ptp_clock_start(); - max7219_init (1, 8); - + max7219_init (1); + max7219_dispatch(); gps_init(); ntp_init(); + adc_init(); + } @@ -435,8 +476,8 @@ main (void) while (1) { uint32_t now = HW_CLOCK_REG; - uint64_t abs = abs_extend (now); - EPOCH e = pll_decompose (abs); + uint64_t abs = ref_extend (now); + EPOCH e = ref_decompose (abs); time_print_epoch ("TEST: ", e); delay_ms (100); } @@ -449,8 +490,8 @@ main (void) #if 0 { uint32_t now = HW_CLOCK_REG; - uint64_t abs = abs_extend (now); - EPOCH e = pll_decompose (abs); + uint64_t abs = ref_extend (now); + EPOCH e = ref_decompose (abs); time_print_epoch ("TEST: ", e); delay_ms (100); } @@ -467,6 +508,9 @@ main (void) dispatch_lwip(); max7219_dispatch(); + adc_dispatch(); + + pll_check(); } |