This shows you the differences between two versions of the page.
| pt:avr:architecture [2015/11/25 12:06] – Criação deste novo documento. artica | pt:avr:architecture [2020/07/20 12:00] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ====== Arquitetura ====== | ||
| + | |||
| + | O AVR tem um bus de 8-bits, através do qual os dados são movidos entre unidades lógicas aritméticas (ALU), registos de estados (SREG), controladores de programa (PC), memória de acesso aleatório (SRAM) e periféricos. O programa, uma matriz de comandos, é executado na ALU, vindo de um endereço na memória de acesso rápido, especificado no controlador do programa. A ALU tem 32 registos de finalidade genérica de 8 bits, os quais são usados como operandos na realização das operações. | ||
| + | |||
| + | [{{ : | ||
| + | |||
| + | ===== Pipeline de Instruções ===== | ||
| + | |||
| + | O AVR tem um // | ||
| + | |||
| + | ===== Registo de uso geral ===== | ||
| + | |||
| + | Os registos de uso geral R0-R31 funcionam como //buffers// (contentores temporários) para guardar e operar com os dados da memória e dos periféricos. Simplificam a arquitetura do processador, | ||
| + | Na programação em assembler é possível guardar os dados urgentes nos registos de uso geral. Na programação em C, e existindo a necessidade de guardar uma variável no registo de uso geral, esta variável tem que definida como “register”. Por exemplo: | ||
| + | |||
| + | Por exemplo: | ||
| + | |||
| + | <code c> | ||
| + | register char x; | ||
| + | </ | ||
| + | |||
| + | ===== Conjunto de instruções ===== | ||
| + | |||
| + | O conjunto de instruções definido na maioria dos AVRs consistem em 90-133 instruções diferentes. O ATmega128 tem 133 instruções. As instruções tem um, dois ou nenhum operando. A maioria das instruções realizam-se em apenas uma instrução, | ||
| + | |||
| + | <box 100% round # | ||
| + | |||
| + | Este é um pedaço de código escrito em Assembler e consiste em instruções puras, que adicionam 5 ao byte na memória de acesso aleatório no endereço $100 (256 em decimal). Estas instruções existem em todos os AVRs. | ||
| + | |||
| + | <code asm> | ||
| + | ldi r1, 5 ; lê a constante 5 para o registo de uso geral r1 | ||
| + | lds r2, $100 ; lê o byte do registo de memória r2 | ||
| + | add r2, r1 ; adiciona o valor de r1 ao do r2 | ||
| + | sts $100, r2 ; escreve o valor de r2 na memória | ||
| + | </ | ||
| + | |||
| + | </ | ||
| + | |||
| + | ===== Stack do programa | ||
| + | |||
| + | Uma //stack// é uma estrutura, onde a os últimos dados escritos na memória são lidos em primeiro lugar. As //stacks// dos AVR podem ser usados na operação de sub-rotinas, | ||
| + | O //stack// da série de microcontroladores AVR encontra-se localizada fisicamente na memória de acesso aleatório. Algumas séries de dispositivos AVR não dispõem de memória de acesso aleatório sendo a //stack// efetuada por uma unidade de memória pequena separada. É difícil encontrar compiladores para dispositivos sem memória de acesso aleatório. | ||
| + | Para programar numa linguagem de alto nível (por exemplo em Pascal, C, ou C++), pode dispensar conhecimento aprofundado sobre o funcionamento interno de um microcontrolador, | ||