Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
en:avr:usart [2010/02/01 13:36] – external edit 127.0.0.1en:avr:usart [2020/07/20 09:00] (current) – external edit 127.0.0.1
Line 1: Line 1:
 ====== USART ====== ====== USART ======
  
-USART on universaalne sünkroonne jadaliidesUART aga selle lihtsustatud variant universaalne asünkroonne jadaliidesVahe seisneb selles, et USART kasutab peale andmeliinide ka taktsignaali liini, millega andmeid sünkroniseeritakse, UART mitte. AVR-i USART võimaldab täisdupleks-sidepidamist, 5- kuni 9-bitiseid andmesõnu (8 biti puhul sõna bait), 1 või stoppbittikolme paarsuse režiimi ja laia boodikiiruste valikut. AVR mikrokontrolleritel on üldiselt kuni 2 USART liidestmõnel see ka puudubAndmete edastamine toimub sõna kaupa, ehk AVR teeb riistavara tasandil kasutaja edastatud sõna bittideks ja edastab selle iseseisvalt ning vastupidiKasutaja juhib USART tööd seade-oleku- ja andmeregistreid kirjutades ning lugedes.+USART is a universal synchronous serial interface; UARTis a simplified version universal asynchronous serial interfaceThe difference being that USART also uses a clock signal line to synchronize databut UART only uses data lines. AVR'USART allows the use of full duplex communication, 5- to 9-bit data words (8-bit word byte), 1 or stop bitsthree parity modes and a wide variety of baud rates. AVR microcontrollers typically have up to 2 USART interfacesalthough some may have no USARTData transmission is performed one word at a time - AVR converts the word it gets from the user to bits on the hardware level and transmits it independently and vice versaThe user controls USART by reading and writing configurationstatus and data registers.
  
-Kõikide seadistuste jaoks on olemas vastavad registridmida on üsna lihtne andmelehe abil seadistadaNatuke keerulisem on boodikiiruse seadmineTaktsignaal andmete edastamiseks genereeritakse töötaktist ja kasutaja saab valida teguri 1-st 4096-nimillega töötakt läbi jagatakseTäiendavalt jagatakse saadud taktisignaali olenevalt režiimist veel 2, 8 või 16-ga. Probleem on selles, et kõiki taktsagedusi ei saa jagada niiet tekiks standardne boodikiirusMõnede mikrokontrolleri taktsageduste puhul on boodikiiruse erinevus soovitust ligikaudu 10%. AVR andmelehtedes on toodud tabelid tüüpilistest taktsagedustestboodikiirustest ja nende saamiseks vajalikust jagamistegurist ning tekkida võivast veast.+Every configuration option has corresponding registerswhich are quite easy to configure using the datasheetThe baud rate, though, is a bit more difficult to setThe clock signal for data transmission is generated from the controller's own clock, and the user can specify a number from to 4096, by which the controller's clock cycle is dividedThe result is additionally divided by 2, 8 or 16, depending on the mode. The problem isnot all clock frequencies can be divided so that the result is a standard baud rateWith some frequencies, the baud rate can differ from the standard by up to 10%. AVR datasheets contain tables with typical clock frequencies, baud ratesthe needed multiplier to reach that baud rate and the possible calculation error.
  
-Kuna andmete edastus toimub protsessorist sõltumata ja oluliselt aeglasemalttuleb enne saatmist veenduda, et liides on valmis uut sõna edastama. Selleks tuleb jälgida saatepuhvri valmisoleku olekubittimis näitab, kas sinna võib saatmiseks uue sõna kirjutada või mitteKui mikrokontroller käivitada, on see luba vaikimisi kohe olemasNiipea kui sõna on saadetud ja puhvrisse pole uut sõna saatmiseks kirjutatudmuudetakse kõrgeks saatmise õnnestumise olekubitt.+Since data transmission takes place independently of the processor and much slowerit is necessary to confirm that the interface is ready for the next word before transmitting. This can be done by keeping an eye on the transmit buffer's ready bitwhich signifies if the buffer is ready to accept a new word or notThe controller starts with the ready bit enabledAs soon as a word is transmitted and the buffer is emptythe ready bit is set high.
  
-Sõna saabumist tähistab samuti spetsiaalne olekubittLisaks on olekubitid vastuvõtmisel tekkiva kaadri veapaarsuse vea ja vastuvõtja puhvri ületäitumise tähistamiseks. Puhvri ületäitumine tekib näiteks siiskui eelmist saabunud sõna pole vastuvõtu puhvrist välja loetud seepärast on oluline saabuvad sõnad kiiresti programmi lugedanäiteks katkestusegaKokku on kolm võimalikku katkestuse põhjustsaatepuhvri valmisoleksaatmise õnnestumine ja vastuvõtmise õnnestumine.+The arrival of a word is signified also by a special status bitIn addition to thatthere are status bits to signify framing errorsparity errors and receive buffer overflows. Buffer overflow can occur when the last word is yet to be read from the buffer while a new one arrives this is why it is always important to read the incoming words to the program as soon as possible, for exampleby using an interruptThere are three possible interrupt reasonstransmit buffer readytransmit successful and receive successful.
  
-Muidesaatepuhver ja vastuvõtupuhver on füüsiliselt küll erinevad registrid, kuid jagavad nad sama mäluaadressi ja neil on ühine nimiÜhine andmeregister toimib niiet sellesse kirjutades jõuab sõna saatepuhvrisse ja sellest lugedes tuleb see vastuvõtupuhvrist. Veel ühe täpsustusena tuleks arvestadaet 9-bitiste andmesõnade puhul edastatakse ja loetakse üheksandat bitti hoopis ühe seaderegistri kaudu.+The transmit and receive buffers are physically separate registersbut share the same memory address and nameWhen writing to the shared registerthe data is stored in the transmit bufferand when reading from it, the data is read from the receive buffer. When using 9-bit words, the 9th bit is transmitted and read using one of the configuration registers.
  
-===== Näide =====+<pagebreak>
  
-Seadistada 8 MHz taktsagedusel töötav ATmega128 USART0 liides boodikiirusel 9600 bps asünkroonselt edastama 8-bitiseid sõnu stopp-bitiga ja ilma paarsuse bititaSaata märk "X".+<box 100% round #EEEEEE|Example> 
 + 
 +Task: Configure an 8 MHz ATmega128'USART0 interface to transmit 8-bit words asynchronously using 9600 bps baud rate, stop bit and no parity bitsSend the symbol "X".
  
 <code c> <code c>
Line 20: Line 22:
 int main() int main()
 { {
- // Boodi kiiruseks 9600 bps seadmineValem+ // Set baud rate to 9600 bps. Formula
- //   Jagamistegur taktsagedus / 16 / boodi kiirus - 1+ //   multiplier clock frequency / 16 / baud rate - 1
  //   UBRR = 8000000 / 16 / 9600 - 1 = ~51  //   UBRR = 8000000 / 16 / 9600 - 1 = ~51
  UBRR0H = 0;  UBRR0H = 0;
  UBRR0L = 51;  UBRR0L = 51;
  
- // Saatja lubamine+ // Allow transmitting
  UCSR0B = (1 << TXEN0);  UCSR0B = (1 << TXEN0);
  
- // Asünkroonse režiimi seadistamineandmesõna pikkuseks bitti + // Configure asynchronous modeset the word size to bits 
- // 1 stop-bittkeelatud paarsuse bitt.+ // 1 stop bitno parity bits.
  UCSR0C = (1 << UCSZ01) | (1 << UCSZ00);  UCSR0C = (1 << UCSZ01) | (1 << UCSZ00);
  
- // Ootame kuni andmepuhver on tühi ehk eelmine sõna on saadetud + // Wait for the data buffer to empty (previous word to transmit) 
- // Selles näites ei oma see küll erilist mõtetsest saadetakse + // In this example there is no need to waitas the first symbol is yet 
- // alles esimest märkikuid seda tasub teha rohkemate korral.+        // to be sentbut it should be done when transmitting more symbols.
  while (!(UCSR0A & (1 << UDRE))) continue;  while (!(UCSR0A & (1 << UDRE))) continue;
  
- // Märgi kirjutamine puhvrisse, kust see ka teele saadetakse.+ // Write the symbol to the buffer for transmitting
  UDR0 = 'X';  UDR0 = 'X';
   
- // Lõputu tsükkel+ // Endless loop
  while (1) continue;  while (1) continue;
 } }
 </code> </code>
  
 +</box>
en/avr/usart.1265031400.txt.gz · Last modified: 2020/07/20 09:00 (external edit)
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0