Timer LPC2138

Gast #2690108
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
}
#2690114
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.

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