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