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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.