2013-02-27 12 views
6

Ich bin ein Anfänger in Embedded-Programmierung. Ich arbeite am Crane Board (ARM Cortex A8). Der Quellcode ist verfügbar unter github.Eingebettet: C Codierung für Ctrl-C-Interrupt in U-Boot-Terminal

Ich habe einen C-Code erstellt, um eine externe LED über GPIO verbunden zu machen, um zu blinken. Es kann in der U-Boot-Konsole als Befehl ausgeführt werden. Momentan

Ich kann das Blinken der LED nicht mit Ctrl-C stoppen.
Wo befindet sich die Codierung für Ctrl-C Interrupt?

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); 
      } 

     } 
} 

Bitte führen Sie mich.

+0

Zeigen Sie Ihren Code, Sie können nicht erwarten, dass wir Ihnen helfen, einen Fehler zu finden, wenn wir nicht wissen, was Sie getan haben. – harald

+0

Hat Ihr Konsoleneingang eine RS232-ähnliche Verbindung oder ist eine USB- oder PS/2-Tastatur angeschlossen? –

+0

@MartinThompson Ja. Die Karte ist über UART verbunden. – Gomu

Antwort

3

Versuchen Sie, die uboot ctrlc Funktion:

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

Danke. Aber mein Code sendet kontinuierlich Daten (1 oder 0) an den GPIO-Pin. Wie bekomme ich dazu einen Input? – Gomu

+0

@Gomu: Entschuldigung. Ich denke, U-Boot kann Strg + C über die 'ctrlc'-Funktion handhaben. Bitte sehen Sie die aktualisierte Antwort. – nneonneo

+0

Danke! Es funktionierte. – Gomu

1

Sie sind auf einem niedrigen Niveau arbeiten, so dass die Methoden, die Sie brauchen, sind zu verwenden, auch Low-Level:

  • die UART Check „Data- verfügbares Flag innerhalb Ihrer Schleife - dies ist sehr hardwareabhängig, beinhaltet aber normalerweise das Lesen eines Registers, das Maskieren einiger Bits und das Erkennen, ob das richtige Bit gesetzt ist.
  • wenn Daten verfügbar sind, zu überprüfen, um zu sehen, ob es ein CTRL-C (0x03) Charakter, Ausfahrt wenn ja, verwerfen, wenn nicht

jetzt gesehen nneonneo Antwort zu haben, nehme ich an, dass das, was die ctrlc() Funktion tut ...