2013-02-27 8 views
6

Sono un principiante nella programmazione integrata. Sto lavorando su craneboard (ARM Cortex A8). Il codice sorgente è disponibile allo github.Incorporato: codifica C per interrupt Ctrl-C nel terminale di avvio U

Ho creato un codice C per far lampeggiare un LED esterno collegato tramite GPIO. Può essere eseguito nella console u-boot come comando. Attualmente,

Non riesco a fermare il lampeggio del LED con Ctrl-C.
Dove si trova la codifica per l'interrupt Ctrl-C?

ret=set_mmc_mux(); 
if(ret<0) 
    printf("\n\nLED failed to glow!\n\n"); 
else{ 
     if(!omap_request_gpio(lpin)) 
    { 
     omap_set_gpio_direction(lpin,0); 

     for(i=1;i<21;i++) 
     { 
      ctr=0; 
      if((i%2)==0) 
      { 
       num=num-1; 
       omap_set_gpio_dataout(lpin,num); 
      } 
      else 
      { 
       num=num+1; 
       omap_set_gpio_dataout(lpin,num); 
      } 

        udelay(3000000); 
      } 

     } 
} 

Gentilmente guidami.

+0

Mostra il tuo codice, non puoi aspettarti che ti aiutiamo a trovare un errore a meno che non sappiamo cosa hai fatto. – harald

+0

La tua console ha in ingresso una connessione tipo RS232 o hai una tastiera USB o PS/2 collegata? –

+0

@MartinThompson Sì. La scheda è collegata tramite UART. – Gomu

risposta

3

Prova la funzione uboot ctrlc:

if(ctrlc()) 
    return 1; // or whatever else you want to do 
+0

Grazie. Ma il mio codice invierà continuamente dati (1 o 0) al pin GPIO. Come posso ottenere un input in questo? – Gomu

+0

@Gomu: scusa. Penso che U-Boot possa gestire Ctrl + C attraverso la funzione 'ctrlc'. Si prega di consultare la risposta aggiornata. – nneonneo

+0

Grazie! Ha funzionato. – Gomu

1

Si sta lavorando ad un livello basso, in modo che i metodi è necessario utilizzare sono anche di basso livello:

  • Controllare l'UART "dati- disponibile "flag all'interno del tuo loop - dipende molto dall'hardware, ma di solito comporta la lettura di un registro, la mascheratura di alcuni bit e la visualizzazione del bit corretto.
  • se i dati sono disponibili, controllare per vedere se si tratta di un CTRL-C (0x03) personaggio, l'uscita in caso affermativo, scartare se non

Avere la risposta di nneonneo ora visto, suppongo che è ciò che il La funzione ctrlc() fa ...