MIC29004-lista2-avr
Revisão de 08h47min de 27 de junho de 2019 por Roberto.matos (discussão | contribs)
Conceitos Gerais Microcontroladores
- O que é "power on reset"? Qual é a sua função?
- Qual a diferença entre microcontrolador e microprocessador?
- Explique a diferença da arquitetura Harvard e Von Neumann? Quais as vantagens e desvantagens?
- Cite periféricos comuns em microcontroladores modernos.
- Explique os conceitos básicos das arquiteturas CISC e RISC. Cite as principais diferenças, vantagens e desvantagens.
AVR
- Qual o circuito mínimo precisa ser montado para o funcionamento do AVR?
- O ATmega328p tem 16K de memória de programa. Qual o tamanho do PC desse microcontrolador especificamente?
- Qual a largura do barramento de dados da memória de programa e da memória de dados do AVR?
- A memória EEPROM no AVR é acessada via barramento de dados e endereço? Explique.
- Comente sobre os 32 registradores de uso geral do AVR. Qual a relação desse banco de registradores com a ALU, com o endereçamento indireto de 16 bits e com o acesso à memória de programa?
- Quais as regiões de memória que podem ser acessadas pela a ALU para executar as operações aritméticas? Qual o registrador que é atualizado depois das operações da ALU?
- Como a memória de programa (FLASH) é dividida?
- Comente sobre o funcionamento das instruçãoes SPM.
- Quais os tipos de enderaçamento para acessar a SRAM?
- Comente sobre o espaço de memória dedicada às entradas e saídas (E/S). Quais as funções alocadas nesse espaço de memória e como esse espaço pode ser acessado?
- Com relação ao ATmega328p, quais as características desse microcontrolador com relação ao espaço de memória para E/S? Dê exemplos de instruções que acessam esse espaço e quais as limitações?
Portas I/O
- Explique a estrutura das portas de entrada e saída do AVR.
- Em qual região de memória os registradores das portas de I/O estão mapeados? Quais as instruções que podem ser usadas para acessar essa região de memória?
Pilha
- Comente sobre como funciona a pilha do AVR? Quais suas funções? O que limita o seu tamanho?
- Qual a função do registrador SP?
- O que é o processo de inicialização da pilha? Por que esse processo é necessário e quando ele é obrigatório?
- Explique o que acontece com o SP e a pilha quando usamos push e pop, respectivamente.
Subrotina
- O que é uma subrotina em assembly?
- Quais as boas práticas na criação de subrotinas?
Interrupção
- Comente de forma geral o conceito de "Interrupção" no contexto de microcontroladores. Como funciona? Qual a sua utilidade?
- Como o controlador de interrupção é configurado?
- Descreva o que acontece com a pilha, o SP e o PC quando ocorre uma interrupção.
- O ATmega328p possui duas interrupções externas (INT0 e INT1). Quais controles de sensibilidade são possíveis de configurar para essas interrupções?
- O que é uma ISR? Quais são as boas práticas relacionadas com ISR?
- Defina o que é vetor de interrupção. Como é definido a prioridade das interrupções?
Assembly
- O que é um rótulo e qual é a sua utilidade? O rótulo está associado com qual região de memória?
- O que é uma diretiva de compilação e qual é a sua utilidade? Dê exemplos. Esses “comandos” são executados pelo microcontrolador? Explique.
- Analise em profundidade a instrução RJMP, indicando quantos bits são usados para o operando e o opcode, além de indicar qual e o maior salto possível com essa instrução.
- Escreva um código que execute 1.000 vezes uma ação em loop.
- Escreva um código que execute 100.000 vezes uma ação em loop.
- Implemente um programa que some os seguintes números e salve o resultado em R20: 0x15, 0x30 e 0x22.
- Escreva um código que carregue na SRAM com 10 valores sequenciais a partir do endereço 0x0102 usando endereçamento de dados indireto com pós-incremento.
- Re-implemente o código abaixo usando endereçamento indireto para acessar o R0 como posição de memória na SRAM.
ldi r16, $BB
mov r0, r16
</syntaxhighlight>
- Copie 12 bytes do endereço 0x0000 da Flash para o endereço 0x0102 da SRAM. Utilize um loop e endereçamento indireto pós incrementado.
- Para os próximos exercícios considere o seguinte: Um LED ligado ao PD4 e um "push-button" ligado ao PD2. O led é acionado com nível lógico '1' e, por sua vez, quando o botão é pressionado, o nível lógico '1' pode ser lido no pino correspondente.
- Desenhe o circuito correspondente.
- Se o botão estiver pressionado o LED deve estar ligado.
- Cada vez que o botão for pressionado, inverter o estado do LED (ligado -> desligado ou desligado -> ligado)
- Enquanto o botão estiver pressionado, o LED deve piscar.
- Implemente os três programas anteriores utilizando interrupção.
- Gerar delay de 1s bloqueante usando subrotinas com loop.
- Considere 8 leds ligados na porta PB e dois "push-buttons" ligados nos pinos PD2 e PD3. Os leds são acionados com nível lógico '1' e, por sua vez, quando os botões são pressionados, o nível lógico '1' pode ser lido no pino correspondente. Implemente um programa que "rotaciona" continuamente apenas um LED ligado. A rotação deve ocorrer a cada 1 segundo. A direção da rotação deve ser para direita se o botão em PD2 foi pressionado e para a esquerda se o botão em PD3 foi pressionado. Implemente duas versões do programa: a) SEM interrupção externa; b) COM interrupção externa. Crie uma subrotina de delay bloqueante.
- Implemente uma subrotina que realiza a decodificação de BCD (0-9) para display de 7 segmentos. A "passagem de parâmetro" e o "retorno" da subrotina deve utilizar o R17.
- Considere que o R20 tem um valor BCD de 2 dígitos. Chame a função anterior passando o cada nibble de R20 com parâmetro e escrevendo o resultado nos pinos da Porta B (PB7 .. PB0).
- Quantas vezes o loop é repetido?
ldi r18, 200
back:
ldi r19, 100
loop:
dec r19
brne loop
dec r18
brne back
</syntaxhighlight>
- Qual o valor de SP no momento em que o AVR estiver executando a linha de programa rotulada como "here"? Qual o conteúdo da pilha?
.cseg
.org 000000
Main:
ldi R16,FF
out SPH,R16
ldi R16,3F
out SPL,R16
rcall Test
halt
Test:
push R20
push R19
here:
nop
pop R19
pop R20
ret
</syntaxhighlight>