This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| et:avr:usart [2014/01/30 11:40] – rellermaa | et:avr:usart [2020/07/20 09:00] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 10: | Line 10: | ||
| Muide, saatepuhver ja vastuvõtupuhver on füüsiliselt küll erinevad registrid, kuid jagavad sama mäluaadressi ja neil on ühine nimi. Ühine andmeregister toimib nii, et sellesse kirjutades jõuab sõna saatepuhvrisse ja sellest lugedes tuleb see vastuvõtupuhvrist. Veel ühe täpsustusena tuleks arvestada, et 9-bitiste andmesõnade puhul edastatakse ja loetakse üheksandat bitti hoopis ühe seaderegistri kaudu. | Muide, saatepuhver ja vastuvõtupuhver on füüsiliselt küll erinevad registrid, kuid jagavad sama mäluaadressi ja neil on ühine nimi. Ühine andmeregister toimib nii, et sellesse kirjutades jõuab sõna saatepuhvrisse ja sellest lugedes tuleb see vastuvõtupuhvrist. Veel ühe täpsustusena tuleks arvestada, et 9-bitiste andmesõnade puhul edastatakse ja loetakse üheksandat bitti hoopis ühe seaderegistri kaudu. | ||
| - | |||
| - | ~~PB~~ | ||
| <box 100% round # | <box 100% round # | ||
| Line 18: | Line 16: | ||
| <code c> | <code c> | ||
| - | #include <avr/io.h> | + | // Boodi kiiruseks 9600 bps seadmine. |
| + | // Valem: jagamistegur = taktsagedus / 16 / boodi kiirus - 1 | ||
| + | // UBRR = 8000000 / 16 / 9600 - 1 = ~51 | ||
| + | UBRR0H = 0; | ||
| + | UBRR0L = 51; | ||
| - | int main() | + | UCSR0B = (1 << TXEN0); // Saatja lubamine |
| - | { | + | |
| - | // Boodi kiiruseks 9600 bps seadmine. Valem: | + | |
| - | // | + | |
| - | // UBRR = 8000000 / 16 / 9600 - 1 = ~51 | + | |
| - | UBRR0H = 0; | + | |
| - | UBRR0L = 51; | + | |
| - | // Saatja lubamine | + | // Asünkroonse režiimi seadistamine, |
| - | UCSR0B | + | // 1 stop-bitt, keelatud paarsuse bitt. |
| + | UCSR0C | ||
| - | // Asünkroonse režiimi seadistamine, andmesõna pikkuseks 8 bitti | + | // Ootame, kuni andmepuhver on tühi ehk eelmine sõna on saadetud |
| - | // 1 stop-bitt, keelatud paarsuse bitt. | + | // Selles näites ei oma see küll mõtet, sest saadetakse alles |
| - | UCSR0C = (1 << UCSZ01) | (1 << | + | // esimest märki, küll tasub seda teha rohkemate märkide korral. |
| + | while (!(UCSR0A & (1 << | ||
| - | // Ootame, kuni andmepuhver on tühi ehk eelmine sõna on saadetud | + | // Märgi kirjutamine puhvrisse, kust see ka teele saadetakse |
| - | // Selles näites ei oma see küll mõtet, sest saadetakse | + | UDR0 = ' |
| - | // esimest märki, küll tasub seda teha rohkemate märkide korral. | + | |
| - | while (!(UCSR0A & (1 << UDRE))) continue; | + | |
| - | // Märgi kirjutamine puhvrisse, kust see ka teele saadetakse | ||
| - | UDR0 = ' | ||
| - | |||
| - | // Lõputu tsükkel | ||
| - | while (1) continue; | ||
| - | } | ||
| </ | </ | ||
| - | Seadistada 32 MHz taktsagedusel töötav | + | Seadistada 32 MHz taktsagedusel töötav |
| <code c> | <code c> | ||
| - | #include <avr/io.h> | + | // Boodi kiiruseks 9600 bps seadmine |
| + | // Vaja on valida skaala konstant BSCALE -7..7 | ||
| + | // Vaja on leida perioodi seade BSEL | ||
| + | // Valem: BSEL = (F_CPU / (2^BSCALE * 16 * baudrate))-1 | ||
| + | USARTD0.BAUDCTRLA = 12; | ||
| + | USARTD0.BAUDCTRLB = (4<< | ||
| - | int main() | + | USARTD0.CTRLB |= (USART_TXEN_bm); // Saatja lubamine |
| - | { | + | |
| - | // Boodi kiiruseks 9600 bps seadmine. | + | |
| - | // Vaja on valida skaala konstant BSCALE -7..7 | + | |
| - | // Vaja on leida perioodi seade BSEL. Valem: | + | |
| - | // BSEL = (F_CPU / (2^BSCALE * 16 * baudrate))-1 | + | |
| - | USARTD0.BAUDCTRLA = 12; | + | |
| - | USARTD0.BAUDCTRLB | + | |
| - | // Saatja lubamine | + | // Asünkroonse režiimi seadistamine, |
| - | USARTD0.CTRLB |= (USART_TXEN_bm); | + | // 1 stop-bitt, keelatud paarsuse bitt. |
| + | USARTD0.CTRLC |= ( | ||
| + | USART_PMODE_DISABLED_gc| | ||
| + | USART_CHSIZE_8BIT_gc); | ||
| - | // Asünkroonse režiimi seadistamine, andmesõna pikkuseks 8 bitti | + | // Ootame, kuni andmepuhver on tühi ehk eelmine sõna on saadetud |
| - | // 1 stop-bitt, keelatud paarsuse bitt. | + | // Selles näites ei oma see küll mõtet, sest saadetakse alles |
| - | USARTD0.CTRLC |= ( USART_CMODE_ASYNCHRONOUS_gc| | + | // esimest märki, küll tasub seda teha rohkemate märkide korral. |
| - | USART_PMODE_DISABLED_gc| | + | while (!(USARTD0.STATUS & (USART_DREIF_bm))); |
| - | USART_CHSIZE_8BIT_gc); | + | |
| - | // Ootame, kuni andmepuhver on tühi ehk eelmine sõna on saadetud | + | // Märgi kirjutamine puhvrisse, kust see ka teele saadetakse |
| - | // Selles näites ei oma see küll mõtet, sest saadetakse | + | USARTD0.DATA = ' |
| - | // esimest märki, küll tasub seda teha rohkemate märkide korral. | + | |
| - | while (!(USARTD0.STATUS & (USART_DREIF_bm))); | + | |
| - | // Märgi kirjutamine puhvrisse, kust see ka teele saadetakse | ||
| - | USARTD0.DATA = ' | ||
| - | |||
| - | // Lõputu tsükkel | ||
| - | while (1) {}; | ||
| - | } | ||
| </ | </ | ||
| - | |||
| </ | </ | ||