Clique sobre os objetivos listados abaixo para navegar até o conteúdo desejado.

As interrupções na execução de um processador podem ser causadas internamente ou externamente. As exceções são causadas internamente, ou pelo usuário.

Quando uma interrupção/exceção ocorre, o fluxo de execução atual é desviado para uma rotina de tratamento e depois retorna ao fluxo anterior após o devido tratamento da interrupção/exceção, exceto no caso de RESET.

Exemplo:

Fluxo normal > Interrupção > Tratamento > Fluxo normal
Fluxo normal > Exceção > Tratamento > Fluxo normal

A armv4 define um conjunto de vetores de interrupção, assim como em outros processadores, onde ficam armazenados endereços de rotinas para tratamento.

Nessa arquitetura, 7 vetores de interrupção, chamados de Hard Vectors(HV), são definidos e residem, por padrão, no intervalo inicial de memória 0x00000000 a 0x000001F. Esses HVs podem ser vistos abaixo como também com seus respectivos modos de operação.

Tab.1: Hard Vectors - ARM
Hard Vector Endereço Modo
Reset 0x00000000 SVC
Undefined Instruction 0x00000004 UNDEF
Software Interrupt 0x00000008 SVC
Prefetch 0x0000000C ABORT
Data Abort 0x00000010 ABORT
Address Exception 0x00000014 Reservado
Interrupt Request 0x00000018 IRQ
Fast Interrupt Request 0x0000001C FIQ

Independentemente da interrupção/Exceção, o processador é configurado/setado para o respectivo modo de operação associado ao Hard Vector, quando ocorre. Os registradores são salvos/restaurados de acordo com a tabela de modos de operação já vistos.

Dependendo da implementação do processador ARM, os Hard Vector podem residir em outras regiões de memória, como na região mais alta da memória 0xFFFFFFE0, por exemplo.

Quando uma interrupção das mostradas na tabela acima, os passos seguintes são executados automaticamente pelo processador:

  1. R14_modo_exceção <- PC ou PC + 4
  2. SPSR_modo_exceção <- CPSR
  3. CPSR[5:0] <- modo_exceção
  4. CPSR[6] <- Se modo_exceção == Reset or FIQ então 1, senão, sem alteração
  5. CPSR[7] <- 1
  6. PC <- hard_vector_exceção

Para retornar para o fluxo de execução, os passos abaixo devem executados:

  1. O CPSR deve ser restaurado
  2. PC deve ser restaurado

Mais informações sobre modos e flags, é recomendado visitar a seções Registradores.

Para um fluxo de execução correto do processador, deve haver uma prioridade na execução das interrupções. Essa prioridade pode ser vista na tabela abaixo em que sua coluna de prioridade é numerada de forma ascendente de importância.

Tab.1: Hard Vectors - ARM
Hard Vector Prioridade
Reset 0(Mais alta)
Undefined Instruction 1
Software Interrupt 2
Prefetch 3
Data Abort 4
Address Exception 5(Mais baixa)

A Reset tem a prioridade mais alta. Quando executada, todo o contexto atual de execução é descartado dando lugar a um novo contexto.

Data Abort tem a segunda prioridade mais alta para assegurar que erros de memória sejam tratados antes das demais interrupções.

A Fast Interrupt Request tem maior prioridade que a Interrupt Request assegurando que a FIQ irá executar antes da IRQ.

As interrupções Software Interrupt e Undefined Instruction possuem a mesma prioridade, mas não podem ocorrer ao mesmo tempo.

Nos próximos tópicos, a descrição das interrupções/exceções mostradas na tabela acima, bem com seus passos executados e como retornar para o fluxo anterior ou normal. Apesar de instruções ainda não foram abordadas, exemplos serão usados.

Quando o processador recebe um sinal de RESET, a execução do CPU é interrompida e os passos abaixo são executados:

  1. R14_svc <- valor imprevisível
  2. SPSR_svc <- CPSR
  3. CPSR[5:0] <- 0b010011 ; Supervisor
  4. CPSR[6] = 1 ; Desabilita FIQ
  5. CPSR[7] = 1 ; Desabilita Interrupções
  6. PC = 0x00000000 ; Hard vector de Reset

Como o RESET irá reiniciar a execução do processador, nenhum passo para retorno de fluxo é realizado.

Essa interrupção funciona tanto para execução de instrução no coprocessador quanto no processador. Quando o coprocessador não responde ou um instrução ilegal no processador é executada, essa interrupção é lançada.

Quando essa interrupção ocorre, os seguintes passos são executados automaticamente:

  1. R14_und <- PC + 4 ; retornar para fluxo
  2. SPSR_und <- CPSR
  3. CPSR[5:0] <- 0b011011 ; modo
  4. CPSR[6] <- sem alteração
  5. CPSR[7] <- 1 ; Desabilita interrupções irq
  6. C <- 0x00000004 ;Hard vector Undefined

Para retornar para o fluxo anterior, usa-se a instrução:
MOVS PC, R14

Essa instrução irá restaurar o CSPR e o PC respectivamente:
CPSR <- SPSR_und
PC <- R14_und

Uma instrução de software é invocada manualmente por meio da instrução SWI. Quando essa interrupção ocorre, os seguintes passos são executados automaticamente:

Quando essa interrupção ocorre, os seguintes passos são executados automaticamente:

  1. R14_svc <- PC + 4 ; retornar para fluxo
  2. SPSR_svc <- CPSR
  3. CPSR[5:0] <- 0b010011 ; modo
  4. CPSR[6] <- sem alteração
  5. CPSR[7] <- 1 ; Desabilita interrupções irq
  6. C <- 0x00000008 ;Hard vector SWI

Para retornar para o fluxo anterior, usa-se a instrução:
MOVS PC, R14

Essa instrução irá restaurar o CSPR e o PC respectivamente:
CPSR <- SPSR_svc
PC <- R14_svc

A interrupção PA acontece quando há algum erro(Abort) no sistema que gerencia a memória ao buscar(prefetch) uma instrução que é inválida e há uma tentativa de execução.

Quando essa interrupção ocorre, os seguintes passos são executados automaticamente:

  1. R14_abt <- PC + 4 ; retornar para fluxo
  2. SPSR_abt <- CPSR
  3. CPSR[5:0] <- 0b010111 ; modo
  4. CPSR[6] <- inalterado
  5. CPSR[7] <- 1 ; Desabilita interrupções irq
  6. C <- 0x0000000C ;Hard vector SWI

Para retornar para o fluxo anterior, usa-se a instrução:
SUBS PC, R14,#4

Essa instrução irá restaurar o CSPR e o PC respectivamente:
CPSR <- SPSR_abt
PC <- R14_abt

A interrupção DA acontece quando há algum erro(Abort) no sistema que gerencia a memória quando o acesso a um dado é inválido tanto na leitura quanto escrita. Essa exceção irá ocorrer antes de qualquer instrução ou interrupção/exceção que altere o estado do processador.

Quando essa interrupção ocorre, os seguintes passos são executados automaticamente:

  1. R14_abt <- endereço_instrução_abortada + 8 ; retornar para fluxo
  2. SPSR_abt <- CPSR
  3. CPSR[5:0] <- 0b010111 ; modo
  4. CPSR[6] <- inalterado
  5. CPSR[7] <- 1 ; Desabilita interrupções irq
  6. C <- 0x00000010 ;Hard vector SWI

Para retornar para o fluxo anterior, usa-se a instrução:
SUBS PC, R14,#8

Essa instrução irá restaurar o CSPR e o PC respectivamente:
CPSR <- SPSR_abt
PC <- R14_abt

Caso não haja necessidade de executar novamente a instrução, use a instrução: SUBS PC, R14,#8

A interrupção IRQ é acionada externamente através do pino IRQ do processador. Como tem prioridade menor que a FIQ, é mascarada ou não reconhecida por essa quando ocorrer.

Quando uma interrupção FIQ é detectada, os seguintes passos são executados automaticamente:

  1. R14_irq <- endereço_proxima_instrução + 4 ; retornar para fluxo
  2. SPSR_irq <- CPSR
  3. CPSR[5:0] <- 0b010010; modo
  4. CPSR[6] <- inalterado
  5. CPSR[7] <- 1 ; Desabilita interrupções irq
  6. C <- 0x00000018 ;Hard vector SWI

Para retornar para o fluxo anterior, usa-se a instrução:
SUBS PC, R14,#4

Essa instrução irá restaurar o CSPR e o PC respectivamente:
CPSR <- SPSR_irq
PC <- R14_irq

A FIQ é acionada externamente através do pino IRQ do processador e projetada para transferência de dados. Para desabilitar uma FIQ o bit F do CPSR deve ser setado apenas durante o modo privilegiado.

Quando essa interrupção é detectada, os seguintes passos são executados automaticamente:

  1. R14_fiq <- endereço_proxima_instrução + 4 ; retornar para fluxo
  2. SPSR_fiq <- CPSR
  3. CPSR[5:0] <- 0b010001 ; modo
  4. CPSR[6] <- inalterado
  5. CPSR[7] <- 1 ; Desabilita interrupções irq
  6. C <- 0x0000001C ;Hard vector SWI

Para retornar para o fluxo anterior, usa-se a instrução:
SUBS PC, R14,#4

Essa instrução irá restaurar o CSPR e o PC respectivamente:
CPSR <- SPSR_fiq
PC <- R14_fiq

  1. 28/01/2025 - versão inicial