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