@@ -68,6 +68,9 @@ PIO pio_to_use;
6868static mutex_t status_mutex;
6969static mutex_t wait_mutex;
7070
71+ // SIO GPIO init status
72+ int gpio_inited = 0 ;
73+
7174// STATUS flag
7275int status;
7376#define STOPPED 0
@@ -667,12 +670,17 @@ void core1_entry()
667670
668671void configure_gpio ()
669672{
670- configure_missing_pins ();
671- // initialise output pin. Needs to be done after state machine has run
672- for (int i = 0 ; i < num_pseudoclocks_in_use; i++)
673+ if (!gpio_inited)
673674 {
674- gpio_init (OUT_PINS[i]);
675- gpio_set_dir (OUT_PINS[i], GPIO_OUT);
675+ configure_missing_pins ();
676+ // initialise output pin. Needs to be done after state machine has run
677+ for (int i = 0 ; i < num_pseudoclocks_in_use; i++)
678+ {
679+ gpio_init (OUT_PINS[i]);
680+ gpio_set_dir (OUT_PINS[i], GPIO_OUT);
681+ }
682+ // update inited state
683+ gpio_inited = 1 ;
676684 }
677685}
678686
@@ -1032,6 +1040,8 @@ void loop()
10321040 multicore_fifo_push_blocking (1 );
10331041 // update status
10341042 set_status (TRANSITION_TO_RUNNING);
1043+ // update gpio inited status
1044+ gpio_inited = 0 ;
10351045 fast_serial_printf (" ok\r\n " );
10361046 }
10371047 else if ((strncmp (readstring, " start" , 5 ) == 0 ))
@@ -1046,6 +1056,8 @@ void loop()
10461056 multicore_fifo_push_blocking (0 );
10471057 // update status
10481058 set_status (TRANSITION_TO_RUNNING);
1059+ // update gpio inited status
1060+ gpio_inited = 0 ;
10491061 fast_serial_printf (" ok\r\n " );
10501062 }
10511063 // TODO: update this to support pseudoclock selection
0 commit comments