XGPIO_Interrupt_Clear

Gast #2752435
Lesenswert?
• ▲
▼
Hallo,

ich möchte auch meinem Xilinx FPGA-Board einen Druckknopf als 
Interrupt-Auslöser verwenden.

Soweit klappt das auch; allerdings nur für genau einen Interrupt.
Also, ich drücke, und es kommt die gewünschte Ausgabe "Gott, bist du 
schön".
Ein weiterer Druck auf den Knopf bleibt aber folgenlos.

Ich dachte, XGPIO_Interrupt_clear(..) würde das Ende des Interrupt 
anzeigen, scheint aber ohne Einfluss zu sein. Mit oder ohne 
XGPIO_Interrupt_Clear(..) kann ich den Interrupt nur einmal aufrufen.
1
void print_west(){
2
   xil_printf("west\n\r");
3
   XGpio_InterruptClear( &gpio_PUSH_0, XGPIO_IR_MASK);
4
    }

Wie kann ich den Interrupt beliebig häufig aufrufen?
Gast #2752455
Lesenswert?
• ▲
▼
Daß es problematisch ist weiß und verstehe ich nicht.
Aber ich habe schon gehört, daß Polling schöner wäre.

Aber dann bräuchte ich wieder Threads, die miteinander kommunizieren, 
oder?

Ich probiere es erstmal mit den Interrupts. Wenn ich/wir eine Lösung 
finden...
Gast #2752520
Lesenswert?
• ▲
▼
XGpio_DiscreteRead(&IntC,1); damit kann man register auslesen soweit ich 
weiss den offset musst du aus dem interruptcontroller data sheet suchen 
und dann kannst es per uart ausgeben und gucken welche interrupts aktiv 
sind

im datasheet wird ist sicher auch beschrieben welches register du 
ansprechen musst um interrupts zu bestätigen ich weiss nicht mehr genau 
wie das ging ist etwas her
Gast #2752620
Lesenswert?
• ▲
▼
Es will noch nicht so ganz...

1
void print_west(){
2

3
     xil_printf("west\n\r");
4

5
     XGpio_InterruptClear( &gpio_PUSH_0, XGPIO_IR_MASK);
6
     XIntc_Acknowledge( &InterruptController, XPAR_INTC_0_GPIO_0_VEC_ID);
7
      }
Gast #2752690
Lesenswert?
• ▲
▼
Ich habe jetzt das GPIO-Register ausgelesen.
Tatsächlich bleibt der Interrupt immer gesetzt.
XGPIO_Clear() bewirkt nichts.

Ich habe auch versucht manuell mit XGPIO_DiscreteWrite( &gpio, channel 
1, Data 0) das Register zu säubern. Komischerweise kann ich auch nichts 
reinschreiben.

Ich kann keinen Fehler erkennen.

Hier mal meine system.mhs
1
PORT Push_Button0_GPIO_IO_pin = Push_Button0_GPIO_IO, DIR = IO
2
 
3
BEGIN xps_gpio
4
 PARAMETER INSTANCE = Push_Button_0
5
 PARAMETER HW_VER = 2.00.a
6
 PARAMETER C_INTERRUPT_PRESENT = 1
7
 PARAMETER C_BASEADDR = 0x00040000
8
 PARAMETER C_HIGHADDR = 0x000401FF
9
 PARAMETER C_GPIO_WIDTH = 1
10
 PARAMETER C_IS_DUAL = 0
11
 BUS_INTERFACE SPLB = mb_plb
12
 PORT GPIO_IO = Push_Button0_GPIO_IO
13
 PORT IP2INTC_Irpt = Push_Button0_IP2INTC_Irpt
14
END

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren