]> git.sur5r.net Git - freertos/blob
ba3e0d65010384e484b8f746c64c7bbdd5c56852
[freertos] /
1 /*\r
2  * @brief GPIO Group Interrupt Registers and control functions\r
3  *\r
4  * @note\r
5  * Copyright(C) NXP Semiconductors, 2012\r
6  * All rights reserved.\r
7  *\r
8  * @par\r
9  * Software that is described herein is for illustrative purposes only\r
10  * which provides customers with programming information regarding the\r
11  * LPC products.  This software is supplied "AS IS" without any warranties of\r
12  * any kind, and NXP Semiconductors and its licensor disclaim any and\r
13  * all warranties, express or implied, including all implied warranties of\r
14  * merchantability, fitness for a particular purpose and non-infringement of\r
15  * intellectual property rights.  NXP Semiconductors assumes no responsibility\r
16  * or liability for the use of the software, conveys no license or rights under any\r
17  * patent, copyright, mask work right, or any other intellectual property rights in\r
18  * or to any products. NXP Semiconductors reserves the right to make changes\r
19  * in the software without notification. NXP Semiconductors also makes no\r
20  * representation or warranty that such application will be suitable for the\r
21  * specified use without further testing or modification.\r
22  *\r
23  * @par\r
24  * Permission to use, copy, modify, and distribute this software and its\r
25  * documentation is hereby granted, under NXP Semiconductors' and its\r
26  * licensor's relevant copyrights in the software, without fee, provided that it\r
27  * is used in conjunction with NXP Semiconductors microcontrollers.  This\r
28  * copyright, permission, and disclaimer notice must appear in all copies of\r
29  * this code.\r
30  */\r
31 \r
32 #ifndef __GPIOGRPINT_001_H_\r
33 #define __GPIOGRPINT_001_H_\r
34 \r
35 #include "sys_config.h"\r
36 #include "cmsis.h"\r
37 \r
38 #ifdef __cplusplus\r
39 extern "C" {\r
40 #endif\r
41 \r
42 /** @defgroup IP_GPIOGRPINT_001 IP: GPIO Grouped Interrupts register block and driver\r
43  * @ingroup IP_Drivers\r
44  * @{\r
45  */\r
46 \r
47 /**\r
48  * @brief GPIO grouped interrupt register block structure\r
49  */\r
50 typedef struct {                                        /*!< GPIO_GROUP_INTn Structure */\r
51         __IO uint32_t  CTRL;                    /*!< GPIO grouped interrupt control register */\r
52         __I  uint32_t  RESERVED0[7];\r
53         __IO uint32_t  PORT_POL[8];             /*!< GPIO grouped interrupt port polarity register */\r
54         __IO uint32_t  PORT_ENA[8];             /*!< GPIO grouped interrupt port m enable register */\r
55 } IP_GPIOGROUPINT_001_T;\r
56 \r
57 /**\r
58  * @brief       GPIO Group Interrupt Pin Initialization\r
59  * @param       pGPIOGPINT      : Pointer to GPIOIR register block\r
60  * @param       PortComb        : GPIO group combined enable, should be: 0 (OR functionality) and 1 (AND functionality)\r
61  * @param       PortTrigger     : GPIO group interrupt trigger, should be: 0 (Edge-triggered) 1 (Level triggered)\r
62  * @return      None\r
63  */\r
64 STATIC INLINE void IP_GPIOGP_IntInit(IP_GPIOGROUPINT_001_T *pGPIOGPINT, uint8_t PortComb, uint8_t PortTrigger)\r
65 {\r
66         pGPIOGPINT->CTRL = ((PortTrigger & 0x1) << 2) | ((PortComb & 0x1) << 1);\r
67 }\r
68 \r
69 /**\r
70  * @brief       GPIO Group Interrupt Pin Add to Group\r
71  * @param       pGPIOGPINT      : Pointer to GPIOIR register block\r
72  * @param       PortNum         : GPIO port number, should be 0 to 7\r
73  * @param       PinNum          : GPIO pin number, should be 0 to 31\r
74  * @param       ActiveMode      : GPIO active mode, should be 0 (active LOW) and 1 (active HIGH)\r
75  * @return      None\r
76  */\r
77 void IP_GPIOGP_IntPinAdd(IP_GPIOGROUPINT_001_T *pGPIOGPINT, uint8_t PortNum, uint8_t PinNum, bool ActiveMode);\r
78 \r
79 /**\r
80  * @brief       GPIO Group Interrupt Pin Remove from Group\r
81  * @param       pGPIOGPINT      : Pointer to GPIOIR register block\r
82  * @param       PortNum         : GPIO port number, should be 0 to 7\r
83  * @param       PinNum          : GPIO pin number, should be 0 to 31\r
84  * @return      None\r
85  */\r
86 STATIC INLINE void IP_GPIOGP_IntPinRemove(IP_GPIOGROUPINT_001_T *pGPIOGPINT, uint8_t PortNum, uint8_t PinNum)\r
87 {\r
88         /* configure to PORT_ENA register */\r
89         pGPIOGPINT->PORT_ENA[PortNum] &= ~(1 << PinNum);\r
90 }\r
91 \r
92 /**\r
93  * @brief       Get GPIO Group Interrupt Get Status\r
94  * @param       pGPIOGPINT      : Pointer to GPIOIR register block\r
95  * @return      true if interrupt is pending, otherwise false\r
96  */\r
97 STATIC INLINE bool IP_GPIOGP_IntGetStatus(IP_GPIOGROUPINT_001_T *pGPIOGPINT)\r
98 {\r
99         return (bool) (pGPIOGPINT->CTRL & 0x01);\r
100 }\r
101 \r
102 /**\r
103  * @brief       Clear GPIO Group Interrupt\r
104  * @param       pGPIOGPINT      : Pointer to GPIOIR register block\r
105  * @return      None\r
106  */\r
107 STATIC INLINE void IP_GPIOGP_IntClear(IP_GPIOGROUPINT_001_T *pGPIOGPINT)\r
108 {\r
109         pGPIOGPINT->CTRL |= 0x01;\r
110 }\r
111 \r
112 /**\r
113  * @}\r
114  */\r
115 \r
116 #ifdef __cplusplus\r
117 }\r
118 #endif\r
119 \r
120 #endif /* __GPIOGRPINT_001_H_ */\r