Arquitetura e Tecnologia de Computadores: Licenciatura em Telecomunicações e Informática
Arquitetura e Tecnologia de Computadores: Licenciatura em Telecomunicações e Informática
Arquitetura e Tecnologia de Computadores: Licenciatura em Telecomunicações e Informática
Informática
Paulo Cardoso
Grupo de Sistemas Embebidos
Departamento de Eletrónica Industrial
Escola de Engenharia
Universidade do Minho
Sumário
l Definições
l Caraterização
l Interrupções no 8051
l Configuração
l Operação
Interrupções
definição
l Interrupções
l Qualquer evento que interrompe a execução
normal do processador
l Externo ou interno ao processador
l Exemplos
l Lidar com um interruptor externo
l Receção de dados
l Polling
l Outra técnica de lidar com os eventos
l Ficar a aguardar que o evento ocorra
l O que fizemos até agora com os botões de pressão por
exemplo
Interrupções
definição
l Tipos de interrupções
l Interrupções de hardware
l Eventos externos (através da ativação de pinos do
processador ou através dos periféricos)
l Traps
l Eventos causados pelo programador (síncronos)
l Através de uma instrução própria do ISA
l Não existem na família 8051
l Exceções
l Eventos causadas pela execução “ilegal” do código
l Exemplo: divisão por zero, page fault
l Não existem na família MSC51
Interrupções
caraterização
l Fases
l O programa está a executar (A)
l É gerada a interrupção (B)
l Sinal externo num pino do micro ou periférico
l Pedindo a atenção ao processador
l Através da lógica interna do hardware do processador
l Programa em execução é suspenso
l Rotina de atendimento à interr. é executada (C)
l Também designadas por ISR (Interrupt Service Routine)
l ISR termina (D)
l Programa em execução é retomado (E)
Interrupções
caraterização
l Caraterização – graficamente
programa
(A) em execução
Endereço da próxima
instrução interrompida é
guardado na pilha
(B) Interrupção
Rotina de
atendimento da
(C) interrupção
(ISR)
(D) Retorno
l Interrupção no 8051
l Não são um “periférico”
l São um mecanismo que existe em qualquer processador
l No entanto, tal como nos periféricos
l A utilização das interrupções
l Está dividida em duas partes
l Configuração
l Parametrizadas através de registos de configuração (SFRs)
l Operação
l Envolve também manipulação de bits de SFRs
Interrupções
interrupções no 8051
l FontesC8051F388/9/A/B
de interrupção no C8051F388
l Compatíveis com o 8051 Table 16.1. Interrupt Summary
Interrupt Source Interrupt Priority Pending Flag Enable Priority
Address?
by HW?
Cleared
Vector Order Flag Control
Bit
Reset 0x0000 Top None N/A N/A Always Always
Enabled Highest
External Interrupt 0 0x0003 0 IE0 (TCON.1) Y Y EX0 (IE.0) PX0 (IP.0)
(INT0)
Timer 0 Overflow 0x000B 1 TF0 (TCON.5) Y Y ET0 (IE.1) PT0 (IP.1)
External Interrupt 1 0x0013 2 IE1 (TCON.3) Y Y EX1 (IE.2) PX1 (IP.2)
(INT1)
Timer 1 Overflow 0x001B 3 TF1 (TCON.7) Y Y ET1 (IE.3) PT1 (IP.3)
UART0 0x0023 4 RI0 (SCON0.0) Y N ES0 (IE.4) PS0 (IP.4)
TI0 (SCON0.1)
Timer 2 Overflow 0x002B 5 TF2H (TMR2CN.7) Y N ET2 (IE.5) PT2 (IP.5)
TF2L (TMR2CN.6)
l Outras fontes
SPI0 0x0033 6 SPIF (SPI0CN.7)
WCOL (SPI0CN.6)
MODF (SPI0CN.5)
Y N ESPI0
(IE.6)
PSPI0
(IP.6)
l 1. Priorização da interrupções
l Pode ser alterada a prioridade de uma interrupção
l Alta prioridade ou baixa prioridade
l Uma interrupção de alta prioridade pode interromper outra de
baixa prioridade
l Por defeito todas têm a mesma prioridade
Bit 7 6 5 4 3 2 1 0
Interrupções Name
Type R
PSPI0
R/W
PT2
R/W
PS0
R/W
PT1
R/W
PX1
R/W
PT0
R/W
PX0
R/W
configuração no 8051 Reset 1 0 0 0 0 0 0 0
C8051F388/9/A/B
SFR Address = 0xB8; SFR Page = All Pages; Bit-Addressable
Bit Name Function
l 1. Priorização da interrupções
7
SFR
Unused
6 Definition
PSPI0 Serial
Read = 1b, Write = Don't Care.
Registo IP
This bit sets the priority of the SPI0 interrupt.
0: SPI0 interrupt set to low priority level.
l Bit 7 6 5 4 3 2 1 0
1: SPI0 interrupt set to high priority level.
Name
5 PT2 PSPI0
Timer 2 InterruptPT2 PS0
Priority Control. PT1 PX1 PT0 PX0
SFR
4 Address
PS0= 0xB8; SFR Interrupt
UART0 Page = AllPriority
Pages;Control.
Bit-Addressable
Bit Name This bit sets the priority of the UART0 interrupt. Function
7 0: UART0
Unused Read = 1b,interrupt set toCare.
Write = Don't low priority level.
1: UART0 interrupt set to high priority level.
6 PSPI0 Serial Peripheral Interface (SPI0) Interrupt Priority Control.
3 PT1 Timer 1 Interrupt Priority Control.
This bit sets the priority of the SPI0 interrupt.
This
0: bit interrupt
SPI0 sets the priority of the
set to low Timer
priority 1 interrupt.
level.
0: Timer 1 interrupt set to low priority
1: SPI0 interrupt set to high priority level. level.
1: Timer 1 interrupt set to high priority level.
5 PT2 Timer 2 Interrupt Priority Control.
2 PX1 External Interrupt 1 Priority Control.
This bit sets the priority of the Timer 2 interrupt.
This bit sets
0: Timer the priority
2 interrupt set tooflowthepriority
External Interrupt 1 interrupt.
level.
0: Timer
1: External Interruptset
2 interrupt 1 set to low
to high priority
priority level.
level.
1: External Interrupt 1 set to high priority level.
4 PS0 UART0 Interrupt Priority Control.
1 PT0 Timer 0 Interrupt Priority Control.
This bit sets the priority of the UART0 interrupt.
This
0: bit sets
UART0 the priority
interrupt set tooflowthepriority
Timer 0level.
interrupt.
0: Timer 0 interrupt set to low priority
1: UART0 interrupt set to high priority level. level.
1: Timer 0 interrupt set to high priority level.
3 PT1 Timer 1 Interrupt Priority Control.
0 PX0 External Interrupt 0 Priority Control.
This bit sets the priority of the Timer 1 interrupt.
This bit sets
0: Timer the priority
1 interrupt set tooflowthepriority
External Interrupt 0 interrupt.
level.
0: Timer
1: External Interruptset
1 interrupt 0 set to low
to high priority
priority level.
level.
1: External Interrupt 0 set to high priority level.
2 PX1 External Interrupt 1 Priority Control.
Interrupções
configuração no 8051
l 1. Priorização da C8051F388/9/A/B
interrupções
l Se as interrupções têm a mesma prioridade Table 16.1. Interrupt Summary
O hardware atendeInterrupt
primeiro
Source
de acordo
Interrupt Priority
com a tabelaEnable
Pending Flag
Address?
by HW?
Cleared
l Vector Order Flag
Bit
l Na verdade funciona como uma priorização
Reset 0x0000 Top None N/A N/A Always
Enabled
External Interrupt 0 0x0003 0 IE0 (TCON.1) Y Y EX0 (IE.0)
(INT0)
Timer 0 Overflow 0x000B 1 TF0 (TCON.5) Y Y ET0 (IE.1)
External Interrupt 1 0x0013 2 IE1 (TCON.3) Y Y EX1 (IE.2)
(INT1)
Timer 1 Overflow 0x001B 3 TF1 (TCON.7) Y Y ET1 (IE.3)
UART0 0x0023 4 RI0 (SCON0.0) Y N ES0 (IE.4)
TI0 (SCON0.1)
Timer 2 Overflow 0x002B 5 TF2H (TMR2CN.7) Y N ET2 (IE.5)
TF2L (TMR2CN.6)
SPI0 0x0033 6 SPIF (SPI0CN.7) Y N ESPI0
WCOL (SPI0CN.6) (IE.6)
MODF (SPI0CN.5)
RXOVRN (SPI0CN.4)
SMB0 0x003B 7 SI (SMB0CN.0) Y N ESMB0
(EIE1.0)
Reserved 0x0043 8 N/A N/A N/A N/A
ADC0 Window Com- 0x004B 9 AD0WINT Y N EWADC0
pare (ADC0CN.3) (EIE1.2)
ADC0 Conversion 0x0053 10 AD0INT (ADC0CN.5) Y N EADC0
Complete (EIE1.3)
Interrupções
configuração no 8051
INT
NameDefinition
SFR TF1 25.3.
TR1 TF0 Control
TCON: Timer TR0 IE1 IT1 IE0 IT0
configuração no 8051
Type
Bit
R/W
7
R/W
6
R/W
5
R/W
4
R/W
3
R/W
2
R/W
1
R/W
0
Reset 0 0 0 0 0 0 0 0
Name TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
SFR Address = 0x88; SFR Page = All Pages; Bit-Addressable
Set to 11 is
Timer byenabled
hardware
bywhen Timer
setting 1 overflows.
this bit to 1. This flag can be cleared by software
l INT0, INT1
5 TF0
but is automatically cleared when the CPU vectors to the Timer 1 interrupt service
Timer 0 Overflow Flag.
routine. C8051F388/9/A/B
Set to 1 by hardware when Timer 0 overflows. This flag can be cleared by software
6 TR1 Timer 1 Run Control.
but is automatically cleared when the CPU vectors to the Timer 0 interrupt service
Timer
routine.1 is enabled by setting this bit to 1.
5
4 TF0
TR0 Timer 0 Overflow
Run Control. Flag.
SFR Definition 25.3.
Set toTCON:
Timer 01 is Timer
byenabled
hardware Control
bywhen Timer
setting 0 overflows.
this bit to 1. This flag can be cleared by software
but is automatically cleared when the CPU vectors to the Timer 0 interrupt service
3 IE1 External Interrupt 1.
routine.
Bit 7 6 is set by5hardware when
This flag 4 an edge/level 3 of type2 defined by 1IT1 is detected.
0 It
4 TR0 Timer 0 Run Control.
can be cleared by software but is automatically cleared when the CPU vectors to the
Name TF1 TR1
Timer 0 isInterrupt TF0by settingTR0
enabled 1.IE1
this bitintoedge-triggered IT1 IE0 IT0
External 1 service routine mode.
3
Type
2 IE1
R/W
IT1 External
R/W Interrupt
Interrupt 1 Type R/W 1.
Select. R/W R/W R/W R/W R/W
This flag
bit is set by hardware when an edge/level of type defined by IT1 is detected. It
Reset 0 0 selects whether0 the configured
0 INT1
0 interrupt will
0 be edge 0 or level sensitive.
0
can be cleared by software but is automatically cleared when the CPU
INT1 is configured active low or high by the IN1PL bit in the IT01CF register (see vectors to the
SFR Address = 0x88;External
SFR Interrupt
SFRDefinition
Page 1 service
16.7).
= All Pages; routine in edge-triggered mode.
Bit-Addressable
Bit
2 Name
IT1 0: INT1 is 1level
Interrupt Typetriggered.
Select. Function
7 TF1 1: INT1
This bit is edge
selects triggered.
whether
Timer 1 Overflow Flag. the configured INT1 interrupt will be edge or level sensitive.
1 IE0 INT1
Set tois1configured
External byInterrupt
hardware active
0. whenlow or high
Timer by the IN1PL
1 overflows. Thisbit in can
flag the be
IT01CF register
cleared (see
by software
SFR
This Definition
but isflag 16.7).
automatically cleared when the
is set by hardware CPU vectors
an edge/level to the
of type Timer by
defined 1 interrupt service It
IT1 is detected.
0: INT1
routine.
can is level by
be cleared triggered.
software but is automatically cleared when the CPU vectors to the
1: INT1 isInterrupt
External edge triggered.
0 service routine in edge-triggered mode.
6 TR1 Timer 1 Run Control.
1
0 IE0
IT0 External
Interrupt
Timer Interrupt
1 is 0enabled 0. setting this bit to 1.
Type Select.
by
This flag is set by
bit0selects hardware
whether when an edge/level of type defined by IT1 is detected. It
5 TF0 Timer Overflow Flag.the configured INT0 interrupt will be edge or level sensitive.
can be
INT0 is cleared
configuredby software butorishigh
active low automatically cleared
by the IN0PL bit inwhen theIT01CF
register CPU vectors to the
(see SFR
Set to 1 by
External hardware when Timer 0 overflows. This flag can be cleared by software
DefinitionInterrupt
16.7). 0 service routine in edge-triggered mode.
but is automatically cleared when the CPU vectors to the Timer 0 interrupt service
0 IT0 0: INT0 is level triggered.
Interrupt
routine. 0 Type Select.
1: INT0
This is edge whether
bit selects triggered.
the configured INT0 interrupt will be edge or level sensitive.
Interrupções
configuração no 8051
Bit 7 6 5 4 3 2 1 0
Reset 0 0 0 0 0 0 0 0
Interrupções Type
Reset
R/W
0
R/W
0
R/W
0
R/W
0
R/W
0
R/W
0
R/W
0
R/W
0
configuração no 8051 SFR Address = 0xA8; SFR Page = All Pages; Bit-Addressable
Bit Name Function
7 EA Enable All Interrupts. C8051F388/9/A/B
3b. Ativação de interrupções específicas
Globally enables/disables all interrupts. It overrides individual interrupt mask settings.
0: Disable all interrupt sources.
l 1: Enable each interrupt according to its individual mask setting.
Registo IE
6 Definition
SFR ESPI0 Enable
16.1. Serial Peripheral
IE: Interrupt Interface (SPI0) Interrupt.
Enable
l This bit sets the masking of the SPI0 interrupts.
0: Disable all SPI0 interrupts.
Bit 7 6 5 4 3 2 1 0
1: Enable interrupt requests generated by SPI0.
Name EA ESPI0 ET2 ES0 ET1 EX1 ET0 EX0
5 ET2 Enable Timer 2 Interrupt.
Type R/W This bitR/W
sets the masking
R/W of theR/W Timer 2 interrupt.
R/W R/W R/W R/W
0: Disable Timer 2 interrupt.
Reset 0 0 0 0 0 0 0 0
1: Enable interrupt requests generated by the TF2L or TF2H flags.
SFR
4 Address
ES0 = 0xA8; SFRUART0
Enable Page =Interrupt.
All Pages; Bit-Addressable
Bit Name This bit sets the masking of the UART0Function
interrupt.
7 EA 0: Disable
Enable AllUART0 interrupt.
Interrupts.
1: Enable UART0 interrupt.
Globally enables/disables all interrupts. It overrides individual interrupt mask settings.
3 ET1 0: Disable
Enable all interrupt
Timer sources.
1 Interrupt.
This bit sets the maskingaccording
1: Enable each interrupt to its
of the Timer individual mask setting.
1 interrupt.
6 ESPI0 0: Disable
Enable all Timer
Serial 1 interrupt.
Peripheral Interface (SPI0) Interrupt.
1: Enable interrupt requests
This bit sets the masking of thegenerated by the TF1 flag.
SPI0 interrupts.
2 EX1 0: Disable
Enable all SPI0Interrupt
External interrupts.
1.
1: Enable
This interrupt
bit sets requests
the masking generated
of External by SPI0.
Interrupt 1.
5 ET2 0: Disable
Enable external
Timer interrupt 1.
2 Interrupt.
1: Enable interrupt requests generated
This bit sets the masking of the Timer 2by the INT1 input.
interrupt.
1 ET0 0: Disable
Enable Timer
Timer 2 interrupt.
0 Interrupt.
1: Enable
This interrupt
bit sets requests
the masking generated
of the Timer 0by the TF2L or TF2H flags.
interrupt.
4 ES0 0: Disable
Enable all Timer
UART0 0 interrupt.
Interrupt.
1: Enable interrupt requests generated
This bit sets the masking of the UART0 by the TF0 flag.
interrupt.
0 EX0 0: Disable
Enable UART0Interrupt
External interrupt.0.
1: Enable
This UART0
bit sets interrupt.
the masking of External Interrupt 0.
3 ET1 0: Disable
Enable external
Timer interrupt 0.
1 Interrupt.
1: Enable interrupt requests generated
This bit sets the masking of the Timer 1by the INT0 input.
interrupt.
Interrupções
configuração no 8051
l Ativação de interrupções
l Para ativar as interrupções deve-se executar 3b. e
depois 3a.
Interrupções
operação no 8051
Bit 7 6 5 4 3 2 1 0
Reset 0 0 0 0 0 0 0 0
3
0 0
2 1
0
0
0
SFR
Bit Name Function
Name TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
7 TF1 Timer 1 Overflow Flag.
Reset
R/W
0
SetR/W
to 1 by hardware
but is0automatically
routine.
R/W when Timer R/W 1 overflows.
0 cleared when
R/W This flag
0 Timer 1 interrupt
0
R/W
service
0
l Resumindo...
C8051F388/9/A/B
Address?
by HW?
Cleared
Vector Order Flag Control
Bit
Reset 0x0000 Top None N/A N/A Always Always
Enabled Highest
External Interrupt 0 0x0003 0 IE0 (TCON.1) Y Y EX0 (IE.0) PX0 (IP.0)
(INT0)
Timer 0 Overflow 0x000B 1 TF0 (TCON.5) Y Y ET0 (IE.1) PT0 (IP.1)
External Interrupt 1 0x0013 2 IE1 (TCON.3) Y Y EX1 (IE.2) PX1 (IP.2)
(INT1)
Timer 1 Overflow 0x001B 3 TF1 (TCON.7) Y Y ET1 (IE.3) PT1 (IP.3)
UART0 0x0023 4 RI0 (SCON0.0) Y N ES0 (IE.4) PS0 (IP.4)
TI0 (SCON0.1)
...
Timer 2 Overflow 0x002B 5 TF2H (TMR2CN.7)
TF2L (TMR2CN.6)
Y N ET2 (IE.5) PT2 (IP.5)
If the interrupt service routine is defined without __using a register bank or with register bank 0 (__using 0), the
l As ISR
l São funções em C com um protótipo específico
void nomeFunc (void) __interrupt (#interrupt ) [__using (#banco)]
l __interrupt
l Indica qual a interrupção a ISR diz respeito
l E.g.:
3.8. void
INTERRUPT timer0_isr
SERVICE ROUTINES (void) __interrupt
CHAPTER 3. USING SDCC (1)
l __using
If the interrupt service routine is defined without __using a register bank or with register bank 0 (__using 0), the
compiler will save the registers used by itself on the stack upon entry and restore them at exit, however if such an
l permite alterar o banco de registos a usar
interrupt service routine calls another function then the entire register bank will be saved on the stack. This scheme
may be advantageous for small interrupt service routines which have low register usage.
If the interrupt service routine is defined to be using a specific register bank then only a, b, dptr & psw are saved
Não vamos usar nas aulas
and lrestored, if such an interrupt service routine calls another function (using another register bank) then the entire
register bank of the called function will be saved on the stack. This scheme is recommended for larger interrupt
Interrupções
operação no 8051
l Exemplo
#include <c8051f380.h>
char p2_digits[10] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x98};
volatile signed char total_half_secs = 0;// Numero total de meios segundos contados
volatile char cycle_cnt = 0;
void init_timer0();
void toggle_p27_half_second();
void display_time(char time);
l Exemplo (cont.)
void init_timer0(void) {
CKCON |= 0x02; // Divide clk por 48 => T=2us
TMOD |= 0x01; // Modo 16 bits
ET0 = 1; // Ativa interrupcao do timer 0
void start_timer0(void) {
TR0 = 1; // Inicia contagem
}
void stop_timer0(void) {
TR0 = 0; // Para contagem
}
Interrupções
operação no 8051
l Ao desenhar as ISR
l O código deve ser o mais curto possível
l Apenas o processamento mais importante deve ser
executado
l O restante é passado para o programa principal
l Visto que a execução de uma ISR está a bloquear
l Outras ISRs de menor ou igual prioridade
l O programa principal
Interrupções
operação no 8051
l Ao desenhar as ISR
l Não misturar interrupções com polling
l As prioridades de interrupção devem ser
cuidadosamente ponderadas
l Prioridade de interrupções críticas que requerem a
resposta rápida deve ser definida como alta
l Solicitações simultâneas de interrupções da
mesma prioridade levam ao atraso no seu
atendimento
l Solicitações múltiplas e simultâneas da mesma
interrupção podem causar falha no atendimento
de algumas delas
Interrupções
operação no 8051
l Ao desenhar as ISR
l Configurar o periférico e inicializar as variáveis
necessárias antes de ativar a interrupção respetiva
l Cada interrupção ativada deve ter uma ISR
Interrupções
operação no 8051
l Acesso atómico
l É um problema genérico no acesso a dados partilhados
l Não depende da arquitetura do micro
l Não vamos abordar aqui (à UC de Sistemas Operativos)
l É um problema no 8051 quando por exemplo usamos int
l O micro é de 8 bits à privilegiar signed char/unsigned char
l Operações de 16 bits (int p.ex) são mais demoradas
Interrupções
operação no 8051
l Acesso atómico
l Por desativação de interrupções na secção crítica
l O compilador fornece um mecanismo para este efeito
l Keyword __critical
l O sistema deixa de responder a todas as interrupções
l Potencial problema: A execução das interrupções foi atrasada
l Potencial problema: Se entretanto surgiu outra interrupção do
mesmo tipo só uma vez será executada
l Logo que reativadas as interrupções pendentes são executadas
l Acesso atómico
l Por desativação de interrupções na secção crítica
l Desativar as interrupções para uma função
int func() __critical {
...
}
mov r7,_tail
dec r7
mov a,r7
cjne a,_head,00124$
sjmp 00103$
Interrupções
operação no 8051
mov r6,_tail
mov r7,#0x00
dec r6
cjne r6,#0xff,00123$
dec r7
00123$:
mov r4,_head
mov r5,#0x00
mov a,r4
cjne a,ar6,00124$
mov a,r5
cjne a,ar7,00124$
sjmp 00103$
Interrupções
operação no 8051
__bit b;
b = ~b; /* ERRADO!!! Não faz o toggle Faz b=1!!!*/
b = !b; /* faz toggle de b */
Interrupções
operação no 8051
l Pilha
l Sempre que há uma interrupção
l O endereço de retorno é guardado na pilha
l Pelo hardware
l Os registos usados na ISR são guardados na pilha
l O compilador gera código para isso acontecer
l Se houver outras utilizações da pilha
l Invocações de interrupções dentro de outras interrupções
l Invocações de funções dentro de funções e, no limite
recursividade