Você está na página 1de 16

Laboratrio de Microprocessadores

Experincia 5 Interrupes

EXPERINCIA 5:
INTERRUPES Autores: Prof. Dr. Jorge Kinoshita, Prof. Dr. Carlos Eduardo Cugnasca e Prof. Dr. Andr Riyuiti Hirakawa Adaptado por Eduardo Harada, Roberto Caldas e Rogrio Kakehashi rev. 2004 Objetivo Esta experincia visa a familiarizao com os mecanismos de interrupo suportados pelo microprocessador MC68010, utilizado na Placa Experimental.

Introduo O que so interrupes? Uma interrupo um evento externo que causa o processador parar a execuo do programa corrente e desviar a execuo para um bloco de cdigo chamado rotina de interrupo (normalmente so decorrentes de operaes de E/S). Ao terminar o tratamento de interrupo o controle retorna ao programa interrompido exatamente no mesmo estado em que estava quando ocorreu a interrupo.

Figura 1

Escola Politcnica da USP/Departamento de Engenharia de Computao e Sistemas Digitais - PCS

Laboratrio de Microprocessadores

Experincia 5 Interrupes

Porm, para garantir o correto funcionamento deste mecanismo de transferncia de dados, preciso ter um sistema com uma organizao de E/S semelhante da figura a seguir:

Figura 2 Execuo das interrupes A execuo de interrupes necessita tanto de aes de hardware como de software, as quais, podem ser sumarizadas pelo seguinte fluxograma:

Escola Politcnica da USP/Departamento de Engenharia de Computao e Sistemas Digitais - PCS

Laboratrio de Microprocessadores

Experincia 5 Interrupes

Porm, para uma explicao um pouco mais didtica, vamos nos atentar para as seguintes figuras: Execuo de interrupo

Figura 3

Retorno ao programa principal

Escola Politcnica da USP/Departamento de Engenharia de Computao e Sistemas Digitais - PCS

Laboratrio de Microprocessadores

Experincia 5 Interrupes

Figura 4 Fontes de interrupo Perifricos no-chip A maioria dos processadores possui uma grande variedade de perifricos no prprio chip, tais como: Timers, portas paralelas, porta seriais; Interrupes ocorrem quando certas condies previamente estabelecidas foram atingidas.

Linhas de interrupo externas A maioria dos processadores possui uma ou mais linhas de interrupo externas que podem ser ativadas por um circuito externo. Interrupes por software Tambm chamadas excees ou traps, estas interrupes so geradas devido a um controle de software ou devido a uma operao iniciada por software. Exemplos: Diviso por zero, overflow, underflow, ....

Falha de hardware Gerada por uma falha tal como falha de alimentao ou erro de paridade em memria.

Escola Politcnica da USP/Departamento de Engenharia de Computao e Sistemas Digitais - PCS

Laboratrio de Microprocessadores Caractersticas bsicas das Interrupes

Experincia 5 Interrupes

Como foi apresentado, as interrupes possibilitam um tratamento mais eficiente das operaes de entrada e sada, e permitem melhor atender aos requisitos de aplicaes em tempo real. A requisio de interrupo pode ocorrer a qualquer momento (assincronamente), sendo ela indicada pela ativao de um "flag" pelo dispositivo perifrico. O microprocessador reconhece a interrupo, enviando sinais de controle, completa a execuo da instruo corrente, salva o contedo dos registradores de interesse (contador de programa, status, etc), e atende ao dispositivo perifrico que solicitou a interrupo, transferindo o controle para a rotina de tratamento da interrupo. Ao trmino da execuo desta rotina, o microprocessador desativa o "flag" de indicao de interrupo, restaura os registradores que foram salvos, e transfere o controle para a instruo seguinte ao ponto de interrupo do programa. Algumas aplicaes de tempo real envolvem mdulos de programas crticos que no podem ser interrompidos durante sua execuo. Algumas interrupes podem ter seu tratamento postergado, enquanto que outras necessitam de tratamento imediato (por exemplo, coleta de dados e alarmes). Em funo disso, e a maioria dos nomicroprocessadores apresentam interrupes mascarveis interrupes

mascarveis. Atravs de instrues apropriadas o programa pode habilitar ou desabilitar uma interrupo mascarvel, enquanto que a no-mascarvel dever ser sempre atendida, devendo ser reservada, assim, apenas para eventos de alta importncia. As interrupes dos microprocessadores costumam ser dos seguintes tipos: vetoradas ou no-vetoradas. Interrupo Vetorada Virtualmente cada processador reserva uma rea de memria especifica para tratar cada uma das interrupes. Estas localizaes so chamadas vetores de interrupo. Este tipo exige a identificao do dispositivo perifrico que solicita interrupo. Essa identificao utilizada para a localizao do endereo da subrotina de tratamento da interrupo, em uma tabela localizada em uma regio determinada da memria do microprocessador (vetor de interrupes). Exemplo: interrupes da famlia 68000.

Escola Politcnica da USP/Departamento de Engenharia de Computao e Sistemas Digitais - PCS

Laboratrio de Microprocessadores

Experincia 5 Interrupes

Figura 5

Interrupo no vetorada Sem vetor de interrupo, o programa deve verificar cada possvel fonte de interrupo para ver quem causou a interrupo, aumentando assim o tempo de resposta. Em geral uma causa da interrupo gerada e colocado em um registrador causa. Como resultado, o Sistema operacional (ou Kernel) pode imediatamente determinar a identidade do dispositivo que o interrompeu.

Interrupes simultneas Em sistemas com mais de uma interrupo, existe a possibilidade de ocorrerem pedidos de interrupo simultneos, devendo existir algum critrio para a escolha de qual ser atendida em primeiro lugar. Esse critrio, normalmente por prioridade, pode ser implementado de diversas formas: "daisy chain" ou circuitos de prioridade. Daisy Chain Nesse esquema, os dispositivos perifricos que podem solicitar interrupo so interligados, atravs de sinais de controle, em uma cadeia conhecida como "daisy chain", sendo o primeiro elemento ligado ao microprocessador. Em caso de pedido de interrupo, o microprocessador envia um sinal ao primeiro elemento; caso seja ele o autor do pedido, ele responde com o endereo da subrotina de tratamento; caso contrrio, ele repassa o pedido ao prximo dispositivo perifrico, que repetir o procedimento descrito. Dessa maneira, o primeiro elemento da cadeia dever corresponder ao de maior prioridade, e assim sucessivamente. Escola Politcnica da USP/Departamento de Engenharia de Computao e Sistemas Digitais - PCS 6

Laboratrio de Microprocessadores

Experincia 5 Interrupes

Figura 6

Circuitos de Prioridade Nesse esquema, um codificador de prioridades utilizado (por exemplo, de 8 para 3), fornecendo em sua sada o cdigo do pedido da interrupo de maior prioridade presente na entrada. Esse cdigo pode ser inspecionado pelo microprocessador para descobrir qual interrupo atender. Muitas vezes so disponveis esquemas para o mascaramento individual das interrupes, permitindo que uma interrupo alocada em uma linha de maior prioridade no seja atendida quando outra de menor prioridade ocorrer. Muitos processadores apresentam uma de suas interrupes como sendo nomascarvel, de forma que sempre que ela ocorrer, o microprocessador dever atendla. Ela deve ser utilizada com muito cuidado, devendo ser alocada a eventos de muita importncia, como por exemplo, queda da alimentao, sinal de emergncia, alarme, etc.

Interrupes na Famlia MC68000 Cada famlia de microprocessadores apresenta um tipo de implementao para as suas interrupes, sendo encontradas muitas particularidades no necessariamente encontradas em outras famlias. Recomenda-se, nesse ponto, que seja efetuada uma leitura atenta no captulo 6 de [1], que apresenta as caractersticas das interrupes da famlia MC68000. A seguir, sero resumidos os principais detalhes envolvidos. Trs linhas de pedido de interrupo so disponveis: IPL0/,IPL1/ e IPL2/. Esses trs sinais representam o cdigo da interrupo pedida: 0,0,0 indica nenhum pedido, enquanto 1,1,1 indica o pedido da interrupo mais prioritria. Os demais cdigos apresentam prioridades decrescentes ( 1,1,0, 1,0,1, 1,0,0, ...). Quando acionadas, essas linhas devero ficar estveis at o microprocessador sinalizar com o reconhecimento da interrupo ("interrupt acknowledge"), atravs dos sinais FC0, FC1 e FC2 simultaneamente em nvel 1, o que garante que o microprocessador reconheceu a interrupo. Nvel 0 indica ausncia de pedido. O microprocessador 7

Escola Politcnica da USP/Departamento de Engenharia de Computao e Sistemas Digitais - PCS

Laboratrio de Microprocessadores

Experincia 5 Interrupes

efetua o "de bounce" da interrupo por dois ciclos de clock. O nvel 7 sensvel a borda. Os bits I0, I1 e I2 do registrador de estado tem a funo de mscara de interrupes, bloqueando ou no determinados nveis de interrupes. O valor 0 nesses bits permite o reconhecimento de interrupes. O nvel 7 no pode ser mascarado, atuando como uma interrupo no-mascarvel. Exemplo: se I2, I1, I0 = 011 (3), os nveis de interrupo aceitas so 100 (4),101 (5),110 (6) e 111 (7). O microprocessador ignorar temporariamente os pedidos de interrupo de nvel igual ou inferior ao mascarado, at que alteraes na mscara venha permiti-las. Se o microprocessador receber uma solicitao de interrupo de cdigo maior que o programado (ou seja, prioridade superior), um processamento de exceo iniciado, prevendo os seguintes passos: cpia do registrador de estado em um registrador interno temporrio; S=1 e T = 0 (ou seja, o microprocessador vai para o estado "supervisor" e suspende a operao "tracing"), e associa a mscara ao nvel da interrupo; coloca o nvel da interrupo nas linhas A1, A2 e A3 de endereo, e obtm o nmero da posio no vetor de interrupes do dispositivo perifrico que gerou a interrupo (ver observao abaixo); coloca na pilha o contedo do contador de programa e do registrador de estado guardado internamente; retira o endereo da subrotina de tratamento da interrupo do vetor, e colocao no contador de programa. Observao: seguir: Vetoradas: O microprocessador busca o nmero da posio no vetor de interrupes no dispositivo perifrico que a gerou, devendo o mesmo responder fornecendo o sinal DTACK/, e um nmero de 8 bits, que usado para o clculo da posio no vetor de interrupes, na regio de $40 a $FF, correspondendo aos endereos de memria de $100 a $3FC. O endereo calculado pela frmula: endereo do vetor = nmero do vetor x 4 Autovetoradas: os microprocessadores da famlia MC68000 podem tratar as

interrupes de duas maneiras, como vetoradas ou como autovetoradas, descritas a

Escola Politcnica da USP/Departamento de Engenharia de Computao e Sistemas Digitais - PCS

Laboratrio de Microprocessadores

Experincia 5 Interrupes

O microprocessador busca o nmero da posio no vetor de interrupes no dispositivo perifrico que gerou a interrupo, devendo o mesmo responder fornecendo o sinal VPA/. Dessa forma, o microprocessador ir gerar o nmero da posio no vetor de interrupes de acordo com o nvel da interrupo que foi solicitada (at 7). Muitos dispositivos perifricos da famlia do MC68000 permitem a programao das posies do vetor de interrupes, enviando automaticamente o valor programado quando do reconhecimento de alguma interrupo. Caso nenhum dispositivo perifrico responda ao reconhecimento de uma interrupo, dever ser gerado o sinal BERR/, fazendo com que o microprocessador trate tal fato como uma interrupo espria, buscando o endereo da rotina de tratamento na posio $18 do vetor de interrupes. Durante o tratamento de uma interrupo, o seu nvel fica automaticamente inibido at o seu trmino. As subrotinas de tratamento de interrupes devem prever a preservao dos registradores por ela utilizados, por se tratar de um mdulo de programa ativado assincronamente, no se podendo prever, assim, a sua ocorrncia. Dessa forma, no incio de cada subrotina os registradores utilizados devem ser colocados na pilha, e retirados antes de seu retorno, que se d atravs da instruo RTE.

Parte Experimental 1 O Apndice II da apostila apresenta a estrutura bsica de um programa que utiliza as interrupes geradas pelo timer do 68681. A partir desse modelo crie um programa que gera uma onda quadrada na sada da porta paralela. 2 Gere a tabela de smbolos aps linkar o programa (Veja Apndice I). Veja o endereo de intbegin. 3 Aps carregar o programa, rode at a entrada da rotina de interrupo. Faa: .PC 1000 Escola Politcnica da USP/Departamento de Engenharia de Computao e Sistemas Digitais - PCS 9

Laboratrio de Microprocessadores GT #intbegin Onde: #intbegin o endereo da entrada de intbegin. 4

Experincia 5 Interrupes

Ao entrar na rotina de interrupo, verifique o topo da pilha. Veja o SR e o endereo de retorno empilhados.

Faa um "trace" na rotina de interrupo. Observe as instrues MOVEM ao entrar e sair da rotina de interrupo em intbegin. Explique a funo das instrues MOVEM? Observe a instruo que altera o valor de A5 em intbegin. Por que isso feito?

Compile a rotina de interrupo em modo large tanto para cdigo quanto para dado (+C +D). Faa novamente um trace na rotina de interrupo e veja como os dados no possuem mais A5 como registrador de base; assim sendo, ser que a instruo que altera A5 em intbegin ainda necessria?

Altere o perodo da onda quadrada. Busque uma relao com o clock do 68681. Estude a funo do registrador ACR.

O registrador do definido como STOP COUNTER COMMAND lido em intfunc para baixar o pedido de interrupo. E se voc retirar essa linha do cdigo o que acontece? Experimente.

Implemente um programa que apresenta a hora, minuto e segundo no display fluorescente (HH-MM-SS). A rotina de atualizao do Display deve estar obrigatoriamente no Programa Principal.

Bibliografia [1] MOTOROLA. M68000 - 8 -/16-/32-Bit Microprocessors User's Manual. N.J., EUA, Prentice-Hall, 6 edio, 1989. [2] MOTOROLA. M68000 - 16/32-Bit Microprocessor Programmer's - Reference Manual. N.J., EUA, Prentice-Hall, 4a. edio, 1984. 218p. [3] MOTOROLA MC68000 Educational Computer Board Users. Manual 2 edio, Motorola Inc, 1982. [4] MANX SOFTWARE SYSTEMS INC. Aztec C68k/ROM Cross Development System. MANX SOFTWARE SYSTEMS INC., Sherwsbury, N.J., EUA, verso 3.4, nov. 1987. [5] CUGNASCA, C.E. & ZERBINI, R.C. Experincia n 7 - Interrupes. EPUSP, 1990. Escola Politcnica da USP/Departamento de Engenharia de Computao e Sistemas Digitais - PCS 10

Laboratrio de Microprocessadores

Experincia 5 Interrupes

[6] Motorola - manual do 68681. http://www.motorola.com [7] http://www.di.ufpe.br/~mel/curso_pct/aulas/aula09.PDF [8] http://www.inf.ufsc.br/~lucia/Arquivos-INE5607/InterrupcaoExcecao.pdf

APNDICE I - CARACTERSTICAS DO COMPILADOR C


O compilador utilizado no laboratrio o m68k-coff-gcc cross-compiler. A seguir, sero apresentadas algumas informaes de interesse do programador. Comandos para a gerao do cdigo sobre Linux:
#!/bin/bash m68k-coff-gcc -m68000 -mshort -c -S $1.c m68k-coff-gcc -m68000 -mshort -c $1.c m68k-coff-ld -r -dp -e main -T ldscript $1.o -o exp5.o -Map mapa.txt m68k-coff-objcopy -O srec exp5.o exp5.srec Escola Politcnica da USP/Departamento de Engenharia de Computao e Sistemas Digitais - PCS 11

Laboratrio de Microprocessadores

Experincia 5 Interrupes

m68k-coff-objdump -D -mm68k exp5.o > exp5.sym


Para compilar um arquivo em C para cdigo objeto: m68k-coff-gcc -m68000 -mshort -c -S $1.c

Para montar um arquivo em cdigo Assembly para cdigo objeto:


m68k-coff-gcc -m68000 -mshort -c $1.c Para linkar os arquivos objetos em nico arquivo objeto: m68k-coff-ld -r -dp -e main -T ldscript $1.o -o exp5.o -Map mapa.txt (obs $1 o primeiro parmetro passado na linha de comando e deve ser o nome do arquivo do programa feito em c) Nota: 1) Uma das finalidades do arquivo ldscript descrever os endereos base para seo de cdigo, de dados e de dados no inicializados. A seguir segue um exemplo do arquivo: SECTIONS {.text 0x1000 : {*(.text)} .data 0x2000 :{*(.data) *(COMMON)} .bss 0x3000 :{*(.bss)} } 2) A opo Map mapa.txt gera a tabela de smbolos do programa no arquivo mapa.txt

Para converter o arquivo objeto final em S-records:


m68k-coff-objcopy -O srec exp5.o exp5.srec

Para visualizar o cdigo que ser enviado ao 68000: m68k-coff-objdump -D -mm68k exp5.o > exp5.sym b) Escopo das Variveis, Sub-rotinas e Funes. Esses elementos podem ser declarados em um mdulo de programa (elaborado em linguagem C ou assembly), e referenciados em outros mdulos. c) Passagem de Parmetros para Sub-rotinas. Os parmetros so colocados na pilha antes da chamada da sub-rotina, na ordem inversa da apresentao na chamada. Para acessar o ltimo elemento armazenado na pilha, deve-se considerar que a chamada de sub-rotina armazena o endereo de retorno na pilha (long word). Portanto, o ltimo elemento estar a quatro posies adiante do topo da pilha. d) Resultado de Funes. Quando o valor de retorno possuir 4 bytes ou menos ele ser devolvido em D0. Quando ele for uma estrutura de 8 bytes ele ser retornado em D0 e D1. Quando for uma
Escola Politcnica da USP/Departamento de Engenharia de Computao e Sistemas Digitais - PCS 12

Laboratrio de Microprocessadores

Experincia 5 Interrupes

estrutura de 6 bytes ou maior que 8 bytes o cdigo de chamada deve prover espao para o valor de retorno e passar o endereo desse espao no registrador A1. A funo pode ento preencher o espao diretamente. Quando a funo retorna, todos os registradores (exceto D0 quando usado para retornar o valor da funo) so restaurados com os valores anteriores a chamada da funo. f) Uso de Linguagem Assembly dentro da Linguagem C. O compilador utilizado permite que, dentro de um programa escrito em C, sejam includos trechos de programas escritos em linguagem assembly. Para isso deve-se usar asm(); Por exemplo: asm (move 1000, %sp); g) Nmeros Hexadecimais no Assembly do GCC. Nmero hexadecimal no Assembly do GCC deve ser representado como 0xNmero Ex: asm("move.l #intbegin,0x100"); h) Endereo de Execuo. O endereo do incio do programa a posio da funo main e no o endereo base para o cdigo definido no arquivo ldscript.

APNDICE II - PROGRAMA-EXEMPLO ESCRITO EM LINGUAGEM C /****************************************************** * Experincia 5 Interrupes * * Turma: Quinta feria * * Grupo: * * Murilo F. Freitas * * Ricardo M. Sato * * Srgio Kreiner * * * * Este Programa gera uma onda quadrada na porta * * paralela. A alternncia dos potencias da porta * Escola Politcnica da USP/Departamento de Engenharia de Computao e Sistemas Digitais - PCS 13

Laboratrio de Microprocessadores * realizada em cada interrupo do Timer do 68681 * ******************************************************/ /* enderecos da Duart */ unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned char char char char char char char char char char

Experincia 5 Interrupes

*ACR = (unsigned char *)0xff0009; /* End. do Auxiliar Command Reg */ *CTUR = 0xff000D; /* End. do Count Upper Reg. */ *CTLR = 0xff000F; /* End. do Output Port Config Reg. */ *OPCR = 0xff001B; /* end. do output port config. register */ *IMR = 0xff000B; /* end. do interrupt mask register A*/ *IVR = 0xff0019; /* end. do Interrupt Vector Register */ *MRB = 0xff0011; *CRB = 0xff0015; *SRB = 0xff0013; *CSRB = 0xff0013;

unsigned char *START = 0xff001d; unsigned char *STOP = 0xff001f; /* constantes para acessar #define OFF 0x00 #define ON 0xff #define M0 0x30 #define SM1X 0xa0 a porta A*/ /* valor para /* valor para /* valor para /* valor para apagar o display */ programar a porta como sada programar a porta no modo 0 programar a porta no submodo 1X

*/ */ */

/* variaveis inteiras globais */ unsigned char *PGCR = 0xfe8001; unsigned char *PACR = 0xfe800d; unsigned char *PADDR = 0xfe8005; unsigned char *PADR = 0xfe8011; unsigned char lixo; /*inicializa porta A*/ void inicpit() { *PGCR = M0; *PACR = SM1X; *PADDR = ON; *PADR = 0x00; }

/* ENDERECO CONTROLE GERAL DA PI/T */ /* ENDERECO CONTROLE PORTA A */ /* ENDERECO DIRECAO DA PORTA A */ /* ENDERECO DE DADOS DA PORTA A */

/* PROGRAMA PORTA NO MODO 0 /* PORTA A NO SUBMODO 1X */ /* PORTA A COMO SAIDA */

*/

void intfunc() { /* chamada por intbegin no tratamento da interrupo */ /* faz o tratamento */ lixo = *STOP; /* Le o Stop Counter Command para cair o pedido de interrupcao. Isso faz com que a DUART retire os sinais que esto nos 3 pinos de interrupes. */ /*Inverte o valor na porta A*/ if (*PADR == ON){ *PADR = OFF; Escola Politcnica da USP/Departamento de Engenharia de Computao e Sistemas Digitais - PCS 14

Laboratrio de Microprocessadores }else{ *PADR = ON; } /*reinicia o timer*/ lixo = *START; } void main () { inicpit();

Experincia 5 Interrupes

*ACR = 0xf0; *IMR = 0x08; /*interrupt mask register - habilita os tipos de interrupes (interrupes de caractere recebido, caractere transmitido, timer). Neste caso, o numero 0X08 habillita a interrupo de Timer.*/ *IVR = 0x40; /*interrupt vector register - o nmero 0x40 ser passado para o processador quando o Timer interromer.correspondendo a entrava no vetor de interrupo*/ /* Habilitando o vetor de interrupes *CTUR = 5; /*count timer upper register*/ *CTLR = 5; /*count timer lower register*/ lixo = *START; /* dispara o timer */ /* coloca em 0x100 o endereo da rotina de interrupo */ /* habilita as interrupes (nvel 4) alterando SR */ asm("move.l #intbegin,0x100"); /*coloca o ponteiro para a funo de interupo intbegin na posio 0x100 = (4 . 0x40)*/ asm("move #0x2000,%SR"); /*habilita a ocorrncia de interupes. Os 3 bits correspondentes ao nivel da interrupo esto em nvel 0, indicando que ele aceitara interupes de nveis 1 a 7. Quando o kit inicializado, o SR inicializa com valor 0x2700, indicando que nenhuma interupo ser aceita*/ for (;;) { } } asm(".globl intbegin"); /*declarao da funo de interrupo intbegin*/ asm("intbegin:"); asm(".even"); /*o SR que estava com valor 0x2000, ao entrar nessa rotina, passa para o valor 0x2400 porque no atender outras interrupes do mesmo nvel que a interrupo do Timer*/ asm("movem.l %d0-%d3/%a0-%a2/%a5,-(%sp)"); /*salva registradores na pilha do supervisor*/ Escola Politcnica da USP/Departamento de Engenharia de Computao e Sistemas Digitais - PCS 15

Laboratrio de Microprocessadores

Experincia 5 Interrupes

asm("jsr intfunc"); /*trata interrupo*/ asm("movem.l (%sp)+,%d0-%d3/%a0-%a2/%a5"); /*recupera valores dos registradores*/ asm("rte"); /*recupera SR e retorna*/

asm(".globl __main"); asm("__main:"); asm(".even"); asm("rts");

Escola Politcnica da USP/Departamento de Engenharia de Computao e Sistemas Digitais - PCS 16

Você também pode gostar