www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Pin-Interrupt ISR soll Read auf Schnittstelle ausführen unter Linux


Autor: Piwi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich habe ein kleines Problem.

Folgende Situation:
Ich möchte von meinem RFID Transceiver Daten über SPI (/dev/spi1) 
auslesen.
Ich habe ein Embedded Linux System (Kernel 2.6.21.7) mit ein AT91RM9200.

-Der RFID Transceiver schickt einen Interrupt (steigende Flanke), den 
ich an PA23 angeschlossen habe.
Nun müsste ich es irgendwie hinbekommen, die read-funktion für die SPI 
Schnittstelle aufzurufen.
Ich habe bereits einen kleinen Kernel Treiber geschrieben, der eine 
Vabriable, die bei Interrupteintritt geändert wird, in einer 
Endlosschleife abfragt. Jedoch dauert das ausführen und das polling zu 
lange.
Ist es vielleicht möglich einen Thread im User Space aufzuwecken, der 
dann die Read-Funktion auf meine SPI-Schnittstelle ausführt und 
anschließend wieder schlafen gelegt wird?


Wie könnte ich das realisieren? Oder gibt es bessere Möglichkeiten???
Für einen Tip wäre ich dankbar...
Vielen Dank im Voraus!!

//ISR für PIN23 Interrupt:
static irqreturn_t triggerFromIDS_irq(int irq, void *pDevId){
       idsirq.lastState = idsirq.currState; 
idsirq.currState = gpio_get_value(AT91_PIN_PA23);
       if(idsirq.lastState < idsirq.currState){ 
//auswertung steigende Flanke
           gpio_set_value(AT91_PIN_PA21, N_ON);
           gpio_set_value(AT91_PIN_PA18, N_ON);
           ...
           ...
           //auslesen über SPI

       }
       else
       if(idsirq.lastState > idsirq.currState)               //fallende 
Flanke
           gpio_set_value(AT91_PIN_PA18, N_OFF);
             return IRQ_HANDLED;
}

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wow, da kann man nicht meckern.
Wie kompliziert doch die einfachsten Sachen werden, wenn man sie auf nem 
32Bit-Boliden ausführen muß.

Gibts da nicht auch nen SPI-Interrupt?
Den gibts Du frei und läßt ihn den ganzen RFID-Kram machen.


Peter

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Weg in den User-Space kostet doch sicherlich mehr Zeit, als die 
Treiber untereinander benötigen?

Mein Ansatz wäre; SPI-Treiber direkt anpassen, dass dieser parallel zum 
SPI-Interrupt deinen PIN-Interrupt als Trigger zum lesen verwendet.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.