Baixe o app para aproveitar ainda mais
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
Compartilhar