Hallo!
Ich bin gerade dabei, den folgenden C- Code zu verstehen, dabei bin ich
auf ein kleines Problem gestoßen, wo mir auch google nicht wirklich
weiterhelfen konnte.
Es geht um diesen Code:
1 | volatile register unsigned char PWM_BYTE_ON asm("r16"); // preserve r16 for pwm_data_on
|
2 | volatile register unsigned char PWM_BYTE_OFF asm("r17"); // preserve r17 for pwm_data_off
|
3 |
|
4 | //ISR ROUTINES
|
5 |
|
6 | ISR(TIMER2_COMP_vect, ISR_NAKED) // no other registers will be altered
|
7 | {
|
8 | //write PWM_BYTE_OFF to PORTB
|
9 | asm volatile("out 0x18, r17" "\n\t" //write PORTB
|
10 | "reti" "\n\t"
|
11 | :: );
|
12 | }//end of ISR(TI...)
|
13 |
|
14 | ISR(TIMER2_OVF_vect, ISR_NAKED) // no other registers will be altered
|
15 | {
|
16 | //write PWM_BYTE_ON to PORTB
|
17 | asm volatile("out 0x18, r16" "\n\t" //write PORTB
|
18 | "reti" "\n\t"
|
19 | :: );
|
20 | }//end of ISR(TI...)
|
Also so wie ich das sehe, wird PWM_Byte_OFF und PWM_Byte_ON direkt in
ein Register geschrieben.
danach mit dem ISR(TIMER2_COMP_vect ... ) sollte man doch einstellen,
welchen Comparewert der TIMER 2 bekommt oder?, ich verstehe also nicht,
wieso man plötzlich in den PORTB einen Wert hineinschreibt, und nicht in
das Register für den Comparewert?
Das gleiche beim Overflow Wert.
Kann mir jemand sagen wie ich das verstehen soll?
Schöne Grüße
Alexander