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
  1. Freedom Board: KL25Z
  2. Programação

Utilizando o CMSIS nas aplicações

PreviousConfiguração de Registradores em CNextDicionário

Last updated 6 years ago

Considere o exemplo apresentado no tópico anterior em que as funções realizavam o acionamento do LED vermelho. No , o arquivo do dispositivo apresenta todas as definições necessárias para acessar os periféricos.

#include <stdint.h>
#include "MKL25Z4.h"

#define LED_PIN 18
#define RED_MASK (1 << (LED_PIN))


void redon(void){
	//ativar o bit 18 do registrador PCOR.
	//GPIOB->PCOR = (RED_MASK);
	
	//ou desativar somente o bit 18 do registrador PDOR
	GPIOB->PDOR = GPIOB->PDOR & ~(RED_MASK);
}

void redoff(void){
	//ativar o bit 18 do registrador PSOR.
	//GPIOB->PSOR = (RED_MASK);
	
	//ou ativar somente o bit 18 do registrador PDOR
	GPIOB->PDOR = GPIOB->PDOR | (RED_MASK);
}

void init_gpio(void){
	//ativar somente o bit 10 do registrador SCGC5.
	SIM->SCGC5 = SIM->SCGC5 | (SIM_SCGC5_PORTB_MASK);
	
	//ativar o bit 8 do registrador PORTB_PCR18
	PORTB->PCR[LED_PIN] = PORT_PCR_MUX(1);
	
	//ativar o bit 18 do registrador PDDR
	GPIOB->PDDR = (RED_MASK);
}


int main()
{
	//configurações iniciais
	init_gpio();
	
	while(1){
		//programa em loop infinito
		redon();
		redoff();
	}
	
	return 0;
}
#include <stdint.h>
#include "MKL25Z4.h"

#define LED_PIN 18
#define RED_MASK (1 << (LED_PIN))


void redon(void){
	//ativar o bit 18 do registrador PCOR.
	//GPIOB->PCOR = (RED_MASK);
	
	//ou desativar somente o bit 18 do registrador PDOR
	GPIOB->PDOR = GPIOB->PDOR & ~(RED_MASK);
}

void redoff(void){
	//ativar o bit 18 do registrador PSOR.
	//GPIOB->PSOR = (RED_MASK);
	
	//ou ativar somente o bit 18 do registrador PDOR
	GPIOB->PDOR = GPIOB->PDOR | (RED_MASK);
}

void init_gpio(void){
	//ativar somente o bit 10 do registrador SCGC5.
	SIM->SCGC5 = SIM->SCGC5 | (SIM_SCGC5_PORTB_MASK);
	
	//ativar o bit 8 do registrador PORTB_PCR18
	PORTB->PCR[LED_PIN] = PORT_PCR_MUX(1);
	
	//ativar o bit 18 do registrador PDDR
	GPIOB->PDDR = (RED_MASK);
}



uint32_t volatile msTicks;                       // Counter for millisecond Interval
 
void SysTick_Handler (void) {                    // SysTick Interrupt Handler
  msTicks++;                                     // Increment Counter
}
 
void WaitFor(uint32_t tick_n)  {
  uint32_t curTicks;
 
  curTicks = msTicks;                            // Save Current SysTick Value
  while ((msTicks - curTicks) < tick_n)  {       // Wait for next SysTick Interrupt
    __WFE ();                                    // Power-Down until next Event/Interrupt
  }
}


int main()
{
	//configurações iniciais
	init_gpio();
	
	//atualiza variável SystemCoreClock
	SystemCoreClockUpdate();
	
	//tenta configurar Systick para 1 mSec
	if (SysTick_Config(SystemCoreClock / 1000)) { // SysTick 1mSec
       // Handle Error 
  }
	
	while(1){
		//programa em loop infinito
		redon();
		WaitFor(100);
		redoff();
		WaitFor(100);
	}
	
	return 0;
}

Além das definições de periféricos do fabricante, o apresenta funções para configuração de recursos do núcleo ARM. Por exemplo, do módulo temporizador Systick.

CMSIS
CMSIS