Mico32 Timer ISR

Gast #2465145
Lesenswert?
• ▲
▼
Hallo,
ich verwende einen Lattice ECP2 und möchte einen Timer im Mico32 
verwenden, der mir alle 10msec ein Flag setzt, welches ich im 
Hauptprogramm abfrage.

Im MSB habe ich einen Timer mit dem Namen "timer" hinzugefügt 
(Standardeinstellungen habe ich beibehalten) und mit dem WishboneBus 
verdrahtet.

Im C File habe ich folgendes:
1
// globale Defintion:
2
const char *SYSTEM_TIMER = "timer";
3
unsigned short flag_10msec;
4
// im main (void):
5
MicoTimerCtx_t *timer = (MicoTimerCtx_t *)MicoGetDevice(SYSTEM_TIMER);
6

7
  MicoTimerStart(timer,
8
            TimerISR,                
9
(void *)&flag_10msec,            
10
MILLISECONDS_TO_TICKS(10), 
11
  1);

Die ISR für diesen Timer sieht so aus:
1
void TimerISR(void *ctx)   
2
{
3
  flag_10msec = 1; 
4
  return;
5
}

und im main:
1
while (1)
2
{
3
  if (flag_10msec == 1)
4
  {
5
    flag_10msec = 0;
6
    // code durchfuehren
7
  }
8

9
}

Allerdings wird der Interrupt nicht ausgelöst.
Wenn jemand eine Idee hat warum, bitte posten.

Vielen Dank
Peter
Gast #2465859
Lesenswert?
• ▲
▼
Hallo,
ja, ich bin mir sicher dass der Interrupt nicht ausgelöst wird, ich 
toggle im main einen Pin alle 10msec und genau das wird nicht 
durchgeführt.
Am Pin selbst kann es nicht liegen, wenn ich den Pin ausserhalb der if 
Anweisung behandle wird das gemacht was ich erwarte.

Ralf schrieb:
> volatile unsigned short flag_10msec;

das werde ich ausprobieren, danke!

Peter
Gast #2465911
Lesenswert?
• ▲
▼
Hallo,

Ralf schrieb:
> Vielleicht musst du auch
>
>
>
> volatile unsigned short flag_10msec;
>
>
> im Sourcecode schreiben.


Jetzt funktioniert es! Vielen Dank!

Was mich nur wundert, ich habe ein Beispiel für die Timer ISR gefunden, 
in der das Sperrflag nicht als volatile deklariert wurde.
Komisch, aber egal, Hauptsache es funktioniert.

Vielen Dank
Peter

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