segunda-feira, novembro 09, 2009

Microcontrolador FreeScale HCS08

Como parte dos preparativos para a minha palestra no Seminário "C & C++ para Sistema Embarcados 2009", eu ganhei um kit da FreeScale com o microcontrolador MC9S08LL16, da família HCS08. Neste post e nos próximos vou comentar um pouco sobre este microcontrolador e o kit.

O MC9S08LL16 é um descendente distante do microprocessador 6800 da Motorola. O 6800 foi um dos primeiros microprocessadores de 8 bits, competindo diretamente com o Intel 8080. Embora o 6800 em si não tenha sido usado em microcomputadores extremamente populares, ele gerou diversos descendentes, como o 6809 (usado no TRS-80 Color) e o 6502 (usado, entre outros lugares, no Apple ][ e no Atari 2600).

A família HCS08 possui uma quantidade muito grande de modelos. O MC9S08LL16 pode ser considerado um modelo intermidiário, se destacando por baixo consumo e um controlador de LCD integrado.

A Arquitetura do HCS08

Como o 68000, os microcontroladores HCS08 se baseiam na arquitetura Von Neumann (programa armazenado em memória junto com os dados), com um conjunto de instruções CISC (instruções complexas e especializadas).

O HCS08 possui poucos registradores:


O Acumulador A é usado por quase todas as instruções lógicas e aritméticas. Os registradores índice H e X são utilizados para endereçar a memória de forma indireta. Os registradores SP e PC são, respectivamente, o ponteiro para a pilha e o contador de programa. Por último, temos o registrador de status CCR que controla as interrupções e possui os flags com informações sobre o resultado das operações.

A família HCS trabalha com endereços de 16 bits, o que permite endereçar diretamente até 64KBytes (clique para ampliar):

No mapa acima, podemos observar no topo da memória os 16K de Flash (divididos em duas áreas de 8K, o que permite alterar uma área enquanto o código executa na outra) e os pouco menos de 2K de Ram na parte inferior. Os registradores para controle dos periféricos integrados no microcontrolador estão divididos em três partes. A primeira fica na parte baixa da memória, que pode ser acessada de forma muito eficiente por endereçamento direto (endereço de 8bits junto com a instrução). Como o espaço é insuficiente para todos os registradores, uma segunda parte fica em uma região mais alta (os high page registers). Por último temos os registradores usados pelo controlador de LCD.

No próximo post vamos examinar os periféricos integrados ao microcontrolador.

Nenhum comentário: