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
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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.