Pin-Interrupt ISR soll Read auf Schnittstelle ausführen unter Linux

Gast #932126
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;
}
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
Gast
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

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.