MIC29004-lista2-avr

De MediaWiki do Campus São José
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?

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.
  3. 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.
  4. Escreva um código que execute 1.000 vezes uma ação em loop.
  5. Escreva um código que execute 100.000 vezes uma ação em loop.
  6. Implemente um programa que some os seguintes números e salve o resultado em R20: 0x15, 0x30 e 0x22.
  7. 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.
  8. 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. 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.
  2. 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. Gerar delay de 1s bloqueante usando subrotinas com loop.
  3. 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.
  4. 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.
  5. 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).
  6. 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>