Hallo zusammen,
ich bin grad am verzweifeln :-)
Ich programmiere einen LPC1769 von NXP. Ich möchte eine Software PWM
programmieren und habe zum testen eine LED an den PORT gehängt.
Meine Einstellungen sind:
1 | LPC_TIM0->MR0 = 976; // match register 0
|
2 | LPC_TIM0->MCR = 0x0000;
|
3 | LPC_TIM0->MCR |= (0x3<<0); // Interrupt + reset
|
4 | LPC_TIM0->MR1 = pwm_wert;
|
5 | LPC_TIM0->MCR |= (0x1<<3); // interrupt if MRX = TC
|
D.h. wenn MR0 erreicht wurde soll er den Timer zurücksetzten und einen
Interrupt auslösen. Wenn MR1 erreicht wurde soll er nur einen Interrupt
auslösen.
1 | void TIMER0_IRQHandler(void)
|
2 | {
|
3 | if (LPC_TIM0->IR & (0x1 << 0))
|
4 | {
|
5 | LPC_TIM0->IR |= (0x1 << 0); // kill flag
|
6 | MYPORT->FIOSET |= (1 << 12);
|
7 | }
|
8 | if (LPC_TIM0->IR & (0x1 << 1))
|
9 | {
|
10 | LPC_TIM0->IR |= (0x1 << 1);
|
11 | MYPORT->FIOCLR |= (1 << 12);
|
12 | }
|
13 | }
|
Das funktioniert, so lange der pwm_wert nicht zu klein ist, sonst leutet
die LED mit voller Power d.h. der lässt den Interrupt irgendwie aus.
Könnte ihr mir sagen was ich falsch mache?
Vielen Dank