This is going to be a very interesting tutorial for us, as being an embedded developer we all start training with LED blinking, or in other words Hello Word. In this tutorial we are going to discuss in depth LED blink with NXP LPC17xx controller.
I assume that you are well aware of embedded C and knowledge of microcontrollers.
This file is common for all 17xx series controllers. In this header file, interrupts, GPIO pins, protocols definitions and the memory mappings are done here.
volatile tells the compiler not to optimize anything that has to do with the volatile variable.
The main and only reason is, when we are interfacing with hardware, and then we need to use volatile keyword.
uint32_t is coming from the following line.
typedef unsigned long uint32_t ;
If you are coming from C, then you don’t need any introduction about typedef. If not, typedef is a keyword in Cwhich is used to assign alias name for any existing data type.
1. Here we have External Interrupts and Internal Interrupts(system interrupts). For the systeminterrupts, there are already a set of handler functions also defined in our libraries.
Here, SysTick_Handler is the handler function for one of the internal interrupt.
2. So, the next question is when it will be called????
Well, when you configure the systick timer, then for every reload buffer overwritten, it causes aninterrupt, thenthe handler function SysTick_Handler will be called.
3. So, if you want to see from where these handlers are getting called by interrupts??
Then go and open your startup_LPC17xx.h header file. If you observe the vector table address mapping, thereyou will find the system interrupts and external interrupts.
__INLINE static void Delay (uint32_t dlyTicks)
curTicks = msTicks;
while ((msTicks – curTicks) <dlyTicks);
This function gives the required delay for us. For every 1 msec, the global variable msTicks will get increments inSysTick_Handler function, so, until the required time gets over, the control will be in while loop which is inDelay function.
configure LED pins
__INLINE static void LED_Config(void)
LPC_GPIO1->FIODIR = 0xB0000000; /* LEDs PORT1 are Output */
Here, LPC_GPIO1 is a macro. The declaration is in LPC17xx.h header file. This macro consists of address
location which is base address to the port 1. So, by using this structure base address, we can access port direction
register, set register, clear registers. All these structures are defined in the same LPC17xx.h header file.
Switch on LEDs
__INLINE static void LED_On (uint32_t led)
LPC_GPIO1->FIOPIN |= (led); /* Turn On LED */
As we discuss in the above paragraph, FIOPIN is a structure member which is used to read the output. ‘led’ is
the pin number which is connected to LED. Here, when you receive the pin number, due to ORing operation that
pin gets high which results the LED makes glow.
Switch off LEDs
__INLINE static void LED_Off (uint32_t led)
LPC_GPIO1->FIOPIN &= ~(led); /* Turn Off LED */
As I said above, when the function receive the pin number, that particular pin become low, so the LED will go off.
To go to next page click here