MIC29004-lista2-avr

De MediaWiki do Campus São José
Revisão de 02h07min de 27 de junho de 2019 por Roberto.matos (discussão | contribs)
Ir para navegação Ir para pesquisar

Conceitos Gerais Microcontroladores

  1. O que é "power on reset"? Qual é a sua função?
  2. Qual a diferença entre microcontrolador e microprocessador?
  3. Explique a diferença da arquitetura Harvard e Von Neumann? Quais as vantagens e desvantagens?
  4. Cite periféricos comuns em microcontroladores modernos.
  5. Explique os conceitos básicos das arquiteturas CISC e RISC. Cite as principais diferenças, vantagens e desvantagens.

AVR

  1. Qual o circuito mínimo precisa ser montado para o funcionamento do AVR?
  2. O ATmega328p tem 16K de memória de programa. Qual o tamanho do PC desse microcontrolador especificamente?
  3. Qual a largura do barramento de dados da memória de programa e da memória de dados do AVR?
  4. A memória EEPROM no AVR é acessada via barramento de dados e endereço? Explique.
  5. 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?
  6. 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?
  7. Como a memória de programa (FLASH) é dividida?
  8. Comente sobre o funcionamento das instruçãoes SPM.
  9. Quais os tipos de enderaçamento para acessar a SRAM?
  10. 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?
  11. 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

  1. Explique a estrutura das portas de entrada e saída do AVR.
  2. 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

  1. Comente sobre como funciona a pilha do AVR? Quais suas funções? O que limita o seu tamanho?
  2. Qual a função do registrador SP?
  3. O que é o processo de inicialização da pilha? Por que esse processo é necessário e quando ele é obrigatório?
  4. Explique o que acontece com o SP e a pilha quando usamos push e pop, respectivamente.

Subrotina

  1. O que é uma subrotina em assembly?
  2. Quais as boas práticas na criação de subrotinas?

Interrupção

  1. Comente de forma geral o conceito de "Interrupção" no contexto de microcontroladores. Como funciona? Qual a sua utilidade?
  2. Como o controlador de interrupção é configurado?
  3. Descreva o que acontece com a pilha, o SP e o PC quando ocorre uma interrupção.
  4. O ATmega328p possui duas interrupções externas (INT0 e INT1). Quais controles de sensibilidade são possíveis de configurar para essas interrupções?
  5. O que é uma ISR? Quais são as boas práticas relacionadas com ISR?
  6. Defina o que é vetor de interrupção. Como é definido a prioridade das interrupções?

Linguagem assembly

  1. O que é um rótulo e qual é a sua utilidade? O rótulo está associado com qual região de memória?
  2. O que é uma diretiva de compilação e qual é a sua utilidade? Dê exemplos. Esses “comandos” são executados pelo microcontrolador? Explique.

Programação Assembly

  1. Carregue na SRAM com 10 valores sequenciais a partir do endereço 0x0102 usando endereçamento de dados indireto com pós-incremento.
  2. 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>

  1. 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.
    1. Desenhe o circuito correspondente.
    2. Se o botão estiver pressionado o LED deve estar ligado.
    3. Cada vez que o botão for pressionado, inverter o estado do LED (ligado -> desligado ou desligado -> ligado)
    4. Enquanto o botão estiver pressionado, o LED deve piscar.
    5. Implemente os três programas anteriores utilizando interrupção.
    6. Monte o circuito e grave no Arduino Uno. Problemas: a) Trepidação da tecla no exercício de inversão; b) Delay no exercício de pisca LED.
    7. Gerar delay de 1s bloqueante usando subrotinas com loop.
    8. Gerar delay de 1s usando o timer.
    9. Gerar delay de 1s usando interrupção de timer.
  2. 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.
  3. 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.
  4. Quantas vezes o loop é repetido?

ldi r18, 200 back: ldi r19, 100 loop: dec r19

   	brne loop
	dec  r18

brne back </syntaxhighlight>

  1. 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>