Piny PD0 a PD1 vs. Bootloader: Rozdiel medzi revíziami
Zo stránky SensorWiki
 Nová stránka: Ak chceme používať piny PD0 a PD1 a zároveň zabudovaný bootloader, treba si počínať nanajvýš obozretne.  Bootloader používa tieto dva piny na nahrávanie programu cez s...  | 
				Bez shrnutí editace  | 
				||
| Riadok 12: | Riadok 12: | ||
                         // Following two lines are a must for BOOTLOADER  |                          // Following two lines are a must for BOOTLOADER  | ||
   UCSR0B = 0x00;        // Disable RxD and TxD for UART0  |    UCSR0B = 0x00;        // Disable RxD and TxD for UART0  | ||
                        // Disable ALL interrupts (Global)  | |||
   SREG = SREG & 0x7F;   // same as cli(); but not requiring Interrupts.h    |    SREG = SREG & 0x7F;   // same as cli(); but not requiring Interrupts.h    | ||
</Code>  | </Code>  | ||
Verzia z 13:41, 24. október 2011
Ak chceme používať piny PD0 a PD1 a zároveň zabudovaný bootloader, treba si počínať nanajvýš obozretne. Bootloader používa tieto dva piny na nahrávanie programu cez sériové rozhranie USART0 (RxD a TxD). Po skončení nahrávania programu ostane UART0 nakonfigurovaný a preto nie je možné použiť tieto dva piny ako univerzálne digitálne I/0 piny. Riešením je zakázať vysielač aj prijímač, t.j. vynulovať bity RxEN a TxEN v registri UCSR0B.
Ďalším problémom je povolené prerušenie, ktoré používa bootloader pri komunikácii cez sériové rozhranie. Pravdepodobne od časovača (overiť). Preto je najlepšie hneď na začiatku zakázať všetky prerušenia.
                       // Following two lines are a must for BOOTLOADER
 UCSR0B = 0x00;        // Disable RxD and TxD for UART0
                       // Disable ALL interrupts (Global)
 SREG = SREG & 0x7F;   // same as cli(); but not requiring Interrupts.h