Os Registradores do Núcleo (Core) do Processador ARM Cortex-M3

microcontrolador STM32F103C8T6 destaque

Esse é o sétimo artigo da série escrita pelo engenheiro Ismael Lopes da Silva, exclusivamente para o portal Embarcados. Nessa série focarei no Microcontrolador da STMicroelectronics, o MCU STM32F103C8T6, que é um ARM Cortex-M3. Os pré-requisitos para uma boa compreensão dos artigos é ter o domínio da Linguagem C Embedded e conceitos de eletrônica.

Os Registradores do Núcleo (Core) do Processador ARM Cortex-M3

Os Registradores do core do processador ARM Cortex-M3, são de 32 bits, ilustrados a seguir:

Registradores
Figura 1 – O núcleo dos Registradores do processador ARM Cortex-M3

  • Os Registradores de R0 à R12 são de Propósito Geral;
  • O Registrador R13 é chamado de Stack Pointer (SP) ou Registrador Ponteiro de Pilha;
  • Ao lado do Registrador SP, temos dois Registradores, que são PSP (Process Stack Pointer) e o MSP (Main Stack Pointer), chamado de versão Banked do Stack Pointer;
  • O Registrador R14 é chamado Link Register (LR);
  • O Registrador R15 é chamado de Program Counter (PC) ou Registrador Contador de Programa;
  • Os cinco (5) Registradores especiais:
    • O Registrador Program Status Register (PSR) ou Registrador de Status de Programa;
    • Os três (3) Registradores de máscara das exceções:
      • O Registrador PRIMASK;
      • O Registrador FAULTMASK;
      • O Registrador BASEPRI.
    • O Registrador CONTROL.

Os Registradores de Proposito Geral

Os Registradores de R0 à R12 são de propósito geral para operação com dados.

O Registrador Ponteiro da Pilha – Stack Pointer (SP)

O Registrador Stack Pointer é o Registrador R13. Esse Registrador é usado para rastrear a seção stack da memória. Em operação modo Thread, o bit [1] do Registrador especial CONTROL indica o ponteiro da pilha a ser usado no Banker:

  • 0 = Ponteiro da pilha principal (MSP – Main Stack Pointer). Este é o valor quando resetado;
  • 1 = Ponteiro de pilha do processo (PSP – Process Stack Pointer).

No reset, o processador carrega o Registrador MSP com o valor contido no endereço 0x00000000.

O Registrador Link (LR)

O Registrador Link é o registro R14. Ele armazena o endereço de retorno das sub-rotinas, funções chamadas e exceções. No reset, o processador define o valor LR para 0xFFFFFFFF.

O Registrador Contador do Programa – Program Counter (PC)

O Registrador Program Counter é o Registrador R15. Ele contém o endereço da instrução atual do programa. No reset, o processador carrega o Program Counter com o valor do vetor de reset, que está no endereço 0x00000004.

O Registrador de Status do Programa – Program Status Register (PSR)

O Registrador de Status do Programa combina três Registradores, que são:

  • Registrador de Status do Programa de Aplicação (APSR – Application Program Status Register);
  • Registrador de Status do Programa de Interrupção (IPSR – Interrupt Program Status Register);
  • Registrador de Status do Programa de Execução (EPSR – Execution Program Status Register).

Esses Registradores são campos de bits mutuamente exclusivos no Registrador PSR de 32 bits. As atribuições de bits são:

Registradores
Figura 2 – Registradores mutuamente exclusivos APSR, IPSR e EPSR.

Acesse esses Registradores individualmente, ou como uma combinação de dois ou três Registradores, usando o nome do Registrador como um argumento para as instruções MSR ou MRS.

Registrador de Status do Programa de Aplicação (APSR)

O Registrador APSR contém o estado atual dos flags de condição da instrução que acabou de ser executada. As atribuições de bits são:

BitsNomeFunção
[31]NFlag Negativo
[30]ZFlag de Zero
[29]CFlag de Carry ou Borrow
[28]VFlag de Overflow
[27]QFlag Saturação
[26:0]Reservados
Tabela1 – Flags de condições do Registrador APSR

Registrador de Status do Programa de Interrupção (IPSR)

O Registrador IPSR contém o número do tipo da exceção da atual Rotina de Serviço de Interrupção (ISR). As atribuições de bits são:

BitsNomeFunção
[31:9]Reservados
[8:0]ISR_NUMBERO número da exceção atual
Tabela2 – Bits do Registrador IPSR

Os ISR_NUMBER são:

  • 0 = Modo Thread;
  • 1 = Reservado;
  • 2 = NMI;
  • 3 = HardFault;
  • 4 = MemManage;
  • 5 = BusFault;
  • 6 = UsageFault;
  • 7-10 = Reservado;
  • 11 = SVCall;
  • 12 = Reservado para Depuração (Debugging);
  • 13 = Reservado;
  • 14 = PendSV;
  • 15 = SysTick;
  • 16 = IRQ0;
  • n+15 = IRQ(n-1)a.

(a) número de interrupções, n, é definido pela implementação, e está na faixa de 1 à 240.

Registro de Status do Programa de Execução (EPSR)

O Registrador EPSR contém o estado do bit Thumb, e os bits de estado da execução. As atribuições de bits são:

BitsNomeFunção
[31:27]Reservado
[26:25], [15:10]ICI/ITIndica a posição interrompida de uma instrução contínua ou o estado de execução de uma instrução de TI
[24]TBit da instrução Thumb
[23:16]Reservado
[9:0]Reservado
Tabela 3 – Bits do Registrador EPSR

Tenta ler o Registrador EPSR diretamente através do software de aplicação, usando a instrução MSR, sempre retorna zero. Tenta escrever no Registrador EPSR, usando a instrução MSR no software de aplicação, é ignorado.

  • Instruções interrompíveis-continuáveis

Quando ocorre uma interrupção durante a execução de uma instrução LDM, STM, PUSH ou POP, o processador:

  • Temporariamente para a operação da instrução de múltiplo carregamento ou armazenamento;
  • Armazena o próximo operando do Registrador de uma operação múltipla, para os bits [15:12] do Registrador EPSR.

Após o serviço de interrupção, o processador:

  • Retorna ao Registrador apontado pelos bits [15:12];
  • Retoma a execução da instrução de carregamento ou armazenamento múltiplo.

Quando o Registrador EPSR mantém o estado de execução do ICI, os bits [26: 25,11: 10] são zerados.

  • Bloco If-Then

O bloco If-Then contém até quatro instruções seguidas de uma instrução de IT. Cada instrução no bloco é condicional. As condições para as instruções são todas iguais, ou algumas podem ser o inverso das outras.

  • Instruções Thumb

O processador Cortex-M3 suporta apenas a execução de instruções Thumb, portanto, bit [24] = T = 1. Tentar executar instruções quando o bit T é 0, resulta em uma falha.

Os Registradores de Máscara de Exceção

Os Registradores de máscara de exceção desabilitam o tratamento de exceções pelo processador. Desativar exceções em que podem afetar o tempo de tarefas críticas. Para acessar esses Registradores, use as instruções MSR e MRS, ou CPS para modificar o valor dos Registradores PRIMASK ou FAULTMASK.

Registrador de Máscara Prioritária – PRIMASK

O Registrador PRIMASK previne a ativação de todas as exceções com prioridade configurável.

Registradores
Figura 3 – Bits do Registrador PRIMASK

As atribuições de bits são:

BitsNomeFunção
[31:1]Reservado
[0]PRIMASK0 = sem efeito 1 = previne a ativação de todas as exceções com prioridade configurável
Tabela 4 – Bits do Registrador PRIMASK

Registrador de Máscara de Falha – FAULTMASK

O Registrador FAULTMASK previne a ativação de todas as exceções, exceto as Interrupções Não-Mascaráveis Interrupção (NMI – Non-Maskable Interrupt).

4 2
Figura 4 – Bits do Registrador FAULTMASK

As atribuições de bits são:

BitsNomeFunção
[31:1]Reservado
[0]FAULTMASK0 = sem efeito 1 = previne a ativação de todas as exceções com exceção as interrupções NMI
Tabela 5 – Bits do Registrador PRIMASK

Registro de Máscara com Prioridade Básica – BASEPRI

O Registrador BASEPRI define a prioridade mínima para o processamento de exceções. Quando o BASEPRI é definido como um valor diferente de zero, previne a ativação de todas as exceções com o mesmo valor ou menos nível de prioridade como o valor BASEPRI.

5 1
Figura 5 – Bits do Registrador BASEPRI

As atribuições de bits são:

BitsNomeFunção
[31:8]Reservado
[7:0]BASEPRI0 = sem efeito Não zero = define a prioridade base para o processamento de exceção. O processador não processa nenhuma exceção com um valor de prioridade maior ou igual a BASEPRI
Tabela 6 – Bits do Registrador BASEPRI

O Registrador CONTROL

O Registrador CONTROL controla a pilha usada e o nível de privilégio para a execução do software quando o processador estiver no modo Thread.

6 1
Figura 6 – Bits do Registrador CONTROL

As atribuições de bits são:

BitsNomeFunção
[31:2]Reservado
[1]SPSELDefine o Ponteiro de Pilha atualmente ativo: No modo Handler, este bit é lido como zero e ignora as escritas. O Cortex-M3 atualiza esse bit automaticamente no retorno de exceção. 0 = MSP é o Ponteiro de Pilha atual 1 = PSP é o Ponteiro de Pilha atual
[0]nPRIVDefine o nível de privilégio em modo Thread. 0 = Privilegiado 1 = Sem privilégio
Tabela 7 – Bits do Registrador CONTROL

O modo Handler sempre usa o MSP, como Ponteiro de Pilha; portanto, o processador ignora escritas explícitas no bit do Registrador CONTROL, quando está no modo Handler. A entrada e o retorno de exceção atualizam automaticamente o Registrador CONTROL.

Outros artigos da série

<< Níveis de Acesso ao Processador ARM Cortex-M3Alguns Registradores do Núcleo (Core) do Processador ARM Cortex-M3 na Pratica >>
Website | Veja + conteúdo

Nasci em 1969 na cidade de Campinas, São Paulo. Sou apaixonado por eletrônica, programação e outros assuntos relacionados. Sou técnico em eletrônica e engenheiro eletricista com ênfase em eletrônica. Um dos meus hobby é estudar eletrônica, LTSpice, MCU (Arduino, STM32 e outros). Tento acompanhar a evolução tecnológica, que é um desafio. Com o EMBARCADOS espero continuar aprendendo e também compartilharei informações.
ismael.lopes.br@hotmail.com
https://github.com/IsmaelLopesSilva

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Comentários:
Notificações
Notificar
guest
2 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Rafael Gebert
Rafael
17/08/2020 15:29

Achei muito bom seus artigos! Parabéns! Espero que você continue a postar mais material deste tipo. ps: se puderes fazer um artigo que foque em bootloader (e também em alterar endereços das ISR) seria ótimo!

Last edited 11 meses atrás by Rafael Gebert
Ismael Lopes da Silva
Ismael Lopes da Silva
Reply to  Rafael
17/08/2020 21:17

Rafael, grato por sua atenção em dar esse feedback. Que bom que está gostando dos artigos. Sim, farei artigos sobre bootloader, sequencia de reset, mapeamento de memória, prioridade de interrupções e outros. Valeu um abraço.

Talvez você goste:

Nenhum resultado encontrado.

Séries



Outros da Série

Menu