Hallo,
ich hatte einen Timer (Atmega328P), welchen ich wie folgt erstellt habe
1 | void timer1_init()
|
2 | {
|
3 | // /* 20 ms */
|
4 | // //TCCR1B |= (1 << WGM12) | (1 << CS11) | (1 << CS10); // CTC-Mode clkIO/64
|
5 | // //OCR1A = (5000-1);
|
6 | // //TIMSK1 |= (1 << OCIE1A);
|
7 |
|
8 | /* 10 ms */
|
9 | TCCR1B |= (1 << WGM12) | (1 << CS11) | (1 << CS10); // CTC-Mode clkIO/64
|
10 | OCR1A = (2500-1);
|
11 | TIMSK1 |= (1 << OCIE1A);
|
12 | }
|
Dieser lief auch. Getestet mit einer LED, die ich in der ISR sekündlich
getoggelt habe.
Jetzt wollte ich die Funktion umschreiben, um gleiche auch für andere
Timer zu benutzen.
1 | timer_init(volatile uint8_t* counterRegisterA, uint8_t counterRegisterANewSate,
|
2 | volatile uint8_t* counterRegisterB, uint8_t counterRegisterBNewSate,
|
3 | volatile uint8_t* outputCompareUnit, uint16_t outputCompareUnitNewState,
|
4 | volatile uint8_t* interruptMaskRegister, uint8_t interruptMaskRegisterNewState)
|
5 | {
|
6 | *counterRegisterA |= counterRegisterANewSate;
|
7 | *counterRegisterB |= counterRegisterBNewSate;
|
8 | *outputCompareUnit |= outputCompareUnitNewState;
|
9 | *interruptMaskRegister |= interruptMaskRegisterNewState;
|
10 | }
|
aufgerufen habe ich diese
1 | timer_init(&TCCR1A, 0,
|
2 | &TCCR1B, ((1 << WGM12) | (1 << CS11) | (1 << CS10)), // CTC-Mode clkIO/64
|
3 | &OCR1A, (2500-1),
|
4 | &TIMSK1, (1 << OCIE1A));
|
Jetzt sehe ich, dass die LED viel schneller blinkt.
Woran liegt das? Wahrscheinlich habe ich jetzt den Timer falsch
erstellt. Ich sehe aber keinen Fehler, da es ja auch eigentlich nur 1 zu
1 kopiert ist.