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.
1 | LPC_TIM0->MR0 = 24;
|
2 | LPC_TIM0->MCR = 3; /* Interrupt and Reset on MR0 */
|
3 |
|
4 | NVIC_EnableIRQ(TIMER0_IRQn);
|
5 | LPC_TIM0->TCR = 1;
|
6 | LPC_TIM0->IR = 1;
|
7 |
|
8 | while(1)
|
9 | {
|
10 | ...
|
11 | }
|
12 | }
|
13 | void TIMER0_IRQHandler (void)
|
14 | {
|
15 | counter++;
|
16 | if(counter >=0 && counter <= 2000)
|
17 | {
|
18 |
|
19 | LPC_GPIO1 -> FIOPIN |= XWR;
|
20 |
|
21 | }
|
22 | else if (counter >= 2001 && counter <= 2000)
|
23 | {
|
24 | LPC_GPIO1 -> FIOPIN &= ~XWR;
|
25 | }
|
26 | else if (counter >= 2001)
|
27 | {
|
28 | counter = 0;
|
29 | }}
|
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