Freescale M0+ FRDM KL25Z BOARD

Gast #3270436
Lesenswert?
• ▲
▼
Hallo, hat hier jemand mit dem Freedom kl25z von Freescale gearbeitet 
und kann sich vielleicht den Code ansehen. Es ist mit Keil programmiert. 
Das Problem ist, dass ich nicht ganz verstehe, wie das mit dem Clock für 
den UART funktioniert was PLL und FLL ist. und wie man diesen richtig 
einstellt. Der Code funktioniert zwar nur musste ich erst mit den 
Baudraten im Terminal rumprobieren, damits zufällig passt. Eigentlich 
sollte die Baud_Rate mit dem Code 9600 sein. Im Terminal muss ich 300 
einstellen damits läuft. Das liegt sicherlich daran, dass Clock für den 
UART nicht auf 48MHz eingestellt ist.
[c]


 *----------------------------------------------------------------------- 
--
#include <MKL25Z4.H>
#include <stdint.h>
#include <stdio.h>


#define CORE_CLOCK  48000000
#define OVER_SAMPLE 16


void uart0_putchar (char data);
unsigned char uart0_getchar (void);
void LED_Config(void);

const uint32_t led_mask[] = {1UL << 18, 1UL << 19, 1UL << 1};


/*---------------------------------------------------------------------- 
---
  MAIN function
 *----------------------------------------------------------------------- 
--
int main(void)
{

char c=0;
unsigned short baud = 9600;

int divisor = (CORE_CLOCK / OVER_SAMPLE) / baud;
SIM_SCGC4 |= SIM_SCGC4_UART0_MASK; /* Enable the clock to the selected 
UART */
SIM_SCGC5 |= SIM_SCGC5_PORTA_MASK; /* Turn on all port clocks */

// Turn on clock to UART0 module and select 48Mhz clock (FLL/PLL source)
SIM_SOPT2 &= ~SIM_SOPT2_UART0SRC_MASK;    // ClockSource
SIM_SOPT2 |= SIM_SOPT2_UART0SRC(2);


PORTA_PCR1 = PORT_PCR_MUX(2);
PORTA_PCR2 = PORT_PCR_MUX(2);

UART0_C2 = 0;
UART0_C1 = 0;
UART0_C3 = 0;
UART0_S2 = 0;



UART0_C4 = UART0_C4_OSR(OVER_SAMPLE - 1);
UART0_BDH = (divisor >> 8) & UART_BDH_SBR_MASK;   // 0x01 in BDH 
reinschreiben
UART0_BDL = (divisor & UART_BDL_SBR_MASK);         // 0x38 in BDL 
reinschreiben
UART0_C2 |= (UART_C2_TE_MASK | UART_C2_RE_MASK  ); /* Enable receiver 
and transmitter */
LED_Config();




   // da itoa einen Zeiger auf den Beginn von s zurueckgibt verkuerzt 
auch:



for(;;)
{


c = uart0_getchar();
uart0_putchar(c);

  // Wenn Null gedrückt dann Toggle LED
  if(c==0x30)
  FGPIOB_PTOR   = led_mask[1];

}
}


// Funktion GETCHAR
unsigned char uart0_getchar (void)
{
/* Warten bis Charakter empfangen wurde */
while (!(UART0_S1 & UART_S1_RDRF_MASK));
/* Return the 8-bit data from the receiver */
return UART0_D;
}

void uart0_putchar (char data)
{
/* Warten bis Speicher verfügbar im FIFO */
while(!(UART0_S1 & UART_S1_TDRE_MASK));
/* Send the character */
UART0_D =  data ;



}

 void LED_Config(void) {

SIM_SCGC5    |= (1UL <<  10) | (1UL <<  12); /* Enable Clock to Port B & 
D */
PORTB_PCR18 = (1UL <<  8);                  /* Pin PTB18 is GPIO */
PORTB_PCR19 = (1UL <<  8);                  /* Pin PTB19 is GPIO */



  FGPIOB_PDOR = (led_mask[0] |
               led_mask[1] );          /* switch Red/Green LED off  */
  FGPIOB_PDDR = (led_mask[0] |
               led_mask[1] );          /* enable PTB18/19 as Output */



}

[/c

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.