Sistemas Embarcados Microcontroladores PIC Prof. Wanderley Introdução Os microcontroladores PIC são dispositivos fabricados pela Microchip São de arquitetura RISC com clock de até 40MHz, até 2048kword de memória de programa e até 3968 bytes de memória RAM Podem ter até 4 temporizadores/contadores, memória EEPROM interna, gerador/comparador/amostrador PWM, conversores A/D de até 12 bits, interface de barramento CAN, 12C, SPI entre outros Introdução Existem 3 famílias de PICs, de 12, 14 e 16 bits de memória de programa Todos possuem barramento interno de dados de 8 bits Quanto maior a palavra de programa, maior o número de instruções 12 bits = 33 instruções; 14 bits = 35 instruções; 16 bits = 77 instruções. Introdução Existem 3 famílias de PICs, de 12, 14 e 16 bits de memória de programa Todos possuem barramento interno de dados de 8 bits Quanto maior a palavra de programa, maior o número de instruções 12 bits = 33 instruções; 14 bits = 35 instruções; 16 bits = 77 instruções. Introdução EXEMPLOS DE CADA FAMÍLIA PIC 12 Bits 14 Bits 16 Bits 12C508 12C671 17C4X 12C509 12C672 17C75X 12CE518 12CE673 17C76X 12CE519 12CE674 18C2XX 16C54 14000 18C4XX 16C55 16C55X 18C858 16C56 16F62X 18F242 16C57 16C7X 18F252 16C58 16F7X 18F258 16C505 16F8X 18F442 16HV540 16F87X 18F877 Introdução A arquitetura dos PICs é otimizada para a execução de um pequeno conjunto de instruções, mas com velocidade muito alta. Exemplo: PIC da série 16 executa 5 MIPS (Milhões de Instruções por Segundo) a 20MHz ou 10 MIPS a 40 MHz. Introdução 1) 2) 3) 4) Características Básicas do Desenho interno dos PICs Capacidade de Pipeline; Capacidade de execução de um instrução por ciclo de máquina (4 ciclos de clock); Cada instrução ocupa apenas uma posição de memória de programa; Tempo de execução fixo para todas as instruções. Introdução Diferentes dispositivos PIC são semelhantes em sua arquitetura interna, o que facilita a migração entre microcontroladores. Os princípios gerais da arquitetura PIC são: Registrador de intercâmbio geral, ou registrador de trabalho (W); Registrador de armazenamento de flags (STATUS) Registrador de controle de interrupção (INTCON); Registrador de manipulação de dados nas portas (PORT ou GPIO). Memória de Programa Nas séries 12, 14 e 16 está embutida na pastilha Alguns dispositivos das séries 17 e 18 suportam memórias de programa externas Tecnologias de implementação de memória de programa: ROM – programada de fábrica; OTP (PROM) – Virgens de fábrica; EPROM; FLASH – pelo menos 1000 ciclos de gravação/apagamento. Memória de Programa A memória de programa é dividida em blocos ou páginas de 2kWord, devido a limitações imposta pela estrutura das instruções RISC 0x0000 ... 0x0004 ... 0x07FF Vetor de reset 0x0800 ... 0x0FFF Início da página 1 0x1000 ... 0x17FF Início da página 2 0x1800 ... 0x1FFF Início da página 3 Vetor de Interrupção Página 0 Final da página 0 Página 1 Final da página 1 Página 2 Final da página 2 Página 3 Final da página 3 Memória de Programa O mecanismo de paginação é transparente ao usuário Exemplo: … 0x07FE MOVF PORTA,W 0x07FF ADDLW 0x10 0x0800 MOVWF PORTB 0x0801 BCF INTCON,GIE … Memória RAM e Registradores A RAM é utilizada para abrigar os registradores internos. Divide-se em duas partes: Para abrigar registradores de funções especiais (SFR - Special Function Register); Para abrigar registradores de propósitos gerais (GPR – General Purpose Register). Registradores SFR são utilizados para controlar periféricos e dispositivos internos, flags de estado do processador, entre outras funções; Registradores GPR são utilizados para armazenamento temporário de dados do usuário. Memória RAM e Registradores Os registradores são muitas vezes referenciados pela letra f (file register) A forma de implementação das instruções limita o endereçamento a um máximo de 7 bits ou 128 registradores Para contornar tal limitação, criou-se o esquema de paginação também na memória RAM, de modo que existem bancos de memória de 128 posições Memória RAM e Registradores Alguns registradores SFR podem ser encontrados em dois ou até mesmo nos quatro bancos de memória RAM (registradores espelhados), permitindo a otimização de acesso de registradores muito usados (STATUS, INTCON, etc.) Alguns dispositivos PIC permitem o espelhamento de registradores GPR Alguns dispositivos permitem ainda espelhamento completo dos registradores GPR Memória RAM e Registradores Registradores SFR de destaque: STATUS – armazenamento de flags matemáticos e estado da CPU, além de bits de seleção do banco de memória RAM INTCON – Controle de interrupções OPTION_REG – Configurar o funcionamento de alguns periféricos internos PORTx – Leitura ou escrita de informações nos pinos externos TRISx – Controle da direção de funcionamento de cada pino da porta Registrador W Características: Usado como destido em operações lógicas ou aritméticas; Não pode ser utilizado como fonte de dados em operações de CPU (rotação de dados, incremento, decremento, etc.); Não está mapeado na memória RAM; Sua utilização principal é como ponte entre registradores f. NÃO É POSSÍVEL TROCAR DIRETAMENTE INFORMAÇÕES ENTRE OS REGISTRADORES f. MOVF (Copia de f para w) e MOVWF (Copia de w para f). Contador de Programa - PC Responsável pelo controle da sequência de execução das instruções O registrador PC aponta para a próxima instrução a ser executada pela CPU PC é dividido é dividido em dois registradores básicos: PCL, responsável pelos 8 bits menos significativos; PCH, responsável pelos 5 bits mais significativos. Somente PCL é diretamente acessível, podendo ser lido ou escrito pelo programa do usuário PCH pode ser alterado somente por intermédio do registrador PCLATH Contador de Programa - PC A interação entre os registradores PC, PCL e PCLATH pode ocorrer de quatro formas distintas: 1) Execução de uma instrução que tem como destino o registrador PCL 8 7 12 0 PCH PCL 5 PCLATH 7 8 0 Resultado da ALU Contador de Programa - PC 2) Execução de uma instrução GOTO 8 7 12 11 0 PCH PCL <4,3> PCLATH 7 11 Constante do opcode 0 Os bits 4 e 3 do PCLATH são usados para seleção de página da memória de programa. Contador de Programa - PC 3) Execução de uma instrução CALL 8 7 12 11 0 PCH PCL 13bitsx8 TOPO DA PILHA <4,3> PCLATH 7 11 Constante do opcode 0 Os bits 4 e 3 do PCLATH são usados para seleção de página da memória de programa. Contador de Programa - PC 4) Execução de instrução RETURN, RETLW ou REFIE 8 7 12 PCH 0 PCL 13 13bitsx8 TOPO DA PILHA Pilha Estrutura de dados com apenas um ponto de acesso (o topo da pilha) A principal função da pilha é armazenar endereços de retorno para sub-rotinas Alguns dispositivos permitem também o armazenamento de dados de usuário Operações básicas: PUSH – a CPU armazena informação na pilha; POP - a CPU busca informação no topo da pilha. A pilha não está localizada na área de memória RAM, e sim em uma região separada (inacessível diretamente ao usuário) dedicada Pilha Normalmente a pilha tem capacidade de 8 palavras do tamanho de PC. O endereço do topo não é acessível ao usuário. Utiliza-se uma estrutura de memória LIFO (Last IN – First Out) circular. O programador deve ter muito cuidado para não sobrescrever dados na pilha. Não há instruções para manipulação direta da pilha (isso é feito inderetamente através das instruções CALL, RETURN, RETLW e RETFIE). Interrupções Interrupção é um evento externo ao programa que provoca: A parada da sua execução; A verificação e tratamento do referido evento; Por fim, o retorno do programa ao ponto em que havia sido interrompido. Existem dois tipos básicos de interrupção: Não mascarável – o evento de interrupção é atendido imediatamente pela CPU; Mascarável – o evento de interrupção é atendido pela CPU desde que não esteja mascarado (o programa defino o momento em que pode ou não ser interrompido). Interrupções No PIC há apenas interrupções mascaráveis com um vetor de interrupção fixo (endereço 0x0004 na memória de programa). Linhas mais antigas do PIC possuem até quatro tipos de interrupção: Interrupção externa (INTF); Interrupção por mudança de nível lógico no portb (RBIF); Interrupção do timer0 (TOIF); Interrupção de periférico (EEPROM – EEIF, conversor A/D – ADIF). Alguns dispositivos de 8 pinos encontramos a interrupção GPIF, relativa à porta de entrada/saída (GPIO). Tais interrupções são geralmente controladas pelo registrador INTCON. Interrupções Dispositivos mais novos (onde incluiu-se um maior conjunto de periféricos) possuem uma nova arquitetura de interrupções. Ainda é baseada no registrador INTCON, mas com a adição de registradores destinados à sinalização e controle das interrupções dos novos dispositivos. A compatibilidade de software com os dispositivos mais antigos foi mantida. As interrupções de periféricos são controladas por 2 registradores: PIEx, para controle de habilitação individual das interrupções dos periféricos; PIRx, para sinalização individual dos eventos de interrupções dos periféricos. Interrupções xxIF – flag para habilitar/desabilitar interrupção xxIE – presença/ausença de interrupção