Embedded Systems
  • Microcontroladores e Sistemas Embarcados
  • Introdução aos sistemas embarcados
  • Sistemas Microcontrolados
    • Visão geral da organização de um sistema computacional
    • Modelos de Arquitetura
    • Estrutura básica de um microcontrolador genérico
  • Periféricos Mapeados em Memória
    • Configuração de Registradores
  • Programação
    • Programação em Linguagem de Montagem
    • Compilação
  • Intel MSC-51
    • Arquitetura e Organização do 8051
    • Características Gerais de Operação
    • Mapa de Memória
    • Conjunto de Instruções e Modos de Endereçamento
    • Interrupções
    • Portas de Entradas/Saídas Digitais
    • Módulo Contador/Temporizador
    • Comunicação Serial Assíncrona
  • Processadores Cortex-M0+
    • Arquitetura
    • Sistema de interconexão
    • Arquitetura do Conjunto de Instruções (ISA)
    • Modos de operação
    • Programação
      • Keil uVision
  • Freedom Board: KL25Z
    • Família de microcontroladores KL25Z
    • Terminais do microcontrolador
    • Interface de configuração
    • Programação
      • Keil uVision
      • Chamada de funções em Assembly
      • Configuração de Registradores em C
      • Utilizando o CMSIS nas aplicações
  • Dicionário
  • Apêndice A: Sistemas de Numeração
  • [Em desenvolvimento] Apêndice B: Números Sinalizados
Powered by GitBook
On this page
  • Criando um projeto
  • Arquivos de código
  • Ponto de entrada da aplicação: Função Main
  • Estrutura básica de um programa
  • Exemplo de programa
  • Construindo o programa
  • Inicialização do microcontrolador
  • Simulação
  • Chamada da função Main
  1. Processadores Cortex-M0+
  2. Programação

Keil uVision

PreviousProgramaçãoNextFreedom Board: KL25Z

Last updated 6 years ago

Criando um projeto

Acesse o menu Project->New uVision Project. Em seguida, indique um diretório e o nome do projeto.

Selecione o dispositivo que será utilizado ou a definição genérica. Para o exemplo apresentado, utilizou-se a estrutura genérica de um dispositivo ARM Cortex-M0+.

Na próxima tela são exibidas algumas configurações que podem ser adicionadas no projeto. Para esse exemplo, nenhuma configuração será realizada.

Arquivos de código

No painel de controle do projeto, selecione o diretório Source Group 1 e adicione um novo item ao projeto.

Em seguida, selecione a opção Asm File e indique o nome do arquivo.

Ponto de entrada da aplicação: Função Main

Estrutura básica de um programa

As regiões de memória são indicadas com a diretiva AREA.

AREA    NOME, TIPO, ATRIBUTOS

Considerando isso, a estrutura básica para a região de código é mostrada a seguir.

	AREA    ASM_MAIN, CODE, READONLY
	THUMB

Main
	;Instruções do programa

	END

CODE representa a região de instruções

THUMB indica que as instruções são Thumb e o código é UAL.

END define o fim do arquivo.

Exemplo de programa

Considere um exemplo simples para preencher a função main.

  1. R0 = 10;

  2. R1 = 0;

  3. Incrementa R1;

  4. Compara R1 com R0.

  5. Se forem iguais, volta para o item 1, caso contrário, executa o item 3;

	AREA    ASM_MAIN, CODE, READONLY
	THUMB

Main
	MOVS R0,#10  ;R0 = 10
	MOVS R1,#0   ;R1 = 0
Main_Loop
	ADDS R1,R1,#1 ;R1 = R1 + 1
	CMP R1,R0     ;Compara se R1==R0, altera flag Z em APSR se for igual
	BNE Main_Loop  ;Salta para Main_Loop se Z == 0
	B Main   ;Salto incondicional para Main

	END

Construindo o programa

Para montar o programa, acesse o menu Project -> Build.

O montador notificará que faltam algumas definições no projeto. De fato, apenas o código da aplicação foi definido. No entanto, para o programa gravado no microcontrolador é necessário definir o ponto de entrada, isto é, o código que é executado quando ocorre um evento de Reset.

Inicialização do microcontrolador

A inicialização do sistema é definida como sendo a configuração básica para que o sistema possa operar em um estado conhecido. Tal condição é iniciada quando o microcontrolador é energizado, entrando no estado de Reset. Nessa condição, o processador inicia a execução do programa a partir de um endereço especificado numa região de memória chamada de Reset Vector.

O StackPointer (SP) é inicializado com o valor presente no endereço 0 do vetor de interrupções.

O ProgramCounter (PC) inicializado com o valor presente no endereço 4 do vetor de interrupções.

Assim, é necessário indicar para o montador essas regiões e valores. Para tal, é utilizado a macro EXPORT.

     AREA    RESET, DATA, READONLY
     EXPORT  __Vectors
__Vectors       
	DCD  0x20000100 	; Top of Stack
    DCD  Reset_Handler  ; Reset Handler
	;definição dos outros vetores


	AREA    ASM_MAIN, CODE, READONLY
	EXPORT Reset_Handler
	THUMB
Reset_Handler
Main
	MOVS R0,#10  ;R0 = 10
	MOVS R1,#0   ;R1 = 0
Main_Loop
	ADDS R1,R1,#1 ;R1 = R1 + 1
	CMP R1,R0     ;Compara se R1==R0, altera flag Z em APSR se for igual
	BNE Main_Loop  ;Salta para Main_Loop se Z == 0
	B Main   ;Salto incondicional para Main

	END

Agora, a montagem do programa não apresentará erros.

Simulação

Para simular a execução do programa, configure as opções de Debug. Para tal, acesse as opções de configuração do projeto.

Na tela de configuração, selecione a opção Use Simulator.

Ao retornar para tela inicial, acesse o item Debug -> Start Debug Session.

Ao iniciar a sessão, execute o programa instrução por instrução e observe o painel de registradores. Note os valores carregados nos registradores especiais e as definições realizadas no programa.

Chamada da função Main

Considere agora que o código Main será chamado pela rotina de inicialização do microcontrolador. Tal procedimento é comum, sendo responsável por inicializar configurações básicas do sistema antes de chamar a função principal.

    AREA    RESET, DATA, READONLY
    EXPORT  __Vectors
__Vectors       
	DCD  0x20000100 	; Top of Stack
    DCD  Reset_Handler  ; Reset Handler
	;definição dos outros vetores



	AREA    ASM_INIT, CODE, READONLY
	EXPORT Reset_Handler
Reset_Handler
	;configurações do hardware
	;chamada da função main
	LDR     R0, =Main ;carrega endereço representado por Main
    BX      R0        ;salta para Main


	AREA    ASM_MAIN, CODE, READONLY
	THUMB
Main
	MOVS R0,#10  ;R0 = 10
	MOVS R1,#0   ;R1 = 0
Main_Loop
	ADDS R1,R1,#1 ;R1 = R1 + 1
	CMP R1,R0     ;Compara se R1==R0, altera flag Z em APSR se for igual
	BNE Main_Loop  ;Salta para Main_Loop se Z == 0
	B Main   ;Salto incondicional para Main

	END

Inicialmente será demonstrado a criação de um programa referenciado pelo nome Main. Cabe lembrar que um pode ser representado por um conjunto de instruções e dados. Para tal, as regiões de código e dados devem ser indicadas para o montador.

Para esta etapa de inicialização é importante conhecer o do microcontrolador. No Cortex-M0+, o contador de programa é inicializado com o valor do ResetVector, indicado no endereço 4 da memória de programa.

programa
mecanismo de Reset