Buscar

APOSTILA M4 PARTE1

Prévia do material em texto

TREINAMENTO ON LINE
 
ARM Cortex M4
Focado na Stellaris Launch Pad 
EK-LM4F120XL Stellaris LM4F120 
 
 Página 2 
 
Sumário	
0.  Histórico da empresa ARM .............................................................................................. 4 
0.1.  As arquiteturas de processadores ARM ................................................................... 8 
0.1.1.  Características dos núcleos Cortex .................................................................. 10 
0.1.2.  O núcleo Cortex M4 ........................................................................................... 11 
0.1.3.  O set de instruções reconhecido pelo Cortex M4 ............................................. 14 
0.2.  Principais características dos Núcleos ARM Cortex M4 ......................................... 18 
0.2.1.  Alta performance .............................................................................................. 18 
0.2.2.  Tratamento avançando das rotinas de interrupção ......................................... 18 
0.2.3.  Modos de baixo consumo de energia ................................................................ 19 
0.2.4.  Características do sistema ............................................................................... 19 
0.2.5.  Ferramentas de suporte a depuração de programas ...................................... 19 
0.2.6.  Literatura sugerida para entender o ARM ....................................................... 20 
1.  Stellaris® LM4F120H5QR Microcontroller - ARM Cortex M4F .................................... 23 
1.1.  Stellaris® Blizzard-class Block Diagram ............................................................... 25 
1.2.  O núcleo ARM Cortex M4F do LM4F120H5QR .......................................................... 26 
1.3.  Registradores de uso geral ..................................................................................... 27 
1.4.  Registradores de uso especial ................................................................................ 29 
1.4.1.  Program Status Register (xPSR) ...................................................................... 29 
1.4.1.1.  Application PSR (APSR) ................................................................................. 30 
1.4.1.2.  Interruption PSR (IPSR) ................................................................................ 30 
1.4.1.3.  Execution PSR (EPSR) .................................................................................... 31 
1.4.2.  Interrupt Mask Register (PRIMASK, FAULTMASK e BASEPRI)........................ 31 
1.4.3.  Control Register (CONTROL) ............................................................................ 33 
1.4.3.1.  Modos de operação do ARM Cortex M4 ......................................................... 34 
1.4.3.2.  Onde os modos de operação do ARM Cortex M4 podem ser úteis ................ 37 
1.4.4.  Floating-Point Status Control (FPSC) ............................................................... 38 
1.5.  Ciclo de busca em um ARM Cortex M4 .................................................................... 40 
1.6.  Mapa de memória do LM4F120H5QR ...................................................................... 42 
1.6.1.  O mapa genérico de um ARM Cortex M4 ........................................................... 42 
1.6.2.  O mapa do LM4F120H5QR ARM Cortex M4 ....................................................... 43 
1.7.  Procedimento de RESET de um ARM Cortex M4 ..................................................... 46 
1.8.  Alocação de memória através do IAR...................................................................... 48 
1.8.1.  Operação em Bit-Band ...................................................................................... 50 
1.8.1.1.  Qual a vantagem da existência da Bit-band region? ..................................... 54 
1.9.  Interrupções ............................................................................................................ 56 
1.9.1.  Tipos de exceções em um ARM Cortex M4 ....................................................... 59 
1.9.2.  Vetores de Interrupção ..................................................................................... 60 
1.9.3.  Tratamento de interrupções ............................................................................ 62 
1.9.3.1.  Entrada em uma interrupção ........................................................................ 62 
1.9.3.2.  Saída de uma interrupção.............................................................................. 62 
1.10.  Controle do sistema ............................................................................................. 63 
1.10.1.  Controle local ................................................................................................ 64 
1.10.1.1.  Reset ........................................................................................................... 64 
1.10.1.2.  Circuito de Reset ........................................................................................ 65 
1.10.1.3.  Potência (LDO Interno) ............................................................................... 65 
1.10.1.4.  Controle dos Clocks Internos ..................................................................... 66 
 
 Página 3 
1.10.2.  Controle de sistema (modos de operação).................................................... 68 
 
 Página 4 
 
0. Histórico da empresa ARM 
 
No início da década de 80 o conceito de processadores RISC foi desenvolvido dentro das 
Universidades de Stanford e Berkeley. 
 
 
 
A empresa que viria a se tornar a ARM foi fundada em 1978, com o nome original de Acorn 
Computer Limited, em Cambridge, Inglaterra, pelos mesmos pesquisadores de Stanford e 
Berkeley, Hermann Hauser e Chris Curry. 
 
 
 
A Acorn se tornou rapidamente uma pequena empresa que tinha um grande produto, tendo 
vendido em pouco mais de um ano 1,5 milhões de BBC Micro Desktops Computers. Eles 
utilizavam os processadores 6502 / 6512 que eram de 8 bits, tinham a arquitetura clássica 
Von Newmann e eram CISC. Os BBC Micro são mostrados nas figuras a seguir. 
 
 
 Página 5 
 
 
 
 
http://en.wikipedia.org/wiki/BBC_Micro 
 
Após este sucesso, a Acorn decidiu desenvolver seu próprio processador de 32 bits, Esta 
empresa passou a produzir os processadores Acorn RISC Machine, ou simplesmente 
processadores ARM. 
 
Em 1985 a Acorn foi responsável pelo desenvolvimento do primeiro processador com 
tecnologia RISC a ser produzido em escala comercial. 
 
Em 1987 a Acorn lançou o primeiro processador que tem a tecnologia RISC exclusivamente 
para PCs de baixo custo, um marco na história dos computadores pessoais. 
 
Em novembro de 1990 as empresas Acorn, Apple Computer e VLSI Technology se 
reúnem para formar uma nova empresa, a Advanced RISC Machine LTD. – ARM, tendo 
inicialmente apenas 12 engenheiros como funcionários de desenvolvimento de projetos. A 
Apple Computer entrou na parceria com o capital, a VLSI Technology entrou como uma 
investidora do negócio e foi a primeira empresa a se tornar licenciadora dos núcleos ARM, 
enquanto a ACORN entrou com tecnologia de fabricação e desenvolvimento. 
 
 
 Página 6 
 
O primeiro grande cliente foi a própria Apple Computer, que passou a utilizar os novos 
processadores RISC desenvolvidos pela ARM em seus microcomputadores. 
 
A empresa ARM se especializou em licenciar seus núcleos para parceiros que fabricam e 
vendem para seus clientes. 
 
Como parte da sua estratégia, a ARM investe na assistência àqueles que desenvolvem 
produtos que utilizam seus chips, através de softwares de depuração, placas de projeto, etc., 
se tornando assim basicamente uma empresa de Propriedade Intelectual (IP), não 
possuindo fábricas de semicondutores.Isto vem sendo feito desde a época em que a ARM era pertencente a Acorn, cujos 
principais lançamentos podem ser vistos na figura a seguir. 
 
 
 
 Página 7 
 
Atualmente, além dos núcleos de processadores ARM, a empresa também desenvolve 
alguns periféricos, memórias e etc., como se pode ver na figura a seguir. 
 
 
 
Os núcleos ARM já contam com uma grande gama de licenças concedidas, para os 
principais fabricantes de semicondutores do mundo (dados de Setembro de 2012). 
 
 
 
 
 Página 8 
 
A nova família de núcleos Cortex também já conta com um grande número de licenças 
concedidas, para todos os principais fabricantes de semicondutores (dados de setembro de 
2012). 
 
 
 
0.1. As arquiteturas de processadores ARM 
Faz parte da estratégia de negócios da ARM a evolução dos núcleos de processadores que 
são desenvolvidos pela empresa, possibilitando oferecer aos seus licenciados cada vez mais 
uma gama de produtos diferenciados para as muitas aplicações que se pode imaginar. 
 
Nos dois quadros a seguir se tem uma mostra de como vem evoluindo o desenvolvimento 
destes núcleos, e como o conjunto de instruções que estes núcleos podem reconhecer são 
compatíveis com as famílias anteriores. 
 
 Página 9 
 
 
 
 
 
 Página 10 
 
0.1.1. Características dos núcleos Cortex 
O mais recente conjunto de núcleos desenvolvidos pela ARM são as famílias Cortex, de 
onde estudaremos microcontroladores da Texas Instruments que contem o núcleo Cortex 
M3. 
 
 
A família Cortex foi dividida em três linhas de produtos: Cortex A, Cortex R e Cortex M. As 
principais características de cada uma destas famílias são: 
 
• Cortex A: Família de Aplicação. São processadores. Tem MMU (Memory 
Management Unit), podendo rodar sistemas operacionais como o Linux, Windows CE, 
etc. Possuem uma alta performance de processamento, mesmo mantendo o seu 
baixo consumo de energia. 
• Cortex R: Família de Tempo Real. São microcontroladores que tem máquina de 
ponto flutuante, resultando em baixa latência e a predictibilidade que aplicações em 
tempo real exigem. Possuem também uma MPU (Memory Protector Unit). 
• Cortex M: Família de Microcontroladores. Microcontroladores de 32 bits, com alta 
velocidade de processamento, baixíssimo consumo. Dedicado a uso em sistemas 
embarcados. Características determinísticas e preditivas são prioridade no 
desenvolvimento destes núcleos. 
 
 Página 11 
 
 
0.1.2. O núcleo Cortex M4 
 
 
 
 
 Página 12 
 
 
 
Os microcontroladores da Texas Instruments provenientes da empresa Stellaris Luminary 
Micro fazem uso do núcleo Cortex M4, que pode ser visto em detalhes no diagrama em 
blocos abaixo. 
 
 
 Página 13 
 
Note que alguns elementos deste diagrama em blocos do núcleo ARM Cortex M4 estão 
com uma linha pontilhada. Isto significa que a empresa ARM ao licenciar o produto Cortex 
M4 deixa estes itens como opcionais. 
 
Então as principais diferenças entre os diversos microcontroladores ARM Cortex M4 
fabricados pelas grandes empresas de semicondutores mundiais são quais destes módulos 
opcionais foram licenciados da ARM e quais são os periféricos que foram agregados ao 
núcleo Cortex M4. 
 
Algumas características técnicas deste núcleo podem ser vistas na figura a seguir. 
 
 
 
 Página 14 
 
Ao licenciar este núcleo, a ARM oferece algumas opções de configuração, para performance 
ou para área de silício, como pode ser visto na figura abaixo. 
 
 
 
0.1.3. O set de instruções reconhecido pelo Cortex M4 
Como qualquer processador, os núcleos ARM também tem um conjunto de instruções em 
linguagem de máquina (Assembly) que são reconhecidos e executados. 
 
Assim como os núcleos desenvolvidos pela ARM tiveram uma evolução, o conjunto de 
instruções também teve. A principal mudança que ocorreu ao longo deste desenvolvimento é 
o tamanho da instrução que pode ser decodificada pelo núcleo, como pode ser visto na 
figura abaixo, onde são mostrados os conjuntos de instruções batizadas como ARM, Thumb 
e Thumb2. 
 
 
Note que o núcleo mostrado na figura anterior já tem o decodificador para instruções ARM e 
Thumb. Um comparativo entre o conjunto Thumb e Thumb2 é mostrado na figura abaixo. 
 
 Página 15 
 
 
 
Uma das principais características projetadas para este conjunto de instruções é a redução 
da quantidade de linhas de código necessárias para realizar operações que são complexas 
a outros microcontroladores. 
 
 
 
Um exemplo é uma multiplicação de 16 bits, feita com um 8051, um microcontrolador de 16 
bits e um ARM Cortex M, mostrado abaixo. 
 
 Página 16 
 
 
 
Dentre as diversas estratégias da empresa ARM está a compatibilidade do conjunto de 
instruções das novas famílias com códigos em linguagem de máquina produzido para 
famílias anteriores. 
 
 Página 17 
 
Se fizermos uma comparação entre as instruções decodificadas pelos diversos núcleos 
ARM, teremos algo como é mostrado na figura a seguir. 
 
É importante notar que os núcleos ARM Cortex M4 foram desenvolvidos para ter uma 
performance tão eficiente com códigos escritos em linguagem C quanto os códigos que são 
desenvolvidos em linguagem Assembly. 
 
 
 
 Página 18 
 
0.2. Principais características dos Núcleos ARM 
Cortex M4 
Em muitos locais (revistas especializadas, sites e fóruns de discussão, profissionais da área 
de sistemas embarcados, etc.) tem se ouvido um especial burburinho a respeito dos Núcleos 
ARM Cortex M4 como sendo revolucionário na área de microcontroladores. Por quê? 
Algumas das características que tornam este núcleo tão especial podem ser vistas nos itens 
a seguir. 
0.2.1. Alta performance 
• Muitas instruções deste núcleo, inclusive de multiplicação de bytes e words, são 
executadas em um único ciclo de máquina. 
• Barramentos separados para dados e instruções permitindo acesso simultâneo a 
estes dois locais, aumentando a performance do chip. 
• O conjunto de instruções Thumb-2 (32 bits) melhora a transição entre instruções do 
modo Thumb (16 bits), reduzindo o tamanho de código necessário para executar 
determinadas tarefas, e consequente aumento na velocidade de processamento. 
• O ciclo de busca de instruções (fetch) é de 32 bits. Assim, no modo Thumb (16 bits) 
duas instruções podem ser carregadas simultaneamente, tendo como consequência 
um grande aumento na performance. 
• O núcleo foi desenhado para trabalhar em alta frequência, permitindo a execução de 
instruções em até 100 Mhz. 
0.2.2. Tratamento avançando das rotinas de interrupção 
• Tem um periférico exclusivo para o tratamento das interrupções, o NVIC (Nested 
Vectored Interrupt Controller), que suporta até 240 fontes de interrupção externas. 
Este bloco foi desenhado de modo a reduzir ao máximo a latência entre a entrada e a 
saída de uma interrupção, porque não é necessário um tratamento via software para 
determinar qual foi a fonte que solicitou a interrupção. 
• O núcleo Cortex M4 automaticamente gerencia a entrada e saída dos registradores 
R0 a R3, R12, LR, PSR e PC na pilha. Isto permite que as interrupções tratadas e 
escritas em linguagem C tenham a mesma eficiência das interrupções escritas em 
linguagem de máquina. 
• A organização das interrupções é extremamente flexível para o usuário, porque o 
NVIC permite determinar qual é a prioridade que se deseja a cada uma das 240 
fontes de interrupção (dentre oito níveis de prioridade admitidos), permitindo ainda 
que estas prioridades sejam alteradas dinamicamente ao longo da execução do 
programa. 
 
 Página 19 
 
• Quando uma interrupção não mascarável (NMI) é acionada, ela é tratada 
imediatamente pelo NVIC, e seu tratamento sempre será garantido, a não ser que se 
desligue o microcontrolador. As interrupçõesNMI são essenciais para as aplicações 
que trabalho em tempo crítico, como é o caso dos sistemas RTOS. 
0.2.3. Modos de baixo consumo de energia 
• O núcleo Cortex M4 é promissor no uso de baixo consumo devido baixo número de 
portas que ele utiliza (low gate count). 
• Este núcleo tem suporte a alguns modos de economia de energia (SLEEPING e 
SLEEPDEEP). Seu desenho faz uso de fontes de clock separadas para os blocos 
essenciais (periféricos, núcleo, RTC, etc.), permitindo que alguns periféricos 
continuem funcionando enquanto o núcleo permanece desligado. 
0.2.4. Características do sistema 
• O sistema utilizado pelo ARM Cortex M4 permite operações de bit-band, byte invariant 
big endian e acesso de dados sem alinhamento. 
• Várias tratativas para exceções de programa, tendo registradores apenas para 
controlar estas falhas, tornando fácil a detecção e o tratamento destas. 
0.2.5. Ferramentas de suporte a depuração de programas 
• Suporte a depuração via JTAG ou Serial-Wire. 
• O acesso ao processador, registradores, memórias periféricos e etc. podem ser feitos 
em tempo real, enquanto os programas estão rodando, devido a funcionalidade 
CoreSight. 
• Suporte simultâneo a até seis breakpoints e quatro watchpoints. 
 
 
 
 Página 20 
 
0.2.6. Literatura sugerida para entender o ARM 
 
 
 
 
 
 Página 21 
 
 
 
 
 
 
 Página 22 
 
 
 
 
 
 
 Página 23 
 
1. Stellaris® LM4F120H5QR 
Microcontroller - ARM Cortex M4F 
 
 
 
 Página 24 
 
 
 
 
 
 Página 25 
 
1.1. Stellaris® Blizzard-class Block Diagram 
 
 
Diversos dispositivos da família Blizzard são compatíveis pino a pino, mudando apenas a 
quantidade de memórias Flash e RAM, além dos periféricos disponíveis em cada um deles, 
como mostra a tabela abaixo: 
 
 
 
 Página 26 
 
1.2. O núcleo ARM Cortex M4F do LM4F120H5QR 
 
 
 
 
 Página 27 
 
1.3. Registradores de uso geral 
Os registradores de uso geral tem acesso direto a CPU. Sua arquitetura é desenhada de 
modo a facilitar a execução das instruções. Com isto, compiladores de linguagem C podem 
tirar proveito destes registradores de modo a tornar a tarefa do linker mais eficiente, 
produzindo códigos em linguagem C que terão praticamente a mesma eficiência que um 
código produzido em linguagem de máquina. 
 
A grande maioria das instruções em Assembly passam obrigatoriamente por estes 
registradores. São os registradores de R0 a R12, como mostrados na figura abaixo. 
 
 
 
Os registradores da parte baixa (low registers – R0 a R7) são acessíveis por todas as 
instruções em Assembly que façam uso de um registrador de uso geral. 
 
Já os registradores da parte alta (high registers – R8 a R12) são acessíveis para todas as 
instruções de 32 bits. As instruções de 16 bits não podem acessar estes registradores. 
 
Além disto, existem os registradores especiais R13, R14 e R15: 
 
• R13 Æ STACK POINTER (SP): é o ponteiro de pilha. A pilha no ARM ignora a escrita 
nos bits 0 e 1 deste registrador, o que significa que ele sempre será alinhado numa 
Word, com quatro bytes. Quando o microcontrolador está em modo de rotina de 
tratamentos (Handler Mode), este será o SP_main. Já quando o microcontrolador está 
em modo de tarefas (Thead Mode), o ponteiro de pilha poderá ser configurado como 
SP_main ou como SP_process. 
 
 Página 28 
 
 
 
• R14 Æ LINK REGISTER (LR): é o registrador de sub-rotinas. É ele que receberá os 
endereços de retorno e de chamada de sub-rotinas, chamadas de funções e 
interrupções, que em linguagem Assembly serão feitos sempre que os comandos 
Branch and Link (BL) e Branch and Link with Exchange (BLX) são executados. Este 
registrador também é utilizado quando se entra ou sai de uma interrupção de 
programa, que é conhecida nos ARMs como exceções de programa (exceptions). 
Caso não esteja sendo utilizado em nenhuma destas condições, o registrador R14 
pode ser utilizado como registrador de uso geral de 32 bits. O LR pode ser acessado 
tanto em modo privilegiado e no modo usuário (isto será tratado em detalhes mais a 
frente). 
 
• R15 Æ PROGRAM COUNTER (PC): é o contador de programa. O bit 0 deste 
registrador sempre é zero, então as instruções serão sempre alinhadas para uma 
Word. 
 
 Página 29 
 
1.4. Registradores de uso especial 
O núcleo ARM Cortex M4 tem alguns registradores de uso especial. São eles: 
 
• Program Status Register (PSR); 
• Interrupt Mask Register (PRIMASK, FAULTMASK e BASEPRI); 
• Control Register (CONTROL). 
 
 
 
Estes registradores têm funções especiais para o núcleo e são acessíveis apenas por 
instruções especiais. Descreveremo-los a seguir. 
 
 
 
1.4.1. Program Status Register (xPSR) 
Além dos registradores de uso geral, a arquitetura ARM Cortex M4 conta com os 
registradores de uso especial, ou Special-purpose Program Status Registers (xPSR), que 
tão divididos em três categorias: aplicação, interrupção e execução, mostrados a seguir. 
 
 
 
 Página 30 
Em modo de aplicação, o
Program Status Register
carrega as informações das
flags de sistema, como descrito
ao lado. Antes de entrar em uma
exceção (interrupção), o
processador salvará a condição
destas flags na pilha. É possível
ler diretamente os valores
destas flags fazendo o uso das
instruções em linguagem
Assembly MSR e MRS. 
 
 
Eles podem ser acessados como registradores individuais, como uma combinação de dois 
ou três modos, ou mesmo com os três modos ao mesmo tempo, utilizando instruções em 
Assembly como a Move to Register from Status (MRS) e a Move to Status from Register 
(MSR). Para serem utilizados coletivamente, devem passar a ter o nome xPSR. 
1.4.1.1. Application PSR (APSR) 
 
 
1.4.1.2. Interruption PSR (IPSR) 
Informa qual é o número e a prioridade da interrupção a ser executada, como mostrado 
abaixo. 
 
 
 Página 31 
 
1.4.1.3. Execution PSR (EPSR) 
Mostram quais são os tipos de execução que o núcleo está realizando naquele momento, 
como descrito no quadro abaixo. 
 
 
 
1.4.2. Interrupt Mask Register (PRIMASK, FAULTMASK e BASEPRI) 
Estes registradores são utilizados para mascarar as interrupções. Isto garantirá, por 
exemplo, que tarefas de tempo crítico (muito utilizadas em sistemas de tempo real – RTOS) 
sejam finalizadas sem que sejam interrompidas. 
 
 
 
 Página 32 
 
Os registradores PRIMASK e BASEPRI são muito úteis para desabilitar temporariamente as 
interrupções no para tarefas críticas. 
 
Já um sistema operacional (OS) pode usar o registrador FAULTMASK para desativar 
temporariamente quem causou a falha em uma tarefa. Neste cenário, uma série de falhas 
diferentes podem ter sido a causa de determinada tarefa não ter sido concluída e ter 
travado. 
 
Uma vez que o núcleo começa a limpar estas fontes de falha, ele não deve ser interrompido 
pelas outras fontes de falha que causaram o travamento do sistema. Portanto, o 
FAULTMASK dá tempo de kernel do sistema operacional para lidar com condições de 
falhas. 
 
Para ter acesso a estes registradores, um grande número de funções está disponível e estão 
incluídas nas bibliotecas fornecidas pelos fabricantes dos semicondutores que utilizam os 
núcleos ARM Cortex M4. Um exemplo pode ser visto abaixo: 
 
 
 
Se este treinamento se preocupasse em mostrar e realizar códigos em linguagem de 
máquina (Assembly), o acesso aos registradores de máscara de interrupção seriam 
acessados do seguinte modo: 
 
 
 
Uma das funções da CMSIS (Cortex Microcontroller Software Interface Standard) é 
padronizar estas instruções, de modo que independente da empresa que licencie o núcleo 
ARM Cortex M4 o compilador utilizado consiga converter toda a linguagem C do mesmo 
modo.Página 33 
 
1.4.3. Control Register (CONTROL) 
 
O registrador de controle (CONTROL REGISTER) controla como a pilha será utilizada e qual 
o nível de privilégio para execução do software quando o processador está em THREAD 
MODE, além de indica se a máquina de ponto flutuante (FPU) está ou não ativa. Este 
registrado só pode ser manipulado quando o processador está em modo privilegiado. 
 
 
 
Os três bits existentes neste registrador tem as seguintes funções: 
 
 
 
 
 
 
 
 Página 34 
 
O registrador de controle é utilizado para definir qual o nível de privilégio de operação e qual 
a seleção de SP será utilizada. Este registrador tem apenas dois bits, como mostrado 
abaixo: 
 
 
 
Para acessar o registrador CONTROL com a linguagem C, as seguintes funções CMSIS 
estão disponíveis nas bibliotecas dos licenciadores do núcleo ARM Cortex M3: 
 
 
 
1.4.3.1. Modos de operação do ARM Cortex M4 
 
Um processador ARM Cortex M4 tem dois modos de operação e dois níveis de privilégio 
para trabalhar. 
 
Os modos de operação determinam se o processador está executando um fluxo de 
programa normal (Thread Mode), que é o main da linguagem C, por exemplo, ou se está 
rodando um trecho de programa referente a uma exceção (Handler Mode), como acontece 
quando se processa uma interrupção. 
 
Já os dois níveis de privilégios (Privileged e User) fornecem um mecanismo para proteger o 
acesso a regiões críticas da memória, além de prover um modelo básico de segurança ao 
sistema. Estes modos de operação são mostrados nas figuras a seguir. 
 
 
 
 
 Página 35 
 
 
 
 
 
Quando o processador está executando um programa normal (Thread Mode), o sistema 
pode estar tanto em nível Privileged quanto em User. Porém, quando se está executando 
uma rotina de exceção, apenas o nível Privileged está disponível. 
 
No nível Privileged o programa pode ter acesso a qualquer região de memória, exceção 
feitas as áreas determinadas pela MPU, se este estiver implementado no chip. O 
processador pode ainda utilizar todas as instruções que estejam disponíveis. 
 
 Página 36 
 
No nível User o acesso a SCS (System Control Space), região de memória que contem 
todos os registradores de configuração e depuração do ARM Cortex M3, fica bloqueado. 
Além disto as instruções que tem acesso aos registradores especiais (caso da MSR e da 
MRS) também não podem ser utilizadas. Se um programa está rodando em nível User, e 
tenta acessar a SCS, uma falha de exceção irá ocorrer. 
 
Via software, utilizando os bits do registrador CONTROL, é possível alterar o nível de 
Privileged para User. Deste modo, quando uma interrupção ocorrer o processador sempre 
irá retornar ao modo Privileged, retornando para o estado prévio que tinha antes de tratar a 
interrupção. Este esquema de comutação é mostrado na figura a seguir. 
 
 
 
Esta separação entre níveis Privileged e User aumenta e muito a confiabilidade do sistema 
através da prevenção de acesso de registradores especiais por programas não confiáveis, 
que estão rodando dentro de um sistema operacional, como um RTOS. 
 
Se o chip em questão tem ainda uma MPU disponível, a conjunção destes dois mecanismos 
torna o sistema ainda mais robusto. 
 
Um exemplo de programa comutando entre estes modos e privilégios é mostrado na figura a 
seguir. 
 
 
 
 Página 37 
 
Já em programas para aplicações mais simples, pode não haver a necessidade de separar 
os níveis de acesso. Neste caso, basta não fazer a manipulação dos bits presentes no 
registrador CONTROL, e a execução do programa ocorrerá como é mostrado na figura 
abaixo. 
 
 
 
Lembre-se que durante a transição entre os modos Thread e Handler, automaticamente o 
NVIC irá fazer o gerenciamento de pilha, como mostrado na figura a seguir. 
 
 
1.4.3.2. Onde os modos de operação do ARM Cortex M4 podem ser úteis 
 
 
 
 Página 38 
 
 
 
1.4.4. Floating-Point Status Control (FPSC) 
 
A grande novidade dos ARM Cortex M4F em relação a família anterior, a M3, é a existência 
de uma máquina de ponto flutuante, a FPU. 
 
Para configurar todos os parâmetros desta máquina, existe o FPSC, cujos bits podem ser 
vistos na imagem abaixo: 
 
 
 
 
 
Durante este treinamento, quando formos usar códigos que acessem a FPU, iremos explicar 
em detalhes o funcionamento de cada um destes bits, mostrados na tabela a seguir: 
 
 Página 39 
 
 
 
 
 
 Página 40 
 
1.5. Ciclo de busca em um ARM Cortex M4 
 
A máquina de estados presente em um núcleo de um ARM Cortex M4 tem as suas 
características de construção mostradas no diagrama em blocos abaixo. 
 
 
 
Isto permite que ocorra um paralelismo entre as atividades de busca (Fetch), decodificação 
(Decode) e execução (Execute) das instruções apontadas pelo Program Counter (PC), 
como mostrado abaixo. 
 
 
 
 
 Página 41 
 
Deste modo, os estágios de Pipeline de um ARM Cortex M4 funcionam como mostra o 
diagrama em blocos abaixo. 
 
 
 
O Buffer de instruções consegue armazenar 3 instruções que serão decodificadas a seguir. 
Esta arquitetura consegue reduzir drasticametne o impacto de espera que a memória Flash 
causa nos carregamentos. 
 
 
 
 
 Página 42 
 
1.6. Mapa de memória do LM4F120H5QR 
 
1.6.1. O mapa genérico de um ARM Cortex M4 
 
 
 
 Página 43 
 
1.6.2. O mapa do LM4F120H5QR ARM Cortex M4 
 
 
 
 
 
 
 Página 44 
 
 
 
 
 Página 45 
 
 
 
 
 
 
 
 
 Página 46 
 
1.7. Procedimento de RESET de um ARM Cortex 
M4 
 
Quando se reseta o microcontrolador, algumas informações básicas devem ser entregue a 
máquina de estados, para que ele possa começar a executar o software que está gravado 
na sua memória. 
 
Dentre estas informações estão: 
 
• Onde começa a pilha 
• Onde começa o programa 
• Onde estão as rotinas de interrupção 
 
Esta sequência de inicialização é mostrada na figura abaixo: 
 
 
 
 
Os primeiros endereços de memória flash em um núcleo ARM Cortex M4 tem funções muito 
específicas, como se pode ver na figura a seguir. 
 
 
 Página 47 
 
 
 
Se pensarmos no mapa de memória completo do microcontrolador, a sequência de 
inicialização ficará conforme a figura abaixo: 
 
 
 
E se pensarmos na tratativa das pilhas, teremos o seguinte: 
 
 
 Página 48 
 
 
 
1.8. Alocação de memória através do IAR 
 
 
 
 
 Página 49 
 
 
 
 
 
 Página 50 
 
 
 
1.8.1. Operação em Bit-Band 
 
O suporte a operação do tipo Bit-Band permite que em uma única operação de 
carga/armazenamento consiga acessar (read/write) um único bit de dados. A operação Bit-
Band não é uma ideia nova. Na verdade ela existe a mais de 30 anos, mostrada pela 
primeira vez em microcontroladores de 8 bits, como é o caso do 8051. 
 
No Núcleo Cortex M4 isto é possível devido a presença de duas regiões de memória de bit 
pré definidas, chamadas de Bit-Band Regions, já mostradas no mapa de memória da figura 
anterior. 
 
A primeira Bit-Band Region está localizada no primeiro 1 Mb da SRAM, e a segunda Bit-
Band Region está localizada no primeiro 1 Mb do mapa de periféricos. 
 
Estas duas regiões podem ser utilizadas como uma memória normal. Mas seu grande 
benefício é a sua utilização como Bit-Band, o que é feito através de uma região separada 
de memória chamada Bit-Band Alias. Quando o Bit-Band Alias é utilizado, cada bit de um 
periférico pode ser acessado por um endereço único, através do bit menos significativo 
(LSB) de cada palavra da região de Bit-Band Alias. 
 
Por exemplo, para setar um bit em um periférico que esteja mapeado no endereço 
0x20000000, ao invés de utilizar três instruções (uma para ler os dados, outra parasetar o 
bit, e uma última para escrever o resultado naquele endereço), essa tarefa pode ser 
realizada por uma única instrução, como mostra a figura abaixo. 
 
 
 Página 51 
 
 
 
Em linguagem de máquina (Assembly), isto seria equivalente a: 
 
 
 
A região de memória SRAM é mapeada pelo processo de Bit-Band e Bit-Band Alias do 
seguinte modo: 
 
 
 
Para uma melhor compreensão, veja a equivalência entre os endereços e bits mostrados na 
figura da próxima página. 
 
 
 Página 52 
 
 
 
Mais uma ideia para entender o processo de Bit-Band e Bit-Band Alias é mostrada na 
imagem seguir: 
 
 
 
 
 Página 53 
 
A região de memória equivalente aos periféricos é mapeada pelo processo de Bit-Band e 
Bit-Band Alias do seguinte modo: 
 
 
 
Esta ideia permite manipular bits facilmente, apenas conhecendo a sua posição e seu offset, 
como mostra as equações abaixo. 
 
 
 
Onde: 
 
• Bit Word Offset: é aposição do bit alvo na região de memória de bit-band. 
• Bit Word Addr: é o endereço da palavra na região de Bit-band Alias que mapeia o bit 
alvo. 
• Bit Band base: é o endereço de início da região Bit-band Alias. 
• Byte offset: é o número do byte dentro da região Bit-band que contem o bit alvo. 
• Bit number: a posição do bit (de 0 a 7) do bit alvo. 
 
 
 Página 54 
 
1.8.1.1. Qual a vantagem da existência da Bit-band region? 
 
Nos podemos utilizar a Bit-band region para, por exemplo, implementar uma transferência de 
dados serialmente, através de uma porta de entrada e saída (GPIO), para um dispositivo de 
comunicação serial. O código de uma aplicação como esta pode escrita facilmente porque o 
acesso a porta serial e o sinal de clock pode ser separados. 
 
Dados podem ser perdidos quando o tratamento de uma interrupção modifica uma região 
compartilhada de memória, como pode ser visto na figura abaixo. 
 
 
 
Esta mesma operação pode ter uma prevenção de perda de dados se for utilizada a função 
de Bit-band, como mostra a figura abaixo. 
 
 
 
 
 Página 55 
 
Estes mesmos conceitos se aplicam a sistemas de multi tarefas, como é o caso dos RTOS. 
Sem a operação em Bit-band, pode-se perder dados, como mostra a figura abaixo. 
 
 
 
Veja como essa perda de dados pode ser prevenida utilizando a Bit-band: 
 
 
 
 
 Página 56 
 
1.9. Interrupções 
O núcleo ARM Cortex M4 tem o módulo NVIC – Nested Vectored Interrupt Controller. Ele 
é responsável pela priorização e o tratamento de todas as interrupções (exceptions). Todas 
as interrupções sempre são tratadas no Handler Mode. O estado atual do microcontrolador 
é salvo automaticamente na pilha quando uma interrupção acontece e também é restaurado 
automaticamente da pilha ao final de uma ISR – Interrupt Service Routine. 
 
O vetor de interrupção correspondente a exceção a ser tratada é carregada em paralelo ao 
salvamento do estado atual do microcontrolador, o que aumenta muito a eficiência da 
entrada em uma interrupção. 
 
Outra característica interessante do NVIC é o suporte a múltiplas interrupções, que podem 
acontecer durante o uso do microcontrolador de diversas maneiras diferentes, e que são 
tratadas pelos processos de Tail-Chaining, Late Arriving e Pop Pre-Emption, que são 
mostrados nas figuras a seguir. 
 
 
 
 Página 57 
 
 
 
 
 
 
 Página 58 
 
Pode demorar vários ciclos de máquina, após uma gravação de uma flag de interrupção, até 
que o módulo NVIC finalmente detecte que uma interrupção realmente terminou. Isto 
significa que se a limpeza de uma flag de interrupção é a última ação em uma ISR, é 
possível que a o tratamento de uma interrupção seja encerrada antes que o NVIC entenda 
que isto realmente aconteceu. 
 
Ou seja, a flag foi abaixada pela ISR, mas o NVIC acha que isto ainda não aconteceu, 
porque os ciclos de máquina necessários para o reconhecimento da limpeza da flag de 
interrupção não foram completadas ainda. 
 
Isto fará com que o NVIC faça entrar novamente na interrupção. Isto pode ser evitado 
colocando a limpeza da flag de interrupção no começo da ISR, ou então realizando uma 
operação que gaste os ciclos de máquina necessários, após a operação de limpeza de flag. 
 
Outras características importantes do NVIC são: 
 
• Repriorização dinâmica de interrupções. 
• Interface de comunicação entre o núcleo e o NVIC bem próxima, permitindo um ágil 
processamento das interrupções, uma vez que esta pequena distância não introduz 
atrasos. 
• Numero de interrupções configuráveis de 01 até 240. 
• Numero de prioridade de interrupção configurável de 3 a 8 bits (de 8 a 256 níveis). 
• Pilhas e privilégios de trabalhos diferentes para a execução de programas e de 
interrupções. 
 
 
 Página 59 
 
1.9.1. Tipos de exceções em um ARM Cortex M4 
 
 
 
 
 
 Página 60 
 
1.9.2. Vetores de Interrupção 
 
 
 
 Página 61 
 
 
 
 Página 62 
 
 
 
1.9.3. Tratamento de interrupções 
 
1.9.3.1. Entrada em uma interrupção 
Quando ocorre uma interrupção em um núcleo ARM Cortex M4, acontecem coisas 
automaticamente, independente da vontade do programador/usuário: 
 
• Os conteúdos dos registradores especiais são salvos na pilha (pushed on the stack). 
• É carregado o vetor de interrupção, correspondente a quem chamou a ação, no 
contador de programa (PC). 
• São atualizados os novos valores para o ponteiro de pilha (SP), para o contador de 
programa (PC) e para o link register (LR). 
• O núcleo passa ao modo de tratamento de interrupção (Handler Mode). 
1.9.3.2. Saída de uma interrupção 
Ao término da rotina de tratamento de interrupção (ISR), a última ação a ser realizada é 
carregar o contador de programa com o valor que estava no LR quando se entrou na 
interrupção. Isto indicará ao NVIC que uma ISR terminou, e que o processo de saída de 
interrupção pode ser iniciado. A partir de então, as seguintes ações serão executadas: 
 
• Verifica-se entre as próximas interrupções que estão aninhadas qual a de maior 
prioridade, e faz-se então o atendimento desta nova interrupção. 
• Os conteúdos dos registradores especiais são restaurados da pilha (poped from the 
stack), caso todas as interrupções tenham sido tratadas. 
• Os registradores do módulo NVIC são atualizados. 
• O núcleo retorna ao modo de execução de programa (Thread Mode). 
 
 
 Página 63 
 
 
 
 
 
1.10. Controle do sistema 
 
O módulo de controle do sistema, presente no LM4F120H5QR, foi implementado pela Texas 
Instruments e é responsável por diversos comportamentos deste chip. É através dele que 
se obtêm informações sobre o dispositivo, controla-se o clock do núcleo e os clocks 
individuais dos periféricos, e são tratadas as condições de reset deste microcontrolador. 
Este módulo tem as seguintes atribuições: 
 
• Identificação do dispositivo: diversos registradores (DID0, DID1, DC0 a DC4) que 
são apenas de leitura, onde serão armazenadas informações de fabricação do 
microcontrolador, como a versão, número de série, tamanho das memórias SRAM e 
FLASH implementadas no dispositivo, dentre outras informações. 
• Controle local: ajusta o controle de reset do microcontrolador, controle de potência e 
controle de clock. 
 
 Página 64 
• Controle de sistema: faz o chaveamento entre os diversos modos de baixa potência 
disponíveis para este microcontrolador (Run, Sleep e Deep-Sleep). 
 
1.10.1. Controle local 
 
1.10.1.1. Reset 
O reset no LM4F120H5QR pode ocorrer através de seis fontes diferentes: 
 
• Pino de reset externo (RST) levado para nível lógico zero. 
• Power-on reset (POR). 
• Brown-out detector (BOR) 
• Reset por inicialização de software. 
• Violação de funcionamento do Watchdog Timer. 
• Falha do MOSC 
 
 
 
Após qualquer umadestas fontes de reset acontecerem, o motivo que a causou fica 
registrado no RESC – Reset Cause. 
 
 
 
 
 Página 65 
RPU = 10 KΩ 
RS = 470 Ω 
C1 = 10 nF 
 
RPU e C1 definem o 
delay para o reset. 
 
 
 
1.10.1.2. Circuito de Reset 
 
 
 
1.10.1.3. Potência (LDO Interno) 
 
A família de microcontroladores Stellaris tem internamente um regulador do tipo LDO, que é 
ser utilizado para fornecer a energia para toda a lógica de controle destes dispositivos. 
 
A conexão deste LDO é mostrada na figura a seguir. E as suas caracteristicas elétricas 
estão na tabela abaixo. 
 
 
 
 
 Página 66 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1.10.1.4. Controle dos Clocks Internos 
 
Similar a outros microcontroladores que fazem uso de recursos de baixo consumo, o 
LM4F120H5QR também utiliza múltiplas fontes de clock de entrada e prove para o núcleo 
ARM Cortex M4 e demais periféricos diversos sinais diferentes de clock. 
 
A máquina que gerencia esta entrada e saída de clocks é mostrada na figura da próxima 
página. 
 
 
 Página 67 
 
 
 
As fontes de clock possíveis para serem utilizar por este microcontrolador são: 
 
• PIOSC – Precision Internal Oscillator: é um oscilador interno, montado na pastilha 
do chip. Não precisa de nenhum componente externo para funcionar e é a primeira 
fonte que começa a funcionar em conjunto com o sistema assim que acontece um 
POR (Power On Reset). Sua frequência foi fixada em 16 Mhz, com uma precisão de ± 
1% em temperatura ambiente (25 ºC). Fora desta temperatura a precisão passa a ser 
de ± 3%. É ideal para aplicações de onde o foco é o baixo custo, reduzindo 
drasticamente o custo de implantação do projeto, por não precisar de cristais externos 
para funcionar. O PIOSC é a fonte de clock do LM4F120H5QR enquanto o chip está 
em um procedimento de POR. 
 
• MOSC – Main Oscillator: é a fonte de clock de precisão do LM4F120H5QR. Para 
tanto é necessária a instalação de um cristal, conectado aos pinos OSC0 e OSC1. Se 
o módulo PLL deste oscilador for utilizado, o valor do cristal pode estar entre 5 e 25 
Mhz. Caso contrário, o valor do cristal deve estar entre 4 e 25 Mhz. 
 
 
 Página 68 
 
• 30 khz IOSC: um oscilador interno, similar ao IOSC anterior, mas com uma frequência 
de 30 Khz, com precisão de ± 50%. Ele é destinado para uso quando o 
microcontrolador está em modo Deep-sleep, com ultra baixo consumo. Isto permite 
que todos os demais osciladores sejam desligados, mas que o microcontrolador se 
mantenham ativo, mesmo com baixíssima velocidade e baixo consumo. 
 
• Hibernation Module Clock Source Oscillator: é uma fonte de clock de alta precisão, 
com valor igual a 32768 Hz, a ser obtida com a colocação de um cristal de relógio na 
entrada do Hibernation Module. 
 
1.10.2. Controle de sistema (modos de operação) 
 
Dentro da família Stellaris, o LM4F120H5QR conta com registradores exclusivos (RCGCn, 
SCGCn e DCGCn) para gerenciar seus quatro modos de economia de energia: 
 
• Run Mode: neste modo, o microcontrolador está ativo e está executando um 
programa. É o modo de operação normal, que qualquer outro microcontrolador 
também deve ser capaz de executar. Este modo garante que todos os periféricos 
estão habilitados e prontos para uso. 
• Sleep Mode: neste modo, os periféricos não sofrem qualquer alteração em seu 
funcionamento, continuando ativos e operantes. Mas o núcleo ARM Cortex M4 e o 
sub sistema de memória não recebem sinais de clock, não sendo possível então 
executar instruções que estão no programa embarcado. Para entrar no Sleep Mode, 
o Cortex M4 executa uma instrução chamada WFI (Wait for Interrupt). Deste modo, 
qualquer interrupção que aconteça, através de um periférico, irá fazer o 
microcontrolador retornar ao Run Mode. 
• Deep-Sleep Mode: ao entrar neste modo, as fontes de clock e frequências aplicadas 
aos periféricos podem ser modificadas, dependendo das configurações que foram 
feitas enquanto o dispositivo estava em Run Mode. O núcleo ARM Cortex M4 e o 
sub sistema de memória também não recebem sinais de clock, não sendo possível 
então executar instruções que estão no programa embarcado. O processo de saída 
do Deep-Sleep Mode é similar ao do Sleep Mode, acontecendo por interrupções de 
periféricos. 
• Hibernate Mode: neste modo, a alimentação de grande parte do LM4F120H5QR é 
desligada, deixando ativo apenas o Hibernation Module. Um evento externo ou um 
evento de RTC é necessário para retornar o chip para o Run Mode. 
 
 
 Página 69 
 
 
SRAM saved Lowest IBat Lowest typ wake-up 
Running mode Yes 1.12mA/MHz N/A 
Sleep mode Yes 8mA 0.427us 
Deep-Sleep mode Yes 550uA 0.427us 
Hibernate 
RTC ON 
256 bytes saved 18 uA 62 us 
Hibernate 
RTC OFF 
256 bytes saved 8 uA 10 ms 
 
 
 
 
 Página 70

Outros materiais