mikrocontroller.net

Forum: FPGA, VHDL & Co. NIOSII io interrupts einbinden


Autor: Kleinerunistudent (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,
Ich habe da ein kleines Problem mit dem NIOS II Prozessor und zwar soll 
ich eine interrupt Routine aufrufen wenn ich einen von 2 Buttons Drücke 
in Quartus habe ich diese dann button_pio genannt. Ich habe soweit alles 
im SOPC Builder richtig eingestellt und mein Button IRQ ist 2.
Bloß weiß ich nicht wie der Aufruf in c aussehen muss ich habe folgendes 
geschrieben:
void init_button()
{

printf("\nButton Initializing interrupts\n");
alt_irq_init(BUTTON_PIO_IRQ); 
alt_irq_register(BUTTON_PIO_IRQ, 0, button_function);

}

Wobei "button_function" die function ist welche bei einem interrupt 
aufgerufen werden soll. Leider Passiert dieses nicht.

Über Hilfe währe ich dank bar.

Mit Freundlichem Gruß,

Kleinerunistudent

Autor: Ben (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
poste doch mal deine isr, dort liegt sicherlich der Bock begraben !
Ben

Autor: SeriousSam (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist der PIO auch richtig konfiguriert? Der hat noch eine Interruptmask.

Autor: Kleinerunistudent (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Ben
wo finde ich den isr ? weiß grade nicht ganz so was das sein soll ?

@SeriousSam
wo kann ich den sehen ob der interrupt richtig konfiguriert ist ?
interruptmask? muss ich die noch einbinden ?

Autor: Kleinerunistudent (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Leute,

habe mich jetzt etwas schlaugemacht über die interrupts und die ISR mein 
problem ist jetzt folgendes er initializiert die isr erst wenn ich einen 
knopf drücke(?) und das Lauflicht läuft erst los wenn ich denn knopf 
andauernt festhalte und dann auch nur in eine richtung. Ich habe 
folgenden Code :
---> Main
int main(void)
{
init_button_pio();

   while(1)
  {
    led_function();
  }
return 0;
}
---> isr
// An ISR to Service a Button PIO Interrupt
#ifdef ALT_ENHANCED_INTERRUPT_API_PRESENT
static void button_function(void* context)
#else
static void button_function(void* context, alt_u32 id)
#endif
{

  volatile int* edge_capture_ptr = (volatile int*) context;

  *edge_capture_ptr = IORD_ALTERA_AVALON_PIO_EDGE_CAP(BUTTON_PIO_BASE);

  IOWR_ALTERA_AVALON_PIO_EDGE_CAP(BUTTON_PIO_BASE,0);

  IORD_ALTERA_AVALON_PIO_EDGE_CAP(BUTTON_PIO_BASE);

  if(IORD_ALTERA_AVALON_PIO_DATA(BUTTON_PIO_BASE) == 1)
  {
    if(direction == 1)
      direction = 0;

    else
      direction = 1;

  }
  else if(IORD_ALTERA_AVALON_PIO_DATA(BUTTON_PIO_BASE) == 2)
  {
    if(speed > 20000)
      speed /= 5;

    else
      speed = 200000;
  }

}
---> Button Registring
// Registering the Button PIO ISR with the HAL
static void init_button_pio()
{
void* edge_capture_ptr = (void*) &edge_capture;

IOWR_ALTERA_AVALON_PIO_IRQ_MASK(BUTTON_PIO_BASE, 0x2);

IOWR_ALTERA_AVALON_PIO_EDGE_CAP(BUTTON_PIO_BASE, 0x0);

#ifdef ALT_ENHANCED_INTERRUPT_API_PRESENT
alt_ic_isr_register(BUTTON_PIO_IRQ_INTERRUPT_CONTROLLER_ID,BUTTON_PIO_IRQ,button_function,edge_capture_ptr,0x0);
#else
alt_irq_register(BUTTON_PIO_IRQ, edge_capture_ptr ,button_function);
#endif
printf("\nButton Initializing interrupts\n");
}

Ich danke euch schonmal im voraus für eure Hilfe.

Mit Freundlichem Gruß,
Kleinerunistudent

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]
  • [vhdl]VHDL-Code[/vhdl]
  • [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.