@@ -63,6 +63,9 @@ PIO pio_to_use;
6363static mutex_t status_mutex;
6464static mutex_t wait_mutex;
6565
66+ // SIO GPIO init status
67+ int gpio_inited = 0 ;
68+
6669// STATUS flag
6770int status;
6871#define STOPPED 0
@@ -703,12 +706,17 @@ void readline()
703706
704707void configure_gpio ()
705708{
706- configure_missing_pins ();
707- // initialise output pin. Needs to be done after state machine has run
708- for (int i = 0 ; i < num_pseudoclocks_in_use; i++)
709+ if (!gpio_inited)
709710 {
710- gpio_init (OUT_PINS[i]);
711- gpio_set_dir (OUT_PINS[i], GPIO_OUT);
711+ configure_missing_pins ();
712+ // initialise output pin. Needs to be done after state machine has run
713+ for (int i = 0 ; i < num_pseudoclocks_in_use; i++)
714+ {
715+ gpio_init (OUT_PINS[i]);
716+ gpio_set_dir (OUT_PINS[i], GPIO_OUT);
717+ }
718+ // update inited state
719+ gpio_inited = 1 ;
712720 }
713721}
714722
@@ -1078,6 +1086,8 @@ void loop()
10781086 multicore_fifo_push_blocking (1 );
10791087 // update status
10801088 set_status (TRANSITION_TO_RUNNING);
1089+ // update gpio inited status
1090+ gpio_inited = 0 ;
10811091 printf (" ok\n " );
10821092 }
10831093 else if ((strncmp (readstring, " start" , 5 ) == 0 ))
@@ -1092,6 +1102,8 @@ void loop()
10921102 multicore_fifo_push_blocking (0 );
10931103 // update status
10941104 set_status (TRANSITION_TO_RUNNING);
1105+ // update gpio inited status
1106+ gpio_inited = 0 ;
10951107 printf (" ok\n " );
10961108 }
10971109 // TODO: update this to support pseudoclock selection
0 commit comments