1 /*
2  * @brief General Purpose Input/Output example
3  *
4  * @note
5  * Copyright(C) NXP Semiconductors, 2013
6  * All rights reserved.
7  *
8  * @par
9  * Software that is described herein is for illustrative purposes only
10  * which provides customers with programming information regarding the
11  * LPC products.  This software is supplied "AS IS" without any warranties of
12  * any kind, and NXP Semiconductors and its licensor disclaim any and
13  * all warranties, express or implied, including all implied warranties of
14  * merchantability, fitness for a particular purpose and non-infringement of
15  * intellectual property rights.  NXP Semiconductors assumes no responsibility
16  * or liability for the use of the software, conveys no license or rights under any
17  * patent, copyright, mask work right, or any other intellectual property rights in
18  * or to any products. NXP Semiconductors reserves the right to make changes
19  * in the software without notification. NXP Semiconductors also makes no
20  * representation or warranty that such application will be suitable for the
21  * specified use without further testing or modification.
22  *
23  * @par
24  * Permission to use, copy, modify, and distribute this software and its
25  * documentation is hereby granted, under NXP Semiconductors' and its
26  * licensor's relevant copyrights in the software, without fee, provided that it
27  * is used in conjunction with NXP Semiconductors microcontrollers.  This
28  * copyright, permission, and disclaimer notice must appear in all copies of
29  * this code.
30  */
31 
32 #include "board.h"
33 
34 /*****************************************************************************
35  * Private types/enumerations/variables
36  ****************************************************************************/
37 
38 /* Number of tickrate per second */
39 #define TICKRATE_HZ (10)
40 
41 #if defined(BOARD_NXP_LPCXPRESSO_1549)
42 /* LPCXpresso LPC1549 board has LEDs on P0_0, P0_1, and P0_24. We'll toggle them
43    all at once. */
44 #define PORT_MASK       ((1 << 0) | (1 << 1) | (1 << 24))
45 
46 #else
47 #error "No PORT_MASK defined"
48 #endif /* defined(BOARD_NXP_LPCXPRESSO_1549) */
49 
50 /*****************************************************************************
51  * Public types/enumerations/variables
52  ****************************************************************************/
53 
54 /*****************************************************************************
55  * Private functions
56  ****************************************************************************/
57 
58 /*****************************************************************************
59  * Public functions
60  ****************************************************************************/
61 
62 /**
63  * @brief	Handle interrupt from SysTick timer
64  * @return	Nothing
65  */
SysTick_Handler(void)66 void SysTick_Handler(void)
67 {
68 	uint32_t states;
69 
70 	/* Get current masked port states */
71 	states = Chip_GPIO_GetMaskedPortValue(LPC_GPIO, 0);
72 
73 	/* Toggle all the states */
74 	states = ~states;
75 
76 	/* Write states back via masked set function. Only the enanled
77 	   (masked states) will be changed. */
78 	Chip_GPIO_SetMaskedPortValue(LPC_GPIO, 0, states);
79 }
80 
81 /**
82  * @brief	Main program body
83  * @return	Does not return
84  */
main(void)85 int main(void) {
86 
87 	/* Generic Initialization */
88 	SystemCoreClockUpdate();
89 	Board_Init();
90 
91 	/* Chip_GPIO_Init(LPC_GPIO) is called as part of Board_Init() */
92 
93 	/* Set port 0 pins to the output direction */
94 	Chip_GPIO_SetPortDIROutput(LPC_GPIO, 0, PORT_MASK);
95 
96 	/* Set GPIO port mask value to make sure only port 0
97 	    selected pins are activated during writes */
98 	Chip_GPIO_SetPortMask(LPC_GPIO, 0, ~PORT_MASK);
99 
100 	/* Enable SysTick Timer */
101 	SysTick_Config(SystemCoreClock / TICKRATE_HZ);
102 
103 	/* All work happens in the systick interrupt handler */
104 	while (1) {
105 		__WFI();
106 	}
107 
108 	return 0;
109 }
110