Forum: Mikrocontroller und Digitale Elektronik Timer LPC2138


von EL-Freak (Gast)


Lesenswert?

Hallo zusammen.

Folgendes Problem beschäftigt mich.
Ich steuere einen LPC2138 mit einem 12MHz Quarz. Intern multipliziere 
ich die Frequenz auf 60MHz. Dies ergibt eine Periodendauer von 
16.666..ns. Die Hardware funktioniert einwandfrei.

Nun will ich mit dem Timer einen 1us Interrupt generieren. Dies will ich 
mit folgendem Code realisieren. Ich teile mit dem Register T1PR die 
60MHz auf 10MHz. Danach nochmals mit dem T1MR0 auf 1MHz. Dies sollte 
meinen Interrupt ergeben. Doch es funktioniert nicht! Wenn ich mit dem 
T1MR0 auf 100kHz teile hingegen schon!
1
void Timer1Init (void)
2
{
3
  T1TCR = 0x02;          //Timer1 disable, reset 
4
  T1CTCR = 0x00;           //Timer1 in Timer Mode (Clock = PCLK)
5
  T1PR = 5;            //fPC = PCLK/(PR+1)
6
  T1MR0 = 9;            //fTC = fPC/(MRO+1)
7
  T1MCR = 0x0003;          //interrupt and reset TC, when MR0 equal to TC
8
  T1TCR = 0x01;          //Timer1 enable 
9
}

von (prx) A. K. (prx)


Lesenswert?

Formulierungen wie "es funktioniert nicht" werden hier heiss und innig 
geliebt.

Falls damit gemeint sein sollte, dass der Timer-Interrupt nicht 
zuverlässig 1 Mio mal pro Sekunde läuft: 60 Takte sind für einen 
Interrupt-Handler sehr knapp bemessen, wenn es nicht grad der FIQ mit 
wenigen Zeilen Assembler-Code ist. 600 Takte jedoch nicht.

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.