| Next revision | Previous revision |
| pt:avr:usart [2015/12/02 11:24] – Criação deste novo documento. artica | pt:avr:usart [2020/07/20 09:00] (current) – external edit 127.0.0.1 |
|---|
| ====== USART ====== | ====== USART ====== |
| |
| USART is a universal synchronous serial interface; UART, is a simplified version - universal asynchronous serial interface. The difference being that USART also uses a clock signal line to synchronize data, but UART only uses data lines. AVR's USART allows the use of full duplex communication, 5- to 9-bit data words (8-bit word = byte), 1 or 2 stop bits, three parity modes and a wide variety of baud rates. AVR microcontrollers typically have up to 2 USART interfaces, although some may have no USART. Data 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 versa. The user controls USART by reading and writing configuration, status and data registers. | Um USART é uma interface serial síncrona universal; um UART, é uma versão simplificada - interface serial assíncrono universal. A diferença é que um USART usa também uma linha de sinal do relógio para sincronizar os dados, mas um UART só usa linhas de dados. O USART do AVR permite o uso de comunicação full duplex, com palavras de dados de 5 a 9 bits (8 bits de palavras = byte), 1 ou 2 bits de paragem, três modos de paridade e uma grande variedade de taxas de transmissão. Os microcontroladores AVR têm normalmente até 2 interfaces USART, embora alguns possam não tê-los. A transmissão de dados é realizada usando uma palavra de cada vez - o AVR converte a palavra que recebe do utilizador para bits ao nível de hardware e transmite-a de forma independente e vice-versa. O utilizador controla o USART lendo e escrevendo a configuração, o status e registos de dados. |
| |
| Every configuration option has corresponding registers, which are quite easy to configure using the datasheet. The baud rate, though, is a bit more difficult to set. The clock signal for data transmission is generated from the controller's own clock, and the user can specify a number from 1 to 4096, by which the controller's clock cycle is divided. The result is additionally divided by 2, 8 or 16, depending on the mode. The problem is, not all clock frequencies can be divided so that the result is a standard baud rate. With some frequencies, the baud rate can differ from the standard by up to 10%. AVR datasheets contain tables with typical clock frequencies, baud rates, the needed multiplier to reach that baud rate and the possible calculation error. | Cada opção de configuração tem registos correspondentes, que são muito fáceis de configurar usando a datasheet. A taxa de transmissão, porém, é um pouco mais difícil de definir. O sinal de relógio para transmissão de dados é gerada a partir próprio relógio do controlador, e o utilizador pode especificar um número de 1 a 4096, pelo qual ciclo de relógio do controlador é dividido. O resultado é adicionalmente dividido por 2, 8 ou 16, dependendo do modo. O problema é que nem todas as frequências de relógio podem ser divididas de modo que o resultado seja uma velocidade de transmissão padrão. Em algumas frequências, a taxa de transmissão pode ser diferente do padrão até 10%. A datasheet de um AVR contêm tabelas com freqüências de relógio típicas, taxas de transmissão, o multiplicador necessário para chegar a essa taxa de transmissão e o erro de cálculo possível. |
| |
| Since data transmission takes place independently of the processor and much slower, it 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 bit, which signifies if the buffer is ready to accept a new word or not. The controller starts with the ready bit enabled. As soon as a word is transmitted and the buffer is empty, the ready bit is set high. | Uma vez que a transmissão de dados ocorre de forma independente do processador e de forma muito mais lenta, é necessário confirmar que a interface está pronta para a próxima palavra antes de a transmitir. Isso pode ser feito tendo em conta o ready bit do buffer de transmissão, que significa que o buffer está pronto para aceitar uma nova palavra ou não. O controlador começa com o ready bit habilitado. Logo que uma palavra é transmitida e o buffer está vazio, o ready bit é estabelecido. |
| |
| The arrival of a word is signified also by a special status bit. In addition to that, there are status bits to signify framing errors, parity 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 example, by using an interrupt. There are three possible interrupt reasons: transmit buffer ready, transmit successful and receive successful. | A chegada de uma palavra é sinalizada também por um bit de status especial. Além disso, há bits de status para sinalizar erros de enquadramento, erros de paridade e para receber overflows do buffer. O overflow do buffer pode ocorrer quando a última palavra ainda está para ser lida a partir do buffer, enquanto uma nova chega - é por isso que é sempre importante ler as palavras de entrada para o programa tão rapidamente quanto possível, por exemplo, utilizando uma interrupção. Há três razões possíveis de interrupção: buffer de transmissão pronto, transmissão bem sucedida e recepção bem sucedida. |
| |
| The transmit and receive buffers are physically separate registers, but share the same memory address and name. When writing to the shared register, the data is stored in the transmit buffer, and 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. | Os buffers de transmissão e recepção são registos fisicamente separados, mas partilham o mesmo endereço de memória e nome. Quando escrevemos para o registo comum, os dados são armazenados na memória intermédia de transmissão, e quando lemos a partir dele, os dados são lidos a partir da memória intermédia de recepção. Ao usar palavras 9 bits, o nono bit é transmitido e lido usando um dos registos de configuração. |
| |
| ~~PB~~ | <pagebreak> |
| |
| <box 100% round #EEEEEE|Example> | <box 100% round #EEEEEE|Exemplo> |
| |
| Task: Configure an 8 MHz ATmega128's USART0 interface to transmit 8-bit words asynchronously using 9600 bps baud rate, 1 stop bit and no parity bits. Send the symbol "X". | Task: Configure an 8 MHz ATmega128's USART0 interface to transmit 8-bit words asynchronously using 9600 bps baud rate, 1 stop bit and no parity bits. Send the symbol "X". |