// ******************************************************************** // Example program: Flashes the RGB LED on a FRDM-KL25Z board // // 1/03/19 L.Aamodt // File: flashled2019.c // // ******************************************************************** # include #define RED_LED_SHIFT (18) // on port B #define GREEN_LED_SHIFT (19) // on port B #define BLUE_LED_SHIFT (1) // on port D #define CLOCK_OUTPUT (3) // on port C #define MASK(x) (1UL << (x)) #define CLOCK_SETUP 1 #define time 2000000 void Delay(volatile unsigned int time_del){ while (time_del--) { ; } } int main(void) { // Enable Clock to Port B and Port D and C SIM->SCGC5 |= SIM_SCGC5_PORTB_MASK | SIM_SCGC5_PORTD_MASK; SIM->SCGC5 |= SIM_SCGC5_PORTC_MASK; // Each port pin has its own 32bit Pin Control Register (PCR) // Make 3 pins GPIO PORTB->PCR[RED_LED_SHIFT] &= ~PORT_PCR_MUX_MASK; PORTB->PCR[RED_LED_SHIFT] |= PORT_PCR_MUX(1); PORTB->PCR[GREEN_LED_SHIFT] &= ~PORT_PCR_MUX_MASK; PORTB->PCR[GREEN_LED_SHIFT] |= PORT_PCR_MUX(1); PORTD->PCR[BLUE_LED_SHIFT] &= ~PORT_PCR_MUX_MASK; PORTD->PCR[BLUE_LED_SHIFT] |= PORT_PCR_MUX(1); // Make pin PTC3 a Clock Output PORTC->PCR[CLOCK_OUTPUT] &= ~PORT_PCR_MUX_MASK; PORTC->PCR[CLOCK_OUTPUT] |= PORT_PCR_MUX(5); PTC->PDDR |= MASK(CLOCK_OUTPUT); SIM->SOPT2 &= SIM_SOPT2_CLKOUTSEL_MASK; SIM->SOPT2 |= SIM_SOPT2_CLKOUTSEL(2); // Set ports to output PTB->PDDR |=MASK(RED_LED_SHIFT) | MASK(GREEN_LED_SHIFT); PTD->PDDR |= MASK(BLUE_LED_SHIFT); // Turn on LEDs by clearing the port bits to zeros PTB->PCOR |= MASK(RED_LED_SHIFT) | MASK(GREEN_LED_SHIFT); PTD->PCOR |= MASK(BLUE_LED_SHIFT); Delay(2000000); PTB->PSOR = MASK(RED_LED_SHIFT); PTB->PSOR = MASK(GREEN_LED_SHIFT); while(1) { Delay(time); PTD->PSOR = MASK(BLUE_LED_SHIFT); PTB->PCOR = MASK(RED_LED_SHIFT); Delay(time); PTB->PSOR = MASK(RED_LED_SHIFT); PTB->PCOR = MASK(GREEN_LED_SHIFT); Delay(time); PTB->PSOR = MASK(GREEN_LED_SHIFT); PTD->PCOR = MASK(BLUE_LED_SHIFT); } }