gpio_11xx_2.h
Go to the documentation of this file.
1 /*
2  * @brief LPC11xx GPIO driver for CHIP_LPC11CXX, CHIP_LPC110X, CHIP_LPC11XXLV,
3  * and CHIP_LPC1125 families only.
4  *
5  * @note
6  * Copyright(C) NXP Semiconductors, 2013
7  * All rights reserved.
8  *
9  * @par
10  * Software that is described herein is for illustrative purposes only
11  * which provides customers with programming information regarding the
12  * LPC products. This software is supplied "AS IS" without any warranties of
13  * any kind, and NXP Semiconductors and its licensor disclaim any and
14  * all warranties, express or implied, including all implied warranties of
15  * merchantability, fitness for a particular purpose and non-infringement of
16  * intellectual property rights. NXP Semiconductors assumes no responsibility
17  * or liability for the use of the software, conveys no license or rights under any
18  * patent, copyright, mask work right, or any other intellectual property rights in
19  * or to any products. NXP Semiconductors reserves the right to make changes
20  * in the software without notification. NXP Semiconductors also makes no
21  * representation or warranty that such application will be suitable for the
22  * specified use without further testing or modification.
23  *
24  * @par
25  * Permission to use, copy, modify, and distribute this software and its
26  * documentation is hereby granted, under NXP Semiconductors' and its
27  * licensor's relevant copyrights in the software, without fee, provided that it
28  * is used in conjunction with NXP Semiconductors microcontrollers. This
29  * copyright, permission, and disclaimer notice must appear in all copies of
30  * this code.
31  */
32 
33 #ifndef __GPIO_11XX_2_H_
34 #define __GPIO_11XX_2_H_
35 
36 #ifdef __cplusplus
37 extern "C" {
38 #endif
39 
47 #if defined(CHIP_LPC11CXX) || defined(CHIP_LPC110X) || defined(CHIP_LPC11XXLV) || defined(CHIP_LPC1125)
48 
52 typedef struct {
53  __IO uint32_t DATA[4096];
54  uint32_t RESERVED1[4096];
55  __IO uint32_t DIR;
56  __IO uint32_t IS;
57  __IO uint32_t IBE;
58  __IO uint32_t IEV;
59  __IO uint32_t IE;
60  __I uint32_t RIS;
61  __I uint32_t MIS;
62  __O uint32_t IC;
63  uint32_t RESERVED2[8184]; /* Padding added for aligning contiguous GPIO blocks */
64 } LPC_GPIO_T;
65 
71 void Chip_GPIO_Init(LPC_GPIO_T *pGPIO);
72 
78 void Chip_GPIO_DeInit(LPC_GPIO_T *pGPIO);
79 
88 STATIC INLINE void Chip_GPIO_WritePortBit(LPC_GPIO_T *pGPIO, uint32_t port, uint8_t bit, bool setting)
89 {
90  pGPIO[port].DATA[1 << bit] = setting << bit;
91 }
92 
102 STATIC INLINE void Chip_GPIO_SetPinState(LPC_GPIO_T *pGPIO, uint8_t port, uint8_t pin, bool setting)
103 {
104  pGPIO[port].DATA[1 << pin] = setting << pin;
105 }
106 
115 STATIC INLINE bool Chip_GPIO_ReadPortBit(LPC_GPIO_T *pGPIO, uint32_t port, uint8_t bit)
116 {
117  return (bool) ((pGPIO[port].DATA[1 << bit] >> bit) & 1);
118 }
119 
128 STATIC INLINE bool Chip_GPIO_GetPinState(LPC_GPIO_T *pGPIO, uint8_t port, uint8_t pin)
129 {
130  return (pGPIO[port].DATA[1 << pin]) != 0;
131 }
132 
144 void Chip_GPIO_WriteDirBit(LPC_GPIO_T *pGPIO, uint32_t port, uint8_t bit, bool setting);
145 
153 STATIC INLINE void Chip_GPIO_SetPinDIROutput(LPC_GPIO_T *pGPIO, uint8_t port, uint8_t pin)
154 {
155  pGPIO[port].DIR |= (1UL << pin);
156 }
157 
165 STATIC INLINE void Chip_GPIO_SetPinDIRInput(LPC_GPIO_T *pGPIO, uint8_t port, uint8_t pin)
166 {
167  pGPIO[port].DIR &= ~(1UL << pin);
168 }
169 
178 void Chip_GPIO_SetPinDIR(LPC_GPIO_T *pGPIO, uint8_t port, uint8_t pin, bool output);
179 
188 STATIC INLINE bool Chip_GPIO_ReadDirBit(LPC_GPIO_T *pGPIO, uint32_t port, uint8_t bit)
189 {
190  return (bool) (((pGPIO[port].DIR) >> bit) & 1);
191 }
192 
200 STATIC INLINE bool Chip_GPIO_GetPinDIR(LPC_GPIO_T *pGPIO, uint8_t port, uint8_t pin)
201 {
202  return (bool) (pGPIO[port].DIR >> pin) & 1;
203 }
204 
215 void Chip_GPIO_SetDir(LPC_GPIO_T *pGPIO, uint8_t port, uint32_t bit, uint8_t out);
216 
226 STATIC INLINE void Chip_GPIO_SetPortDIROutput(LPC_GPIO_T *pGPIO, uint8_t port, uint32_t pinMask)
227 {
228  pGPIO[port].DIR |= pinMask;
229 }
230 
240 STATIC INLINE void Chip_GPIO_SetPortDIRInput(LPC_GPIO_T *pGPIO, uint8_t port, uint32_t pinMask)
241 {
242  pGPIO[port].DIR &= ~pinMask;
243 }
244 
255 void Chip_GPIO_SetPortDIR(LPC_GPIO_T *pGPIO, uint8_t port, uint32_t pinMask, bool outSet);
256 
265 STATIC INLINE uint32_t Chip_GPIO_GetPortDIR(LPC_GPIO_T *pGPIO, uint8_t port)
266 {
267  return pGPIO[port].DIR;
268 }
269 
277 STATIC INLINE void Chip_GPIO_SetPortValue(LPC_GPIO_T *pGPIO, uint8_t port, uint32_t value)
278 {
279  pGPIO[port].DATA[0xFFF] = value;
280 }
281 
288 STATIC INLINE uint32_t Chip_GPIO_GetPortValue(LPC_GPIO_T *pGPIO, uint8_t port)
289 {
290  return pGPIO[port].DATA[0xFFF];
291 }
292 
303 STATIC INLINE void Chip_GPIO_SetValue(LPC_GPIO_T *pGPIO, uint8_t port, uint32_t bit)
304 {
305  pGPIO[port].DATA[bit] = bit;
306 }
307 
317 STATIC INLINE void Chip_GPIO_SetPortOutHigh(LPC_GPIO_T *pGPIO, uint8_t port, uint32_t pins)
318 {
319  pGPIO[port].DATA[pins] = 0xFFF;
320 }
321 
331 STATIC INLINE void Chip_GPIO_SetPinOutHigh(LPC_GPIO_T *pGPIO, uint8_t port, uint8_t pin)
332 {
333  pGPIO[port].DATA[1 << pin] = (1 << pin);
334 }
335 
345 STATIC INLINE void Chip_GPIO_ClearValue(LPC_GPIO_T *pGPIO, uint8_t port, uint32_t bit)
346 {
347  pGPIO[port].DATA[bit] = ~bit;
348 }
349 
359 STATIC INLINE void Chip_GPIO_SetPortOutLow(LPC_GPIO_T *pGPIO, uint8_t port, uint32_t pins)
360 {
361  pGPIO[port].DATA[pins] = 0;
362 }
363 
373 STATIC INLINE void Chip_GPIO_SetPinOutLow(LPC_GPIO_T *pGPIO, uint8_t port, uint8_t pin)
374 {
375  pGPIO[port].DATA[1 << pin] = 0;
376 }
377 
387 STATIC INLINE void Chip_GPIO_SetPortToggle(LPC_GPIO_T *pGPIO, uint8_t port, uint32_t pins)
388 {
389  pGPIO[port].DATA[pins] ^= 0xFFF;
390 }
391 
401 STATIC INLINE void Chip_GPIO_SetPinToggle(LPC_GPIO_T *pGPIO, uint8_t port, uint8_t pin)
402 {
403  pGPIO[port].DATA[1 << pin] ^= (1 << pin);
404 }
405 
414 STATIC INLINE uint32_t Chip_GPIO_ReadValue(LPC_GPIO_T *pGPIO, uint8_t port)
415 {
416  return pGPIO[port].DATA[4095];
417 }
418 
426 STATIC INLINE void Chip_GPIO_SetPinModeEdge(LPC_GPIO_T *pGPIO, uint8_t port, uint32_t pinmask)
427 {
428  pGPIO[port].IS &= ~pinmask;
429 }
430 
438 STATIC INLINE void Chip_GPIO_SetPinModeLevel(LPC_GPIO_T *pGPIO, uint8_t port, uint32_t pinmask)
439 {
440  pGPIO[port].IS |= pinmask;
441 }
442 
453 STATIC INLINE uint32_t Chip_GPIO_IsLevelEnabled(LPC_GPIO_T *pGPIO, uint8_t port)
454 {
455  return pGPIO[port].IS;
456 }
457 
465 STATIC INLINE void Chip_GPIO_SetEdgeModeBoth(LPC_GPIO_T *pGPIO, uint8_t port, uint32_t pinmask)
466 {
467  pGPIO[port].IBE |= pinmask;
468 }
469 
477 STATIC INLINE void Chip_GPIO_SetEdgeModeSingle(LPC_GPIO_T *pGPIO, uint8_t port, uint32_t pinmask)
478 {
479  pGPIO[port].IBE &= ~pinmask;
480 }
481 
494 STATIC INLINE uint32_t Chip_GPIO_GetEdgeModeDir(LPC_GPIO_T *pGPIO, uint8_t port)
495 {
496  return pGPIO[port].IBE;
497 }
498 
508 STATIC INLINE void Chip_GPIO_SetModeHigh(LPC_GPIO_T *pGPIO, uint8_t port, uint32_t pinmask)
509 {
510  pGPIO[port].IEV |= pinmask;
511 }
512 
522 STATIC INLINE void Chip_GPIO_SetModeLow(LPC_GPIO_T *pGPIO, uint8_t port, uint32_t pinmask)
523 {
524  pGPIO[port].IEV &= ~pinmask;
525 }
526 
537 STATIC INLINE uint32_t Chip_GPIO_GetModeHighLow(LPC_GPIO_T *pGPIO, uint8_t port)
538 {
539  return pGPIO[port].IEV;
540 }
541 
549 STATIC INLINE void Chip_GPIO_EnableInt(LPC_GPIO_T *pGPIO, uint8_t port, uint32_t pinmask)
550 {
551  pGPIO[port].IE |= pinmask;
552 }
553 
561 STATIC INLINE void Chip_GPIO_DisableInt(LPC_GPIO_T *pGPIO, uint8_t port, uint32_t pinmask)
562 {
563  pGPIO[port].IE &= ~pinmask;
564 }
565 
572 STATIC INLINE uint32_t Chip_GPIO_GetEnabledInts(LPC_GPIO_T *pGPIO, uint8_t port)
573 {
574  return pGPIO[port].IE;
575 }
576 
583 STATIC INLINE uint32_t Chip_GPIO_GetRawInts(LPC_GPIO_T *pGPIO, uint8_t port)
584 {
585  return pGPIO[port].RIS;
586 }
587 
594 STATIC INLINE uint32_t Chip_GPIO_GetMaskedInts(LPC_GPIO_T *pGPIO, uint8_t port)
595 {
596  return pGPIO[port].MIS;
597 }
598 
606 STATIC INLINE void Chip_GPIO_ClearInts(LPC_GPIO_T *pGPIO, uint8_t port, uint32_t pinmask)
607 {
608  pGPIO[port].IC = pinmask;
609 }
610 
614 typedef enum {
615  GPIO_INT_ACTIVE_LOW_LEVEL = 0x0,
616  GPIO_INT_ACTIVE_HIGH_LEVEL = 0x1,
617  GPIO_INT_FALLING_EDGE = 0x2,
618  GPIO_INT_RISING_EDGE = 0x3,
619  GPIO_INT_BOTH_EDGES = 0x6
620 } GPIO_INT_MODE_T;
621 
630 void Chip_GPIO_SetupPinInt(LPC_GPIO_T *pGPIO, uint8_t port, uint8_t pin, GPIO_INT_MODE_T mode);
631 
632 #endif /* defined(CHIP_LPC11CXX) || defined(CHIP_LPC110X) || defined(CHIP_LPC11XXLV) || defined(CHIP_LPC1125) */
633 
638 #ifdef __cplusplus
639 }
640 #endif
641 
642 #endif /* __GPIO_11XX_2_H_ */
uavcan::uint32_t
std::uint32_t uint32_t
Definition: std.hpp:26
__IO
#define __IO
Definition: core_cm0.h:154
__I
#define __I
Definition: core_cm0.h:151
INLINE
#define INLINE
Definition: lpc_types.h:205
uavcan::uint8_t
std::uint8_t uint8_t
Definition: std.hpp:24
DIR
#define DIR
Definition: sja1000_defs.h:220
__O
#define __O
Definition: core_cm0.h:153
pin
unsigned pin
Definition: board.cpp:35
STATIC
#define STATIC
Definition: lpc_types.h:140


uavcan_communicator
Author(s):
autogenerated on Fri Dec 13 2024 03:10:02