universidade federal de santa catarina

Propaganda
UNIVERSIDADE FEDERAL DE SANTA CATARINA
CENTRO TECNOLÓGICO
DEPARTAMENTO DE INFORMÁTICA E ESTATÍSTICA
Curso de Ciências da Computação
SEMINÁRIO ASSEMBLY:
Arquitetura PIC
DOUGLAS DAL POZZO
DIEGO VITTI
Florianópolis – Santa Catarina
Fevereiro – 2007
UNIVERSIDADE FEDERAL DE SANTA CATARINA
CENTRO TECNOLÓGICO
DEPARTAMENTO DE INFORMÁTICA E ESTATÍSTICA
Curso de Ciências da Computação
SEMINÁRIO ASSEMBLY:
Arquitetura PIC
Este trabalho destina-se a cumprir
requisito de avaliação da disciplina
INE5309 – Programação de sistemas,
turma 0432 de 2006.2 ministrada pelo
professor Dr. Antônio Augusto Fröhlich.
DOUGLAS DAL POZZO
DIEGO VITTI
Florianópolis – Santa Catarina
Fevereiro – 2007
Histórico
Os micro-controladores PIC originaram-se em 1975 a partir do projeto de um
processador de 16 bits da General Instrument's Microelectronics Division. Esse
processador, denominado CP1600, apresentava baixa performance de I/O e então essa
mesma companhia desenvolveu o primeiro micro-controlador PIC (PIC1650) para ser
usado em conjunto com o processador CP1600, aumentando a performance desse
processador com a passagem do controle de tarefas de I/O para o micro-controlador
PIC.
Em 1985 a
General Instrument's vendeu seu setor de microeletrônica. O novo
fabricante desativou quase todos os projetos que estavam então ultrapassados. No
entanto, os micro-controladores PIC foram renovados e continuaram a evoluir e hoje, a
Microchip Technology, atual fabricante dos micro-controladores PIC, oferece uma
ampla variedade de modelos.
O Que São Micro-controladores
Micro-controlador é um componente cujo núcleo possui os mesmos blocos funcionais
de um microprocessador. No entanto, sua aplicação é um pouco mais geral. Para isso,
no mesmo chip são embutidos interfaces de comunicação com o mundo externo. Nesse
sentido, um micro-controlador é um sistema completo, com sistema de memória,
sistema de entrada e saída, tudo isso em um único chip.
Caracterização da Arquitetura de Micro-controladores PIC
A arquitetura PIC possui uma família de micro-controladores de 12, 14 e 16 bits. É uma
arquitetura RISC baseada em outra arquitetura denominada arquitetura Harvard.
A arquitetura Harvard surgiu a partir da necessidade de melhorar o desempenho dos
micro-controladores. Para isso, ela define o uso de duas memórias separadas: uma
memória de dados e outra memória de programa (instruções). Essas duas memórias são
conectadas por barramentos distintos e isso permite o uso de diferentes tamanhos de
palavras para dados e instruções.
Diagrama de blocos da arquitetura Harvard e da arquitetura von-Neumann. A arquitetura Harvard possui
memórias para dados e instruções separadas o que possibilita diferentes tamanhos de barramentos. Isso
permite, no caso dos PICs, que todas as instruções ocupem uma única word de 14 bits, por exemplo,
enquanto os dados ocupem somente 8 bits.
Por pertencer a arquitetura RISC, os micro-controladores PIC apresentam instruções
simples. Isso implica em maior código para a programação de funções mais avançadas.
Em geral esses micro-controladores apresentam um conjunto entre 30 e 40 instruções.
Algumas aplicações dos Micro-controladores PIC
Os micro-controladores possuem larga aplicação em dispositivos eletrônicos que
requerem algum tipo de controle digital. Máquinas de lavar roupas, microondas,
telefones, ar-condicionado são alguns exemplos. Isso acontece pelas suas características
como simplicidade, facilidade de programação, baixo preço.
Diagrama de blocos do PIC16F84
Análise comparativa: arquitetura PIC vs. arquitetura MIPS
Para fins de comparação da arquitetura PIC com a arquitetura MIPS será utilizado o
micro-controlador PIC16F84 e o processador MIPS-RS2000. Cada implementação
específica de cada uma dessas arquiteturas possuem pequenas mudanças que não irá
interferir de modo considerável nessa comparação.
Número de instruções
PIC
MIPS-32
Arquitetura
PIC
35 instruções
RISC – Harvard
Um caminho de dados de 14 bits para instruções
Um caminho de dados de 8 bits para dados
65 instruções
MIPS
(contém instruções para operações em ponto
RISC –flutuante)
Von Neumann
Um único caminho de dados de 32 bits para
dados e instruções.
Modos de endereçamento
PIC
MIPS-32
3 modos de endereçamento
Endereçamento direto
Endereçamento indireto
Endereçamento relativo
5 modos de endereçamento:
- endereçamento em registrador
- endereçamento de base ou deslocamento
- endereçamento imediato
- endereçamento relativo ao PC
- endereçamento pseudo-indireto
Registradores / memória
PIC
MIPS-32
12 registradores
32 registradores de uso geral
memória acessada via instruções de
transferência de dados
Suporte a procedimentos
1. Parâmetros são carregados nos registradores de passagem de 1. Parâmetros são carregados nos registradores de passagem de
parâmetros
parâmetros
CALL <endereço do início do procedimento>
1. Endereço de retorno (PC + 1) é salvo no topo da pilha.
2. Endereço do início do procedimento é carregado em PC.
...
execução
...
resultado é colocado em um endereço para retorno
...
RETURN
1. O elemento do topo da pilha é retirado e carregado em no PC
jal <endereço do início do procedimento>
1. Endereço de retorno (PC + 1) é salvo em $ra.
2. Endereço do início do procedimento é carregado em PC.
...
execução
...
resultado é colocado em registrador de retorno
...
jr $ra
1. O endereço armazenado em $ra é carregado em no PC
Organização da Memória
A memória do micro-controlador PIC16F84 é dividida em 2 blocos: memória de
programa e memória de dados. Pela arquitetura Harvard, cada memória tem o seu
próprio barramento o que possibilita que ambas sejam acessadas dentro do mesmo ciclo
do relógio.
A memória de dados ainda pode ser dividida em 2 blocos: General Purpouse RAM
(GPR) e Special Function Registers (SFR). A memória denominada SFR é utilizada
para o controle do dispositivo. A memória GPR é usada para armazenamento das
variáveis e constantes do programa. Esta memória também contém a memória de dados
EEPROM (Electronically Erasable Programmable Read-Only Memory ) que mantém
seu estado mesmo quando o dispositivo estiver desligado e é acessada indiretamente
através de registradores de uso específico.
Organização da Memória de Dados
A memória de dados é dividida em dois blocos. O primeiro é a área de registro
de função especial (SFR) , enquanto o segundo é a área do registro de propósito
geral(GPR).
O SFR controla a operação do dispositivo.
Blocos de memória de dados são dispostos para ambos, a área de SFR e a área
de GPR.
A área de GPR é alocada para deixar mais que 116 bytes de RAM de
propósito geral. As áreas alocadas do SFR são para os registradores que controlam as
funções periféricas. Alocações requerem o uso do controle para seleção do bank. Esses
controles são localizados no registro de STATUS.
Figura abaixo mostra o mapa de organização da memória de dados.
Instruções MOVWF e MOVF podem mudar valores do registro W para qualquer
local no arquivo de registro (“FF”), e vice-versa.
A memória de dados pode ser acessada diretamente usando o endereço absoluto
de cada arquivo do registro ou indiretamente através do FILE SELECT
REGISTER(FSR). Endereçamento indireto usa o valor presente do RPO bit para acesso
nas áreas alocadas da memória de dados
ARQUIVOS DO REGISTRO DE PROPOSITO GERAL
Cada registro de propósito geral (GPR) tem 8 bits de tamanho e é acessado
diretamente ou indiretamente pelo FSR( seção 2.5).
Os endereços do GPR em Bank 1 são mapeados para endereços em Bank 0.
como exemplo, o local de endereço 0Ch ou 8Ch vão acessar o mesmo GPR.
REGISTROS DE FUNÇÕES ESPCECIAIS
O registro de função especial é usado pelo CPU e funções periféricas para
controlar a operação do dispositivo. Esses registros são de RAM estática.
Os registros de funções especiais podem ser classificados em duas classes, o
núcleo e periférico.
STATUS REGISTER
O registro de STATUS contém a posição aritmética da ALU,
RESET e a seleção de BANK para a memória de dados.
a posição de
O registro de STATUS pode ser o destino para qualquer instrução. Se o registro
de STATUS é a destino para uma instrução que afeta o Z, DC ou bits de C, então o
write para esses três bits é desabilitado.
Esses bits são programados ou zerados de acordo com a lógica do dispositivo.
Alem disso, os TO E PD bits não são writable. Portanto o resultado de uma
instrução com o registro de STATUS como destino pode ser diferente do que se
esperava.
Por exemplo, CLRF STATUS, vai limpar os três bits de cima e colocar o Z bit.
Isso deixa o registro de STATUS como ooou u1uu ( onde u = não mudado).
Só as instruções de BCF, BSF, SWAPF E MOVWF devem ser usados para
alterar o registro de STATUS, porque essas instruções não afetam qualquer bit de
STATUS.
PCL E PCLATH
O contador do programa especifica os endereços da instrução para localizar a
execução. O PC é 13bits de tamanho, o byte menor é chamado do registro de PCL. Esse
registro pode ser lido e escrito. O byte maior é chamado do registro de PCH. Esse
registro contem o PC<12;8> BITS.
STACK
A pilha contém o endereço de retorno da execução
A área de dados da pilha não faz parte do programa e o ponteiro da pilha não
pode ser lido ou escrito. O PC é deslocado na pilha quando uma instrução de chamada
é executada.
A pilha é deslocada no evento de RETURN, TETLW ou em uma
execução de instrução de RETFIE.
Depois de a pilha ter sido deslocada oito vezes, o nono deslocamento
sobrescrever o valor que foi armazenado no primeiro deslocamento.
deslocamento sobrescrever o segundo deslocamento e assim por diante.
O décimo
Conjunto de Instruções
As instruções da família PIC16CXX são formadas por words de 14 bits
divididas em um OPCODE que identifica a instrução e um ou mais operandos sobre os
quais a instrução irá operar. As instruções são classificadas em 3 tipos:
Byte-Oriented:
Para as instruções orientadas a bytes, f representa um file register e 'd' representa
o endereço de destino. O file register especifica qual registrador será usado pela
instrução.
Mnemonic, Operands
ADDWF
ANDWF
CLRF
CLRW
COMF
DECF
DECFSZ
INCF
INCFSZ
IORWF
MOVF
MOVWF
f, d
f, d
f
f, d
f, d
f, d
f, d
f, d
f, d
f, d
f
NOP
RLF
RRF
SUBWF
SWAPF
XORWF
f, d
f, d
f, d
f, d
f, d
Bit-oriented:
14-Bit Opcode
Status
MSb
LSb Affected
BYTE-ORIENTED FILE REGISTER OPERATIONS
Add W and f
1
0 0 0111 dfff
ffff
C,DC,Z
AND W with f
1
0 0 0101 dfff
ffff
Z
Clear f
1
0 0 0001 lfff
ffff
Z
Clear W
1
0 0 0001 0xxx xxxx
Z
Complement f
1
0 0 1001 dfff
ffff
Z
Decrement f
1
0 0 0011 dfff
ffff
Z
Decrement f, Skip if 0
1 (2)
0 0 1011 dfff
ffff
Increment f
1
0 0 1010 dfff
ffff
Z
Increment f, Skip if 0
1 (2)
0 0 1111 dfff
ffff
Inclusive OR W with f
1
0 0 0100 dfff
ffff
Z
Move f
1
0 0 1000 dfff
ffff
Z
Move W to f
1
0 0 0000 lfff
ffff
0 0 0000 0xx0
No Operation
1
0000
Rotate Left f through Carry
1
0 0 1101 dfff
ffff
C
Rotate Right f through Carry
1
0 0 1100 dfff
ffff
C
Subtract W from f
1
0 0 0010 dfff
ffff
C,DC,Z
Swap nibbles in f
1
0 0 1110 dfff
ffff
Exclusive OR W with f
1
0 0 0110 dfff
ffff
Z
Description
Cycles
Notes
1,2
1,2
2
1,2
1,2
1,2,3
1,2
1,2,3
1,2
1,2
1,2
1,2
1,2
1,2
1,2
Para as instruções orientadas a bit, 'b' representa a posição de um bit de um
campo do file register.
Mnemonic, Operands
BCF
BSF
BTFSC
BTFSS
f, b
f, b
f, b
f, b
14-Bit Opcode
MSb
LSb
BIT-ORIENTED FILE REGISTER OPERATIONS
Bit Clear f
1
0 1 00bb bfff
ffff
Bit Set f
1
0 1 01bb bfff
ffff
Bit Test f, Skip if Clear
1 (2)
0 1 10bb bfff
ffff
Bit Test f, Skip if Set
1 (2)
0 1 11bb bfff
ffff
Description
Cycles
Status
Affected
Notes
1,2
1,2
3
3
Literal and Control Instructions:
Mnemonic, Operands
ADDLW
ANDLW
CALL
CLRWDT
GOTO
IORLW
MOVLW
RETFIE
RETLW
RETURN
SLEEP
SUBLW
XORLW
k
k
k
k
k
k
k
k
k
14-Bit Opcode
Status
MSb
LSb Affected
BIT-ORIENTED FILE REGISTER OPERATIONS
Add literal and W
1
1 1 111x kkkk kkkk
C,DC,Z
AND literal with W
1
1 1 1001 kkkk kkkk
Z
Call subroutine
2
1 0 0kkk kkkk kkkk
Clear Watchdog Timer
1
0 0 0000 0110 0100 TO,PD
Go to address
2
1 0 1kkk kkkk kkkk
Inclusive OR literal with W
1
1 1 1000 kkkk kkkk
Z
Move literal to W
1
1 1 00xx kkkk kkkk
Return from interrupt
2
0 0 0000 0000 1001
Return with literal in W
2
1 1 01xx kkkk kkkk
Return from Subroutine
2
0 0 0000 0000 1000
Go into standby mode
1
0 0 0000 0110 0011 TO,PD
Subtract W from literal
1
1 1 110x kkkk kkkk
C,DC,Z
Exclusive OR literal with W
1
1 1 1010 kkkk kkkk
Z
Description
Cycles
Notes
Tabela : Descrição dos operandos das instruções.
O Algoritmo de Multiplicação
MULT
MULT
CLRF RESULTADO
LOOP
MOVF TEMPX,W
BTFSC TEMPY,0
ADDWF RESULTADO
BCF STATUS,C
RRF TEMPY,F
BCF STATUS,C
RLF TEMPX,F
MOVF TEMPY,F
BTFSS STATUS,Z
GOTO MULT
RETURN
Execução do algoritmo
MOVF
MOVWF
MOVF
MOVWF
CALL
MOVF
MOVWF
x,W
TEMPX
y,W
TEMPY
MULT
RESULTADO,W
z
;
;
;
;
;
;
;
;
;
;
;
clear file RESULTADO
endereço simbólico do inicio da subrotina
mover o conteúdo do endereço TEMPX para W
Bit test TEMPY, skip if 1th bit is clear
RESULT = W + f
bit clear STATUS, C = clear the carry flag
rotate right file
bit clear STATUS
rotate left file and store itself
mover o conteúdo do endereço TEMPY para W
bit test, skip if clear
Download