]> git.sur5r.net Git - freertos/blob
a0d74200078ace2be3308ac038e05c751ae91bbc
[freertos] /
1 /*\r
2  * @brief LPC18xx/43xx event router driver\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 __EVRT_18XX_43XX_H_\r
33 #define __EVRT_18XX_43XX_H_\r
34 \r
35 #ifdef __cplusplus\r
36 extern "C" {\r
37 #endif\r
38 \r
39 /** @defgroup EVRT_18XX_43XX CHIP: LPC18xx/43xx Event router driver\r
40  * @ingroup CHIP_18XX_43XX_Drivers\r
41  * @{\r
42  */\r
43 \r
44 /**\r
45  * @brief Event Router register structure\r
46  */\r
47 typedef struct {                                                /*!< EVENTROUTER Structure  */\r
48         __IO uint32_t HILO;                                     /*!< Level configuration register */\r
49         __IO uint32_t EDGE;                                     /*!< Edge configuration     */\r
50         __I  uint32_t RESERVED0[1012];\r
51         __O  uint32_t CLR_EN;                           /*!< Event clear enable register */\r
52         __O  uint32_t SET_EN;                           /*!< Event set enable register */\r
53         __I  uint32_t STATUS;                           /*!< Status register        */\r
54         __I  uint32_t ENABLE;                           /*!< Enable register        */\r
55         __O  uint32_t CLR_STAT;                         /*!< Clear register         */\r
56         __O  uint32_t SET_STAT;                         /*!< Set register           */\r
57 } LPC_EVRT_T;\r
58 \r
59 /**\r
60  * @brief EVRT input sources\r
61  */\r
62 typedef enum CHIP_EVRT_SRC {\r
63         EVRT_SRC_WAKEUP0,                       /*!< WAKEUP0 event router source                */\r
64         EVRT_SRC_WAKEUP1,                       /*!< WAKEUP1 event router source                */\r
65         EVRT_SRC_WAKEUP2,                       /*!< WAKEUP2 event router source                */\r
66         EVRT_SRC_WAKEUP3,                       /*!< WAKEUP3 event router source                */\r
67         EVRT_SRC_ATIMER,                        /*!< Alarm timer event router source    */\r
68         EVRT_SRC_RTC,                           /*!< RTC event router source                    */\r
69         EVRT_SRC_BOD1,                          /*!< BOD event router source                    */\r
70         EVRT_SRC_WWDT,                          /*!< WWDT event router source                   */\r
71         EVRT_SRC_ETHERNET,                      /*!< Ethernet event router source               */\r
72         EVRT_SRC_USB0,                          /*!< USB0 event router source                   */\r
73         EVRT_SRC_USB1,                          /*!< USB1 event router source                   */\r
74         EVRT_SRC_SDIO,                          /*!< Reserved                                                   */\r
75         EVRT_SRC_CCAN,                          /*!< C_CAN event router source                  */\r
76         EVRT_SRC_COMBINE_TIMER2,        /*!< Combined timer 2 event router source       */\r
77         EVRT_SRC_COMBINE_TIMER6,        /*!< Combined timer 6 event router source       */\r
78         EVRT_SRC_QEI,                           /*!< QEI event router source                    */\r
79         EVRT_SRC_COMBINE_TIMER14,       /*!< Combined timer 14 event router source      */\r
80         EVRT_SRC_RESERVED1,                     /*!< Reserved                           */\r
81         EVRT_SRC_RESERVED2,                     /*!< Reserved                                                   */\r
82         EVRT_SRC_RESET                          /*!< Reset event router source                  */\r
83 } CHIP_EVRT_SRC_T;\r
84 \r
85 /**\r
86  * @brief Macro for checking for a valid EVRT source\r
87  */\r
88 #define PARAM_EVRT_SOURCE(n)    ((n == EVRT_SRC_WAKEUP0) || (n == EVRT_SRC_WAKEUP1)     \\r
89                                                                  || (n == EVRT_SRC_WAKEUP2) || (n == EVRT_SRC_WAKEUP3) \\r
90                                                                  || (n == EVRT_SRC_ATIMER) || (n == EVRT_SRC_RTC) \\r
91                                                                  || (n == EVRT_SRC_BOD1) || (n == EVRT_SRC_WWDT) \\r
92                                                                  || (n == EVRT_SRC_ETHERNET) || (n == EVRT_SRC_USB0) \\r
93                                                                  || (n == EVRT_SRC_USB1) || (n == EVRT_SRC_CCAN) || (n == EVRT_SRC_SDIO) \\r
94                                                                  || (n == EVRT_SRC_COMBINE_TIMER2) || (n == EVRT_SRC_COMBINE_TIMER6) \\r
95                                                                  || (n == EVRT_SRC_QEI) || (n == EVRT_SRC_COMBINE_TIMER14) \\r
96                                                                  || (n == EVRT_SRC_RESET)) \\r
97 \r
98 /**\r
99  * @brief EVRT input state detecting type\r
100  */\r
101 typedef enum CHIP_EVRT_SRC_ACTIVE {\r
102         EVRT_SRC_ACTIVE_LOW_LEVEL,              /*!< Active low level       */\r
103         EVRT_SRC_ACTIVE_HIGH_LEVEL,             /*!< Active high level          */\r
104         EVRT_SRC_ACTIVE_FALLING_EDGE,   /*!< Active falling edge        */\r
105         EVRT_SRC_ACTIVE_RISING_EDGE             /*!< Active rising edge         */\r
106 } CHIP_EVRT_SRC_ACTIVE_T;\r
107 \r
108 /**\r
109  * @brief Macro for checking for a valid EVRT state type\r
110  */\r
111 #define PARAM_EVRT_SOURCE_ACTIVE_TYPE(n) ((n == EVRT_SRC_ACTIVE_LOW_LEVEL) || (n == EVRT_SRC_ACTIVE_HIGH_LEVEL) \\r
112                                                                                   || (n == EVRT_SRC_ACTIVE_FALLING_EDGE) || (n == EVRT_SRC_ACTIVE_RISING_EDGE))\r
113 \r
114 /**\r
115  * @brief       Initialize the EVRT\r
116  * @return      Nothing\r
117  */\r
118 void Chip_EVRT_Init (void);\r
119 \r
120 /**\r
121  * @brief       Set up the type of interrupt type for a source to EVRT\r
122  * @param       EVRT_Src        : EVRT source, should be one of CHIP_EVRT_SRC_T type\r
123  * @param       type            : EVRT type, should be one of CHIP_EVRT_SRC_ACTIVE_T type\r
124  * @return      Nothing\r
125  */\r
126 void Chip_EVRT_ConfigIntSrcActiveType(CHIP_EVRT_SRC_T EVRT_Src, CHIP_EVRT_SRC_ACTIVE_T type);\r
127 \r
128 /**\r
129  * @brief       Check if a source is sending interrupt to EVRT\r
130  * @param       EVRT_Src        : EVRT source, should be one of CHIP_EVRT_SRC_T type\r
131  * @return      true if the interrupt from the source is pending, otherwise false\r
132  */\r
133 IntStatus Chip_EVRT_IsSourceInterrupting(CHIP_EVRT_SRC_T EVRT_Src);\r
134 \r
135 /**\r
136  * @brief       Enable or disable interrupt sources to EVRT\r
137  * @param       EVRT_Src        : EVRT source, should be one of CHIP_EVRT_SRC_T type\r
138  * @param       state           : ENABLE or DISABLE to enable or disable event router source\r
139  * @return      Nothing\r
140  */\r
141 void Chip_EVRT_SetUpIntSrc(CHIP_EVRT_SRC_T EVRT_Src, FunctionalState state);\r
142 \r
143 /**\r
144  * @brief       De-initializes the EVRT peripheral\r
145  * @return      Nothing\r
146  */\r
147 STATIC INLINE void Chip_EVRT_DeInit(void)\r
148 {\r
149         LPC_EVRT->CLR_EN    = 0xFFFF;\r
150         LPC_EVRT->CLR_STAT  = 0xFFFF;\r
151 }\r
152 \r
153 /**\r
154  * @brief       Clear pending interrupt EVRT source\r
155  * @param       EVRT_Src        : EVRT source, should be one of CHIP_EVRT_SRC_T type\r
156  * @return      Nothing\r
157  */\r
158 STATIC INLINE void Chip_EVRT_ClrPendIntSrc(CHIP_EVRT_SRC_T EVRT_Src)\r
159 {\r
160         LPC_EVRT->CLR_STAT = (1 << (uint8_t) EVRT_Src);\r
161 }\r
162 \r
163 /**\r
164  * @}\r
165  */\r
166 \r
167 #ifdef __cplusplus\r
168 }\r
169 #endif\r
170 \r
171 #endif /* __EVRT_18XX_43XX_H_ */\r