www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Timer Interrupt LPC1768


Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich versuche gerade ein Timer Interrupt mit dem LPC1768 zu erzeugen.
Meine CPU Frequenz beträgt 96MHz und die Peripheriefrequenz 24MHz.
Das Interrupt soll alle 0,000001s aufgerufen werden.
LPC_TIM0->MR0 = 24;
  LPC_TIM0->MCR = 3;    /* Interrupt and Reset on MR0 */

  NVIC_EnableIRQ(TIMER0_IRQn);
  LPC_TIM0->TCR = 1;
  LPC_TIM0->IR = 1;  

  while(1)
  {
      ...
  }
}
void TIMER0_IRQHandler (void) 
{
       counter++;
  if(counter >=0 && counter <= 2000)
  {
 
    LPC_GPIO1 -> FIOPIN |= XWR;

  }
  else if (counter >= 2001 && counter <= 2000)
  {
    LPC_GPIO1 -> FIOPIN &= ~XWR;
  }
  else if (counter >= 2001)
  {
    counter = 0;
  }}

Jedoch wird der Interrupt nicht sofort gestartet sondern erst wenn das 
TOTC-Register überläuft und wenn ich mir den Ausgang den ich im 
Interrupt jede Millisekunde setzen bzw Rücksetzen will, ist der Pegel 
nicht ganz eine Millisekunde low, jedoch nur ca. 700µs high.
Ich hoffe ich habe mich verständlich ausgedrückt und an alles gedacht, 
danke für die Hilfe

Autor: Ralf Neubauer (ralf25)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
else if (counter >= 2001 && counter <= 2000)
  {
    LPC_GPIO1 -> FIOPIN &= ~XWR;
  }


was soll dieses if?

größer als 2001 und gleichzeitig kleiner als 2000 ?

und du willst das der Timer alle 1µs aufgerufen wird ? ich weißß nicht 
ob 24MHz dafür reichen, ich glaube nicht

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ah sorry fehler von mir das soll natürlich
if(counter >=0 && counter <= 1000)
  {
 
    LPC_GPIO1 -> FIOPIN |= XWR;

  }
  else if (counter >= 1001 && counter <= 2000)
  {
    LPC_GPIO1 -> FIOPIN &= ~XWR;
  }
  else if (counter >= 2001)
  {
    counter = 0;
  }

heißen

Warum sind 24MHz zu langsam?

Autor: Ralf Neubauer (ralf25)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hier wurde die Frage mal im NXP Forum gestellt.

http://knowledgebase.nxp.com/showthread.php?t=817&...

es liegt wohl nicht an der Frequenz, wohl eher am Interrupt, das dieser 
nicht nachkommt. Aber ich denke das wird wohl kein problem bei dir sein 
da du ja alle 10 µs oder 100µs auslösen kannst und einfach dann nach 0 
bis 10 bzw 0 bis 1 abfragen kannst

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hm okay das eigentliche Ziel des ganzen ist es jedoch, dass ich Daten 
haben, die mit eine rFrequenz von 1MHz in meinen Controller reinkommen, 
ich möchte diese dann an einem anderen Pin ausgeben, jedoch geht dies 
nur, wenn die beiden synchron arbeiten also der Mikrocontroller synchron 
zu den Daten ausgibt.
Da dachte ich wäre es am einfachsten ein Interrupt jede µs auslösen zu 
lassen und die daten dort zu verarbeiten, weißt du eine andere 
möglichkeit?

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]
  • [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.