Prévia do material em texto
Questão 1 - As interrupções são muito utilizadas no mundo dos microcontroladores e dos microprocessadores. Um exemplo típico são nossos microcomputadores PC. Sempre que pressionamos uma tecla, uma interrupção é gerada para o microprocessador, solicitando o tratamento desta. Assim, o PC não é obrigado a varrer constantemente o teclado em busca de uma tecla. Porém é claro que para que isso seja feito, “alguém ou alguma coisa” deve fazer esta varredura por ele. Isso é feito por um microcontrolador dedicado, interno em todos os teclados de PC. Assim temos a geração de uma interrupção no processamento central por parte de um “periférico”. Porém, para utilizar interrupções, é necessário que o projetista compreenda o ciclo de ações implementadas pelo microcontrolador a partir do momento em que uma interrupção aciona o microcontrolador. Desta forma, apresente todos os passos implementados pelo microcontrolador desde o momento em que uma interrupção ocorre, explicando cada um desses passos. . 1- Detecção da Interrupção: · hardware detecta condição de interrupção na borda de subida ou descida dependendo da configuração · Um sinal de interrupção é gerado e enviado ao controlador de interrupção interno do microcontrolador. 1- Reconhecimento da Interrupção: · Controlador de interrupção verifica se a interrupção está habilitada. · Checagem de prioridade da interrupção · Sinaliza ao micro se a interrupção for válida 2- Suspensão do Código principal · Micro desativa temporariamente interrupções adicionais (para evitar interrupções aninhadas). · Salva o contexto atual do CPU, tipicamente empilhando os registradores atuais e o PC. 3- Mudança para o Vetor de Interrupção: · endereço da ISR é carregado a partir da tabela de vetores de interrupção. · PC é atualizado para apontar para este endereço. 4- Execução da ISR: · A ISR é executada para tratar a interrupção. · A ISR realiza tarefas específicas, como ler dados, processar sinais, ou alterar estados de periféricos. 6 - Restauração do Contexto: · Após a execução do ISR, o contexto salvo é restaurado. · Registradores e o PC são recuperados da pilha. 7- Retorno à Execução Normal: · A execução do programa principal é retomada a partir do ponto de interrupção. · Interrupções adicionais são reativadas, e o sistema continua a operação normal. Questão 2 - Considere que um aluno de Sistemas Embarcados II deseja realizar um pequeno programa para compreender a comunicação serial USART de um microcontrolador STM32VL Discovery. a) Faça o fluxograma do projeto de um microcontrolador que faça a leitura do estado de um led acionado por um botão, e envie a palavra “ON” quando o led estiver aceso. b) Desenhe o frame da palavra “ON” considerando uma comunicação Serial com as configurações 19200/8-N-2, em transmissão RS-232. c) Determine o Bef e o Overhead. a) b) Frame para "O" (0x4F): Start D0 D1 D2 D3 D4 D5 D6 D7 Stop 0 1 1 1 0 1 1 1 0 11 Frame para "N" (0x4E): Start D0 D1 D2 D3 D4 D5 D6 D7 Stop 0 0 1 0 1 1 1 0 0 11 c) Overhead = Total Bits - Bits Efetivos Para um caractere: · Total de Bits = 11 · Bits Efetivos = 8 (BEF) Overhead = 11 - 8 = 3 bits Overhead em percentagem: BEF/Total de Bits = 3/11 = 27,27% Portanto: · Bef: 8 bits por caractere · Overhead: 3 bits por caractere ou aproximadamente 27,27% Questão 3 - Um engenheiro pretende realizar a comunicação entre dois microcontroladores e dois diferentes periféricos, contando com o seguinte sistema representado em hardware Represente o comportamento de todos os pinos do master ao longo de uma comunicação do master 1 com o slave 2 para escrita de 1 byte. A Tabela 1 representa o byte presente no registrador de saída de cada dispositivo no momento do início da transmissão. Despreze os intervalos de transição de sinal. Ciclo de Clock MOSI 1 1 1(meio) 1 2 0 2 (meio) 0 3 0 3 (meio) 0 4 1 4 (meio) 1 5 1 5 (meio) 1 6 1 6 (meio) 1 7 0 7 (meio) 0 8 0 8 (meio) 0 Questão 4 - Considere um sistema com múltiplos microcontroladores se comunicando por meio de uma rede zigbee. Um determinado microcontrolador informa o valor de temperatura lido em uma determinada caldeira, que deve ser devidamente escrito em um display conectado a outro microcontrolador da mesma rede. Após alguns erros de controle, um determinado engenheiro percebeu que a informação escrita no display era consideravelmente diferente daquela enviada originalmente (vide Tabela 1, das últimas dez medições realizadas). Escreva qual serviço do Kernel de um RTOS é capaz de solucionar este problema e explique como é realizada a solução. Temperatura enviada (ºC) Temperatura Display (ºC) 098 099 099 000 100 109 099 098 098 000 100 102 102 104 "Mailbox" ou "Message Queue". Estes serviços são usados para a comunicação segura e sincronizada entre tarefas, garantindo que as mensagens trocadas entre elas não se percam ou sejam corrompidas. Criação da Message Queue: No início do sistema, cria-se uma Message Queue com tamanho adequado para armazenar as mensagens de temperatura. Envio de Mensagens pelo Microcontrolador de Leitura: Sempre que uma nova leitura de temperatura é feita, a tarefa correspondente coloca (envia) essa temperatura na Message Queue. Recepção de Mensagens pelo Microcontrolador de Exibição: A tarefa responsável pelo display fica esperando por novas mensagens na Message Queue. Quando uma nova mensagem é recebida, a tarefa lê o valor da fila e o exibe no display. Pseudocódigo para o microcontrolador de leitura void leituraTemperaturaTask() { while (true) { int temperatura = lerSensorTemperatura(); enviarParaMessageQueue(queue, temperatura); delay(intervaloDeLeitura); } } // Pseudocódigo para o microcontrolador de exibição void exibirTemperaturaTask() { while (true) { int temperatura; if (receberDeMessageQueue(queue, &temperatura)) { exibirNoDisplay(temperatura); } delay(intervaloDeExibição); } } Explicação do Exemplo Leitura de Temperatura: lerSensorTemperatura() lê a temperatura do sensor. enviarParaMessageQueue(queue, temperatura) coloca a temperatura na Message Queue. Exibição de Temperatura: receberDeMessageQueue(queue, &temperatura) bloqueia até que uma nova mensagem esteja disponível na fila, garantindo a sincronização. exibirNoDisplay(temperatura) exibe a temperatura lida no display. Questão 5 - Dois microcontroladores estão operando como mestre e devem realizar uma comunicação I²C para dois periféricos, um sensor de temperatura que escreve informações no microcontrolador que requisitou e um painel de LCD que lê informações do microcontrolador que requisitou. Considere que, simultaneamente, um microcontrolador faça uma requisição para leitura do sensor de temperatura (end. 0xA0) enquanto o segundo microcontrolador realiza uma operação de escrita no painel de LCD (end. 0x9F). Faça um diagrama de tempo representando o processo de arbitragem da comunicação realizada, apontando qual dos microcontroladores ganha o processo de arbitragem Para representar o processo de arbitragem em uma comunicação I²C envolvendo dois microcontroladores que atuam como mestres e dois periféricos (um sensor de temperatura e um painel de LCD), precisamos entender como a arbitragem funciona no protocolo I²C. O I²C utiliza uma linha de dados (SDA) e uma linha de clock (SCL). Quando dois mestres tentam controlar o barramento ao mesmo tempo, o processo de arbitragem ocorre. · Microcontrolador 1 (M1) quer ler do sensor de temperatura (endereço 0xA0). · Microcontrolador 2 (M2) quer escrever no painel de LCD (endereço 0x9F). Endereço em Binário · Sensor de Temperatura: 0xA0 (10100000 em binário, considerando 7 bits de endereço e o bit de leitura/escrita). · Painel de LCD: 0x9F (10011111 em binário, considerando 7 bits de endereço e o bit de leitura/escrita). Vamos desenhar o diagrama de tempo considerando os primeiros bits dos endereços para ver como a arbitragemocorre. 1. Start Condition: Ambos os mestres geram uma condição de início (Start Condition). 2. Arbitragem: Os mestres começam a transmitir os endereços dos periféricos bit a bit. 3. Detecção de Conflito: No momento em que um mestre tenta transmitir um bit diferente do outro e detecta que a linha SDA não está no estado que ele espera, ele perde a arbitragem. Questão 6 - Descreva cada instrução do código abaixo da linguagem Assembly do ARM e explique a função que o código executa. (x, y e z estão mapeados na memória) 0x00 inicio: ldr r1,x > Carrega o valor armazenado na posição x da memória pra o registrador 1 0x04 ldr r2,y > Carrega o valor armazenado na posição y da memória pra o registrador 2 0x08 loop: cmp r1,r2 > Compara o valor de registrador 1 com o valor de registrador 2. Atualiza os flags de condição baseados no resultado da comparação (se registrador 1 é maior, menor ou igual a registrador 2.). 0x0C subgt r1,r1,r2 > Se registrador 1 for maior que registrador 1 (condição gt - greater than), subtrai registrador 2 de registrador 1 e armazena o resultado em registrador 1. 0x10 sublt r2,r2,r1 > Se registrador 2 for menor que registrador 1 (condição lt - less than), subtrai registrador 1 de registrador 2 e armazena o resultado em r2. 0x14 bne loop > Se os valores em registrador 1 e registrador 2 ainda não são iguais (desvia a execução de volta para o rótulo loop 0x18 str r1,z > Armazena o valor de registrador 1 na posição de memória z 0x1C .end > fim do código Questão 7 - O trecho do programa a seguir é um exemplo de função que calcula o n-ésimo termo da sequência de Fibonacci, dada por (1,1,2,3,5,8,13,21,...), na qual cada termo subsequente corresponde à soma dos dois termos anteriores (com exceção dos dois primeiros termos, 1 e 1). O valor de entrada é n (n>0) e o valor de saída é x, que é o n-ésimo termo. (n e x estão mapeados na memória) 0x00 inicio: ldr r0,n @Carrega o valor de n no registrador r0 0x04 cmp r0,0x01 @Compara r0 com 0x01 0x08 beq termo1 @Desvia para termo1 caso positivo 0x0C sub r0,r0,0x01 @r0 = r0 - 0x01 0x10 mov r1,0x01 @r1 = 0x01 0x14 mov r2,0x01 @r2 = 0x01 0x18 mov r3,0x01 @r3 = 0x01 0x1C loop: cmp r0,0x01 @Compara r0 com 0x01 0x20 beq fim @Desvia para fim caso positivo 0x24 sub r0,r0,0x01 @r0 = r0 - 0x01 0x28 add r3,r1,r2 @r3 = r1 + r2 0x2C mov r2,r1 @r2 = r1 0x30 mov r1,r3 @r1 = r3 0x34 b loop @desvia para loop 0x38 termo1: mov r3,0x01 @r3 = 0x01 0x3C fim: str r3,x @armazena o valor de r3 em x 0x40 nop @nenhuma operação 0x44 nop @nenhuma operação Para n = 4, pede-se: a) Realize a execução do programa, indicando, para cada ciclo de relógio: i) O estágio de cada instrução utilizando a técnica de pipeline (veja o exemplo), com a seguinte legenda: B=busca, D=decodificação, X=execução. ii) O endereço de instrução armazenado no registrador PC (hexa) iii) Os valores dos registradores r0, r1, r2 e r3 (decimal) ao final do ciclo de relógio (Utilize a tabela seguinte para escrever sua resolução) Na tabela do Excel b) Quantos ciclos de relógio são necessários para executar o trecho de programa utilizando a técnica de pipeline? E se não fosse utilizado o pipeline? 35 ciclos. Se não fosse executado pipeline, a instrução poderia demorar até 8 ciclos de clock, dando em torno de umas 100 ciclos de clock image1.png image2.png