Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas

Arquitetura Interna do CPU: Memória, Unidade de Controlo e Interrupções, Notas de aula de Microcontroladores

Uma visão geral da unidade de processamento central (cpu) de um microcontrolador, incluindo a memória de programa e dados, a unidade de controle e os sistemas de interrupções. Descreve a estrutura e as funcionalidades de cada componente, além de detalhar os bits relevantes do registo intcon.

O que você vai aprender

  • Qual é a função do bit RP0 no registo TRISA?
  • Qual é a função da unidade de controle no CPU?
  • Como funciona o sistema de interrupções no microcontrolador?
  • Quais são as flags de interrupção no registo INTCON?
  • Quais são as diferentes memórias utilizadas no CPU?

Tipologia: Notas de aula

2022

Compartilhado em 07/11/2022

Adriana_10
Adriana_10 🇧🇷

4.5

(197)

226 documentos

1 / 30

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
DEPARTAMENTO DE ELECTROTECNIA
M
MI
IC
CR
RO
OC
CO
ON
NT
TR
RO
OL
LA
AD
DO
OR
RE
ES
S
João Paulo Baptista
Curso de Engenharia Electrotécnica
Electrónica e Computadores
Sistemas Digitais / 2001
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e

Pré-visualização parcial do texto

Baixe Arquitetura Interna do CPU: Memória, Unidade de Controlo e Interrupções e outras Notas de aula em PDF para Microcontroladores, somente na Docsity!

DEPARTAMENTO DE ELECTROTECNIA

M MIICCRROOCCOONNTTRROOLLAADDOORREESS

João Paulo Baptista

Curso de Engenharia Electrotécnica Electrónica e Computadores

Sistemas Digitais / 2001

1.2 Memória

Este bloco, constituído por dispositivos de memória (ROM, EPROM, E^2 PROM, FLASH EPROM, RAM, NVRAM, etc.) permite o armazenamento de instruções de programa e dados e pode ser logicamente dividida em:

  • Memória de Programa , onde são guardadas as instruções a executar pelo CPU;
  • Memória de Dados , onde são guardados todos os dados necessários ao processamento ou provenientes do processamento.

1.3 E/S (Entradas/Saídas)

Este bloco do computador permite a sua interligação com dispositivos periféricos para entrada ou saída de dados (teclado, monitor, impressora, sensores, conversores A/D ou D/A, etc.). Fisicamente é constituído por hardware que permite a transmissão/recepção de dados e, em alguns casos, a sua formatação.

1.4 Barramento de Memória e Barramento de E/S

Embora logicamente diferentes, normalmente estes 2 barramentos não são distintos fisicamente. São constituídos por condutores que permitem a transferência da informação entre o CPU e a memória ou os dispositivos de E/S. A constituição destes barramentos é a seguinte:

  • Barramento de Endereços , unidireccional, onde o CPU coloca o endereço de memória ou do dispositivo de onde quer ler ou onde quer escrever (p. ex. no Z80 é constituído pelas linhas A0..A15);
  • Barramento de Dados , bidireccional, onde circulam os dados resultantes da comunicação de ou para o CPU (p. ex. linhas D0..D7 no Z80);
  • Barramento de Controlo , bidireccional, que contém os sinais necessários para uma correcta implementação do protocolo de comunicação (p. ex. no Z80 as linhas WR, RD, MREQ, IOREQ, etc.).

1.5 Barramento de DMA (Direct Memory Access)

Na maior parte dos computadores, a transferência de dados entre os dispositivos de E/S e a memória pode ser feita sem a intervenção directa do CPU, libertando-o assim para outras tarefas que podem ser feitas em paralelo. Esta transferência de informação, que utiliza controladores específicos, é feita através do barramento de acesso directo à memória.

1.6 MicroControladores

O aumento da capacidade de integração, permitiu aos fabricantes a inserção, num único circuito integrado, dos diferentes componentes que implementam um computador. Assim, hoje em dia é possível encontrar uma infinidade de dispositivos que contém CPU, memória, portos de entrada/saída de dados e periféricos específicos para determinadas aplicações (conversores A/D e D/A, portos de comunicação série, geradores de PWM, temporizadores e contadores, dispositivos de watchdog, etc.). A maior parte das vezes estes μControladores disponibilizam os barramentos para o exterior permitindo assim a sua expansão através da

adição de circuitos periféricos. Na fig. 1 está indicada a constituição destes dispositivos de processamento, dos quais iremos estudar em pormenor 2 exemplos típicos.

2 μ Controlador PIC16F84A

Trata-se de um micro controlador desenvolvido pela Microchip (www.microchip.com), cuja implementação é conseguida num integrado de 18 pinos como se mostra na fig. 2.

Figura 2 – O μ C PIC16F84A

Neste circuito são disponibilizados para o exterior 2 portos de entrada/saída de dados – RB0..RB7 e RA0..RA4 o que permite a utilização de 13 bits de I/O, programáveis individualmente como entrada ou saída.

Através de 5 destes bits de I/O é possível aceder do exterior ao sistema de interrupções do micro controlador (RB0 e RB4..RB7).

Dado que estes circuitos possuem já um oscilador interno, a referência de oscilação é conseguida através da ligação de um cristal ou de uma malha RC nos pinos OSC1 e OSC2. Isto vai determinar, como será visto mais à frente, a velocidade de funcionamento do μC. A entrada CLKIN permite ainda que o sinal de relógio do μC seja fornecido a partir de um oscilador externo.

Uma tensão de 0V aplicada à entrada MCLR permite colocar o μC em estado de reset. Logo que esta tensão comute para VDD, o μC sai da situação de reset , começando a execução do programa a partir da instrução que se encontra no endereço 0 (vector de reset ). Os valores com que os diferentes registos são carregados nesta operação serão apresentados nos parágrafos seguintes.

O bit RA4 pode funcionar alternativamente como entrada de um sinal de relógio para um contador crescente de 8 bits que se encontra integrado no μC. O funcionamento deste contador / temporizador (TMR0) será objecto de um estudo mais aprofundado no parágrafo 4.

2.1.1 Arquitectura de ‘Harvard’

Uma das particularidades deste μC tem a ver com o tipo de arquitectura específica normalmente denominada de arquitectura de Harvard. Neste tipo de arquitectura, a memória de programa e a memória de dados estão fisicamente separadas o mesmo acontecendo com os respectivos barramentos de interligação com o CPU. Dado que o acesso a estas memórias é feito através de barramentos diferentes, é possível a utilização da memória de dados ao mesmo tempo que é feita a pesquisa de uma instrução da memória de programa. Ao contrário dos CPUs que utilizam uma arquitectura de Von-Newman, em que aquela distinção física não é verificada e o ciclo de funcionamento é feito através do sequenciamento de operações de ‘fetch’ e de execução, nos CPUs com arquitectura de Harvard a execução da instrução actual pode ser feita em simultâneo com o ‘fetch’ da próxima instrução. Este tipo de operação, que se esquematiza no diagrama temporal apresentado na fig. 4, permite obter uma velocidade de processamento que, teoricamente, será o dobro da obtida com um CPU com arquitectura Von-Newman.

Figure 4 – Execução com sobreposição

Claro que só teoricamente é que o aumento de velocidade é de 2 vezes. Com determinado tipo de instruções, todas aquelas que provocam uma alteração do contador de programa (Program Counter), esta sobreposição do ‘fetch’ e da execução falha, havendo necessidade de efectuar um novo ‘fetch’. Este problema é apresentado na fig. 5.

Figura 5 – Execução de instruções que alteram o PC

Quando está a ser executada a instrução 3 está em simultâneo a ser feito o ‘fetch’ da instrução

  1. Dado que o resultado da execução de 3 é um ‘salto’ para uma instrução que não é a 4, a instrução pesquisada tem de ser rejeitada para dar origem à pesquisa de uma nova instrução. Podemos ver aqui que a instrução CALL (assim como outras instruções) demora o dobro do tempo a ser executada.

2.2 Memória de Programa

O PIC16F84 dispõe de um contador de programa com 13 bits capaz de endereçar 8K posições de memória de 14 bits. Neste μC só se encontra implementado 1K com endereços de 0000h a 03FFh. A estrutura desta memória é apresentada na fig. 6. A estrutura de stack apresenta um máximo de 8 níveis o que impõe uma limitação em termos de chamadas a subrotinas dentro de outras subrotinas. O vector de reset corresponde à posição de memória 0000h enquanto que o vector de interrupção se encontra atribuído à posição 0004h.

Figura 6 – Memória de programa Figura 7 – Memória de dados

2.3 Memória de Dados

A memória de dados do 16F84 encontra-se dividida em duas áreas, conforme se pode ver na fig. 7. A primeira é a área correspondente aos Registos de Função Especial (SFR) enquanto que a segunda diz respeito aos Registos de Uso Geral. Os SFRs são utilizados para o controlo do μC.

Uma das particularidades desta memória é a sua divisão em dois Bancos (Banco 0 e Banco 1) sendo o acesso a cada um destes bancos controlado a partir do bit 5 do registo STATUS (RP0). De notar que, no que diz respeito aos registos de uso geral, o banco 1 destes registos encontra-se mapeado no banco 0 o que quer dizer que qualquer acesso ao banco 1 é feito na realidade sobre o banco 0.

2.3.2.1 Registo STATUS

O registo STATUS contém as flags ligadas à ALU, as flags de RESET e os bits de selecção do banco da memória de dados.

Bit 7 IRP – Bit de selecção de banco (endereçamento indirecto) Este bit não é utilizado no PIC16F84(A)

Bit 6-5 RP1:RP0 – Bit de selecção de banco (endereçamento directo) 00 = Banco 0 (00h – 7Fh) 01 = Banco 1 (80h – FFh) No PIC16F84(A) só é utilizado o RP

Bit 4 TO – Bit de time-out 1 = a seguir a um power-up, a uma instrução CLRWDT, a uma instrução SLEEP 0 = ocorreu um time-out do WDT

Bit 3 PD – Bit de power-down 1 = a seguir a um power-up ou a uma instrução CLWDT 0 = depois da execução de uma instrução de sleep

Bit 2 Z – flag de zero 1 = o resultado de uma operação lógica ou aritmética é zero 0 = o resultado de uma operação lógica ou aritmética é diferente de zero

Bit 1 DC – Digit carry / borrow 1 = carry existente do bit 3 para o bit 4 do resultado 0 = não existe carry do bit 3 para o bit 4 do resultado

Bit 0 C – Bit de carry / borrow 1 = existe carry do bit mais significativo do resultado 0 = não existe carry do bit mais significativo do resultado

R = bit de leitura W = bit de escrita U = não implementado -n = valor de reset

Figura 8 – Registo STATUS (endereço 03h, 83h)

2.3.2.2 Registo OPTION_REG

Trata-se de um registo que permite escrita e leitura e que contém vários bits de controlo para a configuração do divisor de frequência (prescaler) do TMR0 / WDT, da interrupção externa INT, do TMR0 e das polarizações (pull-ups) do PORTB.

R = bit de leitura W = bit de escrita U = não implementado -n = valor de reset

Bit 7 RBPU – Activação dos pull-ups internos do PORTB 1 = pull-ups internos desactivados 0 = pull-ups internos activados

Bit 6 INTEDG – Selecção do flanco de activação da interrupção INT 0 = interrupção no flanco descendente do sinal em RB0/INT 1 = interrupção no flanco ascendente do sinal em RB0/INT

Bit 5 T0CS – Selecção da fonte do sinal para o TMR 1 = transição no pino RA4/T0CKI 0 = ciclo interno de instrução

Bit 4 T0SE – Selecção do flanco do sinal que activa o TMR 1 = incrementa no flanco descendente do sinal em RA4/T0CKI 0 = incrementa no flanco ascendente do sinal em RA4/T0CKI

Bit 3 PSA – Bit de atribuição do prescaler (divisor de frequência) 1 = prescaler atribuído ao WDT 0 = prescaler atribuído ao TMR

Bit 2-0 PS2: PS0 – Programação do prescaler (divisor de frequência)

Figura 9 – Registo OPTION-REG (endereço 81h)

2.4 Registos PCL e PCLATH

O contador de programa (PC) especifica o endereço da instrução a ser pesquisada (‘fetch’) da memória de programa para ser executada. No PIC16F84 o PC tem uma largura de 13 bits, estando os 8 bits menos significativos colocados no registo PCL. Este registo pode ser lido ou escrito por software. O byte mais significativo do PC é designado por PCH e contém os bits 12:8 do contador de programa. Este registo não pode ser escrito ou lido directamente. Todas as operações que seja necessário efectuar sobre ele são feitas indirectamente sobre o registo PCLATH.

2.4.1 STACK

A estrutura de stack implementada no PIC16F84 permite a ocorrência de combinações de até 8 chamadas de subrotinas ou interrupções, permitindo armazenar os respectivos endereços de retorno. De notar que a utilização desta estrutura é da exclusiva responsabilidade da unidade de controlo do μC, não havendo por isso qualquer instrução de software que a permita manipular.

2.5 Endereçamento Indirecto: registos INDF e FSR

O registo INDF (endereço 00h / 80H) não é um registo físico. O acesso a este registo (leitura ou escrita) acede realmente ao registo cujo endereço se encontra no registo FSR. Este último registo é o ponteiro para as operações com endereçamento indirecto.

3 Portos de I/O

Alguns dos pinos dos portos de I/O apresentam funções alternativas para a utilização com alguns periféricos do μC. Geralmente, quando essas funções são utilizadas, o respectivo bit não pode ser utilizado como I/O.

3.1 Registos PORTA e TRISA

O registo PORTA implementa um porto de I/O bidireccional com 5 bits, estando ligado aos pinos exteriores do μC, RA0:RA4. O correspondente registo onde se define, para cada bit, se se trata de entrada ou saída de dados é o TRISA.

Colocando um bit do registo TRISA a 1 permite programar o respectivo bit do PORTA como entrada de dados já que, como se pode ver nas figs. 11 e 12, o correspondente andar de saída fica em estado de alta impedância. A escrita de um 0 num bit do registo TRISA programa o respectivo bit do PORTA como saída de dados (o estado do andar de saída vai depender do valor que se escreve na ‘Data Latch’). De notar que, após uma operação de reset, qualquer um dos bits de I/O fica programado como entrada de dados.

A leitura do registo PORTA permite fazer a leitura do estado dos pinos exteriores enquanto que uma operação de escrita sobre o mesmo registo coloca os valores de escrita nas ‘Data Latch’ de saída.

O bit RA4 apresenta uma multiplexagem com o sinal de entrada para o TMR0. Como entrada de dados este bit apresenta uma entrada do tipo Schmitt Trigger e como saída é do tipo dreno aberto.

Figura 11 – RA3:RA0 Figura 12 – RA

Exemplo de programação do PORTA com RA0:RA1 como saída de dados e RA2:RA4 como entrada de dados:

clrf PORTA ;Escreve 0s nas ‘Data Latch’ bsf STATUS,RP0 ;Muda para o banco 1 movlw b’00011100’ ;Palavra de programação movwf TRISA ;para ser colocada no TRISA bcf STATUS,RP0 ;Regressa ao banco 0

Características de corrente para o PORTA:

  • Corrente máxima fornecida por cada pino ………………….. IOHmax = 20mA
  • Corrente máxima absorvida por cada pino ……………...…... IOLmax = 25mA
  • Corrente máxima total fornecida pelo PORTA …………...… ΣIOHmax = 50mA
  • Corrente máxima total absorvida pelo PORTA …………...… ΣIOLmax = 80mA

4 Temporizador / Contador TMR

O periférico TMR0 apresenta as seguintes características principais:

  • Funções de temporizador ou contador de 8 bits
  • Possibilidade de leitura e de escrita do registo
  • Possibilidade de selecção de relógio interno ou externo
  • Selecção do flanco do sinal externo que incrementa o contador
  • Divisor de frequência de 8 bits programável por software
  • Permite gerar uma interrupção quando se verificar uma situação de overflow (passagem de FFh a 00h)

A figura seguinte apresenta um diagrama simplificado deste periférico.

Figura 15 – Diagrama de blocos do TIMER

4.1 Funcionamento

O Timer0 pode funcionar como temporizador ou como contador. A selecção do modo de funcionamento é feita através do bit T0CS ( Timer0 Clock Sourse, bit 5 do OPTION_REG).

No modo de temporizador, T0CS=0, o registo TMR0 incrementa em cada ciclo de instrução desde que não seja utilizado o Prescaler (divisor de frequência). Se, por software, se efectuar uma escrita do registo TMR0, o incremento será inibido durante 2 ciclos de instrução. Por exemplo, se o relógio do μC funcionar a 4MHz, e se não for utilizado o Prescaler, o incremento verifica-se de 1 em 1μS.

No modo de contador, T0CS=1, o registo TMR0 incrementa em cada flanco ascendente ou descendente do sinal presente no pino exterior RA4/T0CKI. O flanco que provoca o incremento é definido pelo bit T0SE (Timer0 Source Edge, bit 4 do OPTION_REG). Se T0SE=0 o flanco activo é o ascendente. Neste modo de funcionamento, o sinal proveniente do exterior deve obedecer a determinados requisitos que lhe permite uma sincronização com o relógio interno do μC.

4.2 Prescaler

O prescaler não é mais que um divisor de frequência programável e é constituído por um contador de 8 bits associado a um multiplexer de 8 ÷1, como se mostra na figura 16. Este prescaler é partilhado pelo Timer0 e pelo Watchdog Timer, não podendo contudo ser usado

em simultâneo pelos dois periféricos. Sendo assim, a atribuição do prescaler ao Timer significa que o Watchdog Timer funciona sem prescaler, e vice-versa.

O valor do prescaler não pode ser lido nem alterado por uma operação de escrita.

O bit PSA (PreScaler Assignement, bit 3 do OPTION_REG) permite fazer a atribuição do Prescaler ao Timer0 (PSA=0) ou ao Watchdog (PSA=1).

Os bits PS2:PS0 definem a taxa de divisão de frequência que será aplicada ao sinal de entrada. Quando o Prescaler está atribuído ao Timer0, podem ser utilizadas as taxas de 1:2, 1:4, …, 1:256. Para o caso do Watchdog as taxas possíveis são 1:1, 1:2, …, 1:128. Estes 3 bits encontram-se mapeados nos 3 bits menos significativos do OPTION_REG.

Figura 16 – Prescaler / Postscaler para TIMER0 e Watchdog

Quando o Prescaler estiver ligado ao Timer0, qualquer instrução que implemente uma escrita no registo TMR0 provoca um reset do Prescaler. No caso de estar ligado ao Watchdog, a instrução CLRWDT também provoca o reset do Prescaler.

4.3 Interrupção do Timer

Sempre que o incremento do registo TMR0 provocar a passagem de FFh para 00h (overflow) é activada a flag de interrupção T0IF (Timer0 Interrupt Flag, bit 2 do registo INCON). Se a respectiva interrupção estiver autorizada, como veremos mais à frente, é desencadeado um processo de interrupção do μC. Esta flag deve ser colocada em 0 por software.

5.1 Leitura da memória de dados EEPROM

Para ler uma posição de memória basta para isso colocar em EEADR o endereço pretendido e colocar em 1 o bit RD do registo EECON1 (bit 0). O resultado da leitura fica disponível no registo EEDATA no próximo ciclo de instrução.

R = bit de leitura W = bit de escrita U = não implementado -n = valor de reset

Bit 7:5 Não implementados – Lidos como ‘0’

Bit 4 EEIF – Flag de interrupção da operação de escrita na EEPROM 1 = operação de escrita terminada ( deve ser colocada em 0 por software) 0 = a operação de escrita não está completa ou não começou

Bit 3 WRERR – Flag de erro da EEPROM 1 = a operação de escrita foi terminada prematuramente 0 = operação de escrita terminada correctamente

Bit 2 WREN – Bit de autorização de escrita na EEPROM 1 = operação de escrita autorizada 0 = operação de escrita não autorizada

Bit 1 WR – Bit de controlo de escrita 1 = inicia uma operação de escrita. Este bit é colocado em 0 pelo hardware no fim da operação de escrita 0 = o ciclo de escrita na EEPROM está completo

Bit 0 RD – Bit de controlo de leitura 1 = inicia uma operação de leitura. Este bit é colocado em 0 pelo hardware no fim da operação de escrita 0 = operação de leitura não iniciada

Figura 17 – Registo EECON

Exemplo de leitura:

movlw endereço ;Endereço em EEADR movwf EEADR bsf STATUS,RP0 ;Comuta para banco 1 bsf EECON1,RD ;Activa bit de leitura bcf STATUS,RP0 ;Retorna ao banco 0 movf EEDATA,W ;Lê dados de EEDATA

5.2 Escrita na memória de dados EEPROM

O procedimento de escrita é iniciado com o preenchimento do registo de endereço e do registo de dados. A seguir deve ser iniciada uma sequência específica de instruções que permitem a escrita real do byte na posição de memória endereçada por EEADR.

Exemplo de escrita:

bsf STATUS,RP0 ;Comuta para banco 1 bcf INTCON,GIE ;Desactiva interrupções bsf EECON1,WREN ;Autoriza escrita movlw 55h ;Inicia processo de escrita movwf EECON movlw 0AAh movwf EECON bsf EECON1,WR ;Ordem de escrita bsf INTCON,GIE ;Autoriza interrupções bcf EECON1,WREN ;Inibe escrita bcf STATUS,RP0 Comuta para banco 0

A operação de escrita não será iniciada se a sequência mostrada acima não for executada (escrever 55h em EECON2, escrever AAh em EECON2, activar o bit WR). Dado que a sequência de escrita não deve ser interrompida, as interrupções, se activas, devem ser desactivadas.

Logo que a operação de escrita estiver terminada, o bit WR é colocado a 0 pelo hardware e o bit EEIF é colocado a 1 para sinalizar o fim da operação. Este bit, que pode ser utilizado pelo sistema de interrupções do μC, deve ser colocado a 0 por software.

Dado que o bit WREN (WRite ENable) funciona como uma segurança para o processo de escrita, prevenindo que, por um funcionamento deficiente, haja escritas esporádicas na memória, deve ser colocado a zero logo a seguir a ter dado a ordem de escrita.

6 Atributos específicos do CPU

O que permite distinguir um μC de outros processadores é o conjunto de circuitos internos que lhe permitem lidar com aplicações de tempo real. O PIC16F84 dispõe de um conjunto de atributos que permitem maximizar a fiabilidade do sistema onde está inserido, minimizar os custos através da possibilidade de eliminação de componentes externos, e uma poupança de energia através de modos de funcionamento específicos. Estes atributos são:

  • Selecção do oscilador
  • Reset − Power-on Reset (POR) − Power-up Timer (PWRT) − Oscilator Start-up Timer (OST)
  • Interrupções
  • Watchdog Timer (WDT)
  • SLEEP
  • Protecção do código
  • Identificação
  • Programação série no circuito (In-circuit serial programming)