Forum: FPGA, VHDL & Co. Nios II Timer Interrupt


von Thoms (Gast)


Lesenswert?

Hallo,

ich bin relativ neu in NIOS und versuche grad eine blinkende LED mit 
einem TimerInterrupt zu realisieren. Jedoch klappt das nicht so wie das 
soll :)

Vielleicht hat ja wer eine Ahnung wo das Problem sein könnte.



static void timer_interrupts(void* context, alt_u32 id)
 {
 IOWR_ALTERA_AVALON_TIMER_STATUS(TIMER_BASE, 0);
 }

int main()
{
      alt_irq_register(TIMER_IRQ, NULL, timer_interrupts);
  while(1)
  {
       IOWR_ALTERA_AVALON_TIMER_PERIODL(TIMER_BASE, 0x00ff);
       IOWR_ALTERA_AVALON_TIMER_PERIODH(TIMER_BASE, 0x00);

       IOWR_ALTERA_AVALON_PIO_DATA(LED_BASE, 0x01);

  }
}


Wobei mein Timer eine Periode von 10 ms hat.

Würde mich über Hilfe freuen :)


Grüße,
Thom

von ravioli (Gast)


Lesenswert?

Timer Konfiguration raus aus der While Schleife (ist nicht das Problem). 
Und überleg dir mal warum es in deinem Fall zu keinem Blinken kommt

von Thoms (Gast)


Lesenswert?

Hm, wahrscheinlich weil die led immer auf 1 ist und nie auf 0 geht.

von Thoms (Gast)


Lesenswert?

und er findet alt_irq_register nicht

von Thoms (Gast)


Lesenswert?

neuer versuch ^^

alt_u8 x = 0x00;

static void timer_interrupts(void* context, alt_u32 id)
 {
 IOWR_ALTERA_AVALON_TIMER_STATUS(TIMER_BASE, 0);
 IOWR_ALTERA_AVALON_PIO_DATA(LED_BASE, x);
 x = x + 1;
 }

int main()
{
    alt_irq_register(TIMER_IRQ, NULL, timer_interrupts);
      IOWR_ALTERA_AVALON_TIMER_PERIODL(TIMER_BASE, 0x0064);
      IOWR_ALTERA_AVALON_TIMER_PERIODH(TIMER_BASE, 0x00);

  while(1);

}

so sieht nun das programm aus, jedoch geht es immer noch nicht.
er bringt noch das alt_irq_register nicht deklariert ist. hat vielleicht 
noch wer ein tipp ? :)

und ich hätte noche eine frage zu dem timer. mein timer hat eine periode 
von 10ms. ist es dann richtig, wenn ich in der periodl einen wert von 
100 eintrage damit der interrupt 1s lang ist ?

von Harald F. (hfl)


Lesenswert?

Thoms schrieb:
> und ich hätte noche eine frage zu dem timer. mein timer hat eine periode
> von 10ms. ist es dann richtig, wenn ich in der periodl einen wert von
> 100 eintrage damit der interrupt 1s lang ist ?

Also einer von uns beiden bringt da etwas durcheinander. Wenn Du die 
Periodendauer des Timers im SOPC Builder auf 10 ms festlegst, dann 
kannst Du doch von den Register PERIODL und PERIODH die Finger lassen in 
der Software. Die sind doch dann schon eingestellt, oder?

Harald

von unbekannt (Gast)


Lesenswert?

Nur ein kleiner Tipp am Rande: Wenn die Interrupts nach dem 
konfigurieren auch noch aktiviert werden, soll das schon so manches 
Wunder bewirkt haben.

Hier steht alles drin was du wissen musst: 
http://www.altera.com/literature/hb/nios2/n2sw_nii52010.pdf

von Thoms (Gast)


Lesenswert?

Ja, hab ich auch schon rausgefunden :) Funktioniert inzwischen. Danke 
für die Hilfe.

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
Noch kein Account? Hier anmelden.