I am new to embedded software development but I have chosen to begin learning through the KL25Z board. At the moment, I am exploring the use of SysTick interrupts, but after debugging and reducing my code, I see that it never enters the SysTick ISR. I am confused as to how I should proceed from here. If there is an external linkage to the SysTick_Handler() that I need to include, I'm not sure how to do it, or how to trace it down.
Here is my code:
#include "MKL25Z4.h" /* GLOBAL VARIABLES */ /* FUNCTION PROTOTYPES */ /* MAIN PROGRAM */ int main (void) { SIM->SCGC5 |= 0x0400; /* enable clock to Port B */ PORTB->PCR[18] = 0x100; /* make PTB18 pin as GPIO */ PTB->PDDR |= 0x040000; /* make PTB18 as output pin */ SysTick->LOAD = 8388000 - 1; /* reload with number of clocks per 200 ms */ SysTick->CTRL = 5; /* enable it, no interrupt, use system clock */ while (1) { } } /* LED INITIALIZATION */ void SysTick_Handler() { PTB->PTOR = 0x040000; /* toggle red LED */ }
If I put the following into the while loop, the code works as expected (i.e. red on-board LED toggled):
if (SysTick->CTRL & 0x10000) /* if COUNT flag is set */ PTB->PTOR = 0x040000; /* toggle red LED */
These are the RTE packs I have included in Keil uVision5:
Board Support > LED (API) > LED driver for NXP FRDM-KL25Z board
CMSIS > CMSIS-CORE for Cortex-M, SC000, SC300, ARMv8-M, ARMv8.1-M
CMSIS > CMSIS-DSP Library for Cortex-M, SC000, and SC300
CMSIS > CMSIS-NN Neural Network Library
Compiler > Event Recording and Component Viewer via Debug Access Port (DAP)
Device > System Startup for NXP MKL25Z4 Devices
Any pointers that you could give me would be greatly appreciated.
Thank you.
perhaps it would be clearer if you used symbolic bit names rather than just a "Magic Number" ?
Agreed. I look at the datasheet and then don't define macros, or end up not using the ones in the MKL25Z4.h library. It ends up muddying things for me when debugging.