--- tags: ele-21 --- # Relatório da Aula 2 - Laboratório de EEA-27 2020 Alunos: - Lucas Barioni Toma - Michel Marcos Sena Farias Consulte o manual do ATMEGA2560 (disponibilizado na pasta Referências), nas seções USART (pag. 200 a 226) e Interrupt (pag. 101 a 108) - 1. Configure os registradores abaixo para que a USART0, 1 e 2 operem com 8 bits de dados, 1 stop bit, sem paridade, transmissor e receptor ligados, modo assíncrono, baud rate de 9600bps (fosc=16MHz), sem interrupção. Preencha os valores dos registradores, em hexadecimal abaixo: ![](https://i.imgur.com/1PLagwV.png) onde: n=0 para USART0; n=1 para USART1; n=2 para USART2; ```c UCSRnA = 0x00; UCSRnB = 0x18; // 1<<RXENn | 1<<TXENn UCSRnC = 0x06; // 1<<UCSZn1 | 1<<UCSZn0 UBRRHn = 0x00; // UBRR = 103 & 0xFF00 UBRRLn = 0x67; // UBRR = 103 & 0x00FF ``` - 2. A USART0 deve ser configurada para gerar uma interrupção quando um dado completo (válido) for recebido em seu receptor. Redefina os registradores para que essa interrupção seja gerada e apresente qual o endereço do vetor de interrupção. ```c UCSR0A = 0x00; UCSR0B = 0x98; // 1<<RXCIE0 | 1<<RXEN0 | 1<<TXEN0 UCSR0C = 0x06; // 1<<UCSZ01 | 1<<UCSZ00 UBRRH0 = 0x00; // UBRR = 103 & 0xFF00 UBRRL0 = 0x67; // UBRR = 103 & 0x00FF ``` Endereço do vetor de interrupção (vetor 26): `0x0032`; - 3. Quando um dado completo é recebido pela USART0, uma interrupção é gerada e desvia o fluxo do programa para o endereço do vetor de interrupção. Neste endereço encontra-se um fragmento de programa que trata dessa interrupção, chamado de Interrupt Driver. Após o atendimento, retorna para o mesmo ponto do programa onde a interrupção foi invocada. Para este projeto, quando um dado for recebido pela USART0, o mesmo deve ser retransmitido para a USART1. Sendo assim, descreva o conteúdo do Interrupt Driver, lembrando que os registradores que tratam dos dados recebidos e a serem transmitidos pelas USARTs são os registradores UDRn. ```c /********************************* * INTERRUPT DRIVER DA USART0 * *********************************/ // USART0 interrupt service routine ISR(USART0_RX_vect) { char byteFromUSART0 = UDR0; int isReadyToTransmit = 0; // false while(!isReadyToTransmit){ isReadyToTransmit = UCSR1A & (1<<UDRE1); } UDR1 = byteFromUSART0; return(0); } ```