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
  • Funções escritas em Assembly
  • Chamada das funções em linguagem C
  1. Freedom Board: KL25Z
  2. Programação

Chamada de funções em Assembly

Funções criada em Assembly podem ser chamadas por um código escrito em linguagem C. Para tal, é necessário exportar o nome da função e usar o modificador extern.

Funções escritas em Assembly

Adicione no projeto um arquivo Assembly com as seguintes funções:

SIM_SCGC5 EQU 0x40048038
PORTB_PCR18 EQU 0x4004A000 + 4 * 18
GPIOB_PSOR EQU 0x400FF044
GPIOB_PCOR EQU 0x400FF048
GPIOB_PTOR EQU 0x400FF04C 
GPIOB_PDDR EQU 0x400FF054 
RED_MASK EQU 0x00040000

	AREA    |.text|, CODE, READONLY	
	EXPORT redon
	EXPORT redoff
	EXPORT init_gpio
		
redon PROC
	LDR R0,=GPIOB_PCOR
	LDR R1,=RED_MASK
	STR R1,[R0]
	BX LR
	ENDP
	
redoff PROC
	LDR R0,=GPIOB_PSOR
	LDR R1,=RED_MASK
	STR R1,[R0]
	BX LR
	ENDP
		
init_gpio PROC
	LDR R0,=SIM_SCGC5
	LDR R1,[R0]
	LDR R2,=0x00003E00
	ORRS R1,R2
	STR R1,[R0]

	LDR R0,=PORTB_PCR18
	LDR R1,=0x00000100
	STR R1,[R0]
	
	LDR R2,= RED_MASK 
	LDR R0,=GPIOB_PDDR
	LDR R1,[R0]
	ORRS R1,R2
	STR R1,[R0]
	
	LDR R0,=GPIOB_PSOR
	LDR R1,[R0]
	ORRS R1,R2
	STR R1,[R0]
	BX LR
	ENDP
	
	END

Chamada das funções em linguagem C

No programa principal, declare uma função externa usando o modificador extern.

extern void redon(void);
extern void redoff(void);
extern void init_gpio(void);

int main()
{
	//configurações iniciais
	init_gpio();
	
	while(1){
		//programa em loop infinito
		redon();
		redoff();
	}
	
	return 0;
}

PreviousKeil uVisionNextConfiguração de Registradores em C

Last updated 6 years ago