O design do Processador Cortex-M3 e seus periféricos - Embarcados
Esse é o segundo artigo de uma nova 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.
Figura 1 – O core do Cortex-M3
O diagrama mostrado na figura 1, é o core do projeto de um processador Cortex-M3. Essa é a parte da propriedade intelectual da ARM, onde os fabricantes licenciados integram seus projetos. O processador Cortex-M3 é construído sobre um núcleo de processador de alto desempenho, com uma arquitetura Harvard de três estágios, tornando-o ideal para aplicativos embarcados exigentes.
O processador oferece excepcional eficiência de energia por meio de um conjunto de instruções eficiente e design amplamente otimizado, fornecendo hardware de processamento de ponta, incluindo computação opcional de ponto flutuante de precisão única, uma faixa de ciclo único, recursos de multiplicação, multiplicação com capacidade de acumular, aritmética saturante e divisão de hardware dedicada.
Para facilitar o design de dispositivos sensíveis ao custo, o processador Cortex-M3 implementa componentes de sistema fortemente acoplados que reduzem a área do processador e melhoram significativamente recursos de manipulação de interrupção e depuração do sistema. O processador Cortex-M3 implementa uma versão do conjunto de instruções Thumb® com base na tecnologia Thumb-2, garantindo alta densidade de código e requisitos de memória de programa reduzidos.
Os recursos do core do Processador Cortex-M3
O núcleo do processador implementa a arquitetura ARMv7-M, com os seguintes recursos principais:
Arquitetura do processador Harvard, permitindo busca simultânea de instruções e dados;
Pipeline de três estágios;
Subconjunto Thumb-2 (ISA), composto por todas as instruções básicas Thumb-2, 16 bits e
Multiplicação de ciclo único de 32 bits;
Estados de depuração;
Modos Handler e Thread;
Baixa latência as Rotinas de Serviços de Interrupção (ISR):
Economia (saving) e restauração do estado do processador, sem sobrecarga de instrução. O vetor de exceção é buscado da memória em paralelo com o estado de saving, habilitando uma entrada mais rápida do ISR;
Suporte para interrupções atrasadas;
Interface firmemente acoplada para interromper o controlador, permitindo eficiência processamento de interrupções atrasadas;
Encadeamento de interrupções, permitindo o processamento de interrupções consecutivas sem a sobrecarga de economia e restauração do estado entre interrupções.
Instruções de interrupção-continuação LDM/STM e PUSH/POP;
Suporte ao estilo ARMv6 BE8/LE, que é a arquitetura anterior ao Cortex-M3.
O processador Cortex-M3 contém:
13 Registradores de propósito geral;
Um Registrador de Link (LR – Link Register);
Um Contador de Programa (PC – Program Counter);
Dois bancos de Registradores de Stack Pointer (SP – Stack Pointer);
Seis Registradores especiais:
Status do Programa (xPSR – Program Status Register), PRIMASK, FAULTMASK, BASEPRI e o Registrador de CONTROLE (CONTROL Register).
O processador possui uma interface Harvard para permitir buscas simultâneas de instruções com carregamento/armazenamento de dados. Os acessos à memória são controlados por:
Uma LSU (Load Store Unit) separada que desacopla as operações de carregamento e armazenamento da Unidade Aritmética e Lógica (ALU);
E por uma unidade de pré-busca (PreFetch Unit – PFU), de três words.
NVIC – Nested Vectored Interrupt Controller (Controlador de Interrupção Vetorial Alinhado)
O NVIC está firmemente acoplado ao núcleo do processador. Isso facilita a exceção de baixa latência em processamento. Os principais recursos incluem:
Um número configurável de interrupções externas, de 1 a 240;
Um número configurável de bits de prioridade, de três a oito bits;
Suporte a interrupção de nível e pulso;
Repriorização dinâmica de interrupções;
Agrupamento de prioridade;
Suporte para encadeamento de interrupções;
Estado do processador salvo automaticamente na entrada de interrupção e restaurado no retorno da interrupção, sem sobrecarga de instrução.
Bus Matrix (Matriz de Barramento)
O Bus Matrix conecta o processador e a interface de depuração aos barramentos externos. A matriz do barramento faz interface com os seguintes barramentos externos:
Barramento ICode. É um barramento para instruções e busca de vetores no espaço de código. É um barramento AHB-Lite de 32 bits;
Barramento DCode. É um barramento para carregamento/armazenamento de dados e acesso à depuração no espaço de código. É um barramento AHB-Lite de 32 bits;
Barramento do Sistema (System Bus). É um barramento para busca de instruções e vetores, carregamento/armazenamento de dados e acesso à depuração no espaço do sistema. É um barramento AHB-Lite de 32 bits;
PPB (Private Peripheral Bus). É um barramento para carregamento/armazenamento de dados e acesso à depuração no espaço PPB. É um barramento APB (v2.0) de 32 bits.
O Bus Matrix também controla o seguinte:
Acessos não alinhados. A matriz do barramento converte acessos desalinhados do processador em acessos alinhados;
Bit-banding. A matriz de barramento converte acessos de bit-band alias em acessos para dentro da região de bit-band. Ele executa: extração de campo de bits para cargas de bit-band, e leitura-modificação-escrita atômica para armazenamento de bit-band.
Buffer de escrita. A matriz de barramento contém um buffer de escrita de uma entrada para desacoplar barramentos do núcleo do processador.
FPB (Flash Patch and Breakpoint)
A unidade FPB implementa pontos de interrupção de hardware e prove os caminhos de acessos do espaço de código para o espaço do sistema. O FPB possui oito comparadores, como segue:
Você pode configurar seis comparadores de instruções individualmente para remapear a instrução busca do espaço de código para o espaço do sistema, ou executa um ponto de interrupção de hardware;
Dois comparadores literais que podem remapear acessos literais do espaço de código para o espaço do sistema.
A unidade DWT incorpora a seguinte funcionalidade de depuração:
Quatro comparadores que você pode configurar como watchpoint de hardware, um gatilho ETM (Embedded Trace Macrocell), gatilho de evento do PC (Program Counter) ou gatilho de evento de endereço de dados;
Vários contadores ou um gatilho de evento de correspondência de dados para criação de perfil de desempenho;
Configurável para emitir amostras de PC (Program Counter) em intervalos definidos e emitir evento de interrupção de informação.
O ITM é uma fonte de rastreamento orientada a aplicativos que suporta rastreamento de eventos de aplicativos e depuração no estilo printf. O ITM fornece as seguintes fontes de informações de rastreamento:
Rastreamento de software. O software pode escrever diretamente nos Registradores de estímulo do ITM. Isso causa pacotes a serem emitidos;
Rastreamento de hardware. Esses pacotes são gerados pelo DWT e emitidos pelo ITM;
Carimbo de data e hora (Timestamps). Os carimbos de data e hora são emitidos em relação aos pacotes.
Uma MPU opcional está disponível para o processador para fornecer proteção de memória. A MPU verifica permissões de acesso e atributos de memória. Ela contém oito regiões e uma região de plano de fundo opcional que implementa os atributos padrão do mapa de memória.
O ETM é uma macrocélula de rastreamento de baixo custo que suporta apenas o rastreamento de instruções.
A TPIU atua como uma ponte entre os dados de rastreamento Cortex-M3 do ITM, um ETM se presente e um analisador de porta de rastreamento sem chip. Você pode configurar a TPIU para suportar rastreamento de pinos em série para depuração de baixo custo ou rastreamento de vários pinos para rastreamento de largura de banda mais alta. A TPIU é compatível com CoreSight.
SW-DP/SWJ-DP (Serial-Wire Debug Port/Serial-Wire JTAG Debug Port)
Você pode configurar o processador para ter interfaces de porta de depuração SW-DP ou SWJ-DP. A porta de depuração fornece acesso de depuração a todos os registradores e memória no sistema, incluindo os registradores do processador.
O Datasheet do MCU STM32F103x8/ STM32F103xB
Figura 2 – Diagrama de bloco do MCU STM32F103xx
Como focaremos no MCU STM32F103C8T6, então, a figura 2 mostra o diagrama de blocos completo desse MCU. A parte em destaque, no canto superior esquerdo, é o projeto de propriedade intelectual da ARM, e os demais periféricos é a integração do projeto completo da STMicroelectronics no Cortex-M3.
Esse datasheet do MCU STM32F103x8 e STM32F103xB, referencia alguns MCUs. Como nesse artigo veremos o STM32F103C8T6, então, os periféricos específicos e algumas características são:
Figura 3 – Periféricos do STM32F103C8T6
Detalhamento completo do MCU STM32F103C8T6
Figura 4 – Informação completa do MCU STM32F103C8T6
<< Introdução ao microcontrolador ARM Cortex M3Usando o STM32CubeIDE criaremos nosso projeto Hello World >>