]> git.sur5r.net Git - freertos/blob
bb82300809e86a1a4b0c1c2ad33299a541e5717d
[freertos] /
1 /***************************************************************************//**\r
2  * @file em_int.h\r
3  * @brief Interrupt enable/disable unit API\r
4  * @version 4.0.0\r
5  *******************************************************************************\r
6  * @section License\r
7  * <b>(C) Copyright 2014 Silicon Labs, http://www.silabs.com</b>\r
8  *******************************************************************************\r
9  *\r
10  * Permission is granted to anyone to use this software for any purpose,\r
11  * including commercial applications, and to alter it and redistribute it\r
12  * freely, subject to the following restrictions:\r
13  *\r
14  * 1. The origin of this software must not be misrepresented; you must not\r
15  *    claim that you wrote the original software.\r
16  * 2. Altered source versions must be plainly marked as such, and must not be\r
17  *    misrepresented as being the original software.\r
18  * 3. This notice may not be removed or altered from any source distribution.\r
19  *\r
20  * DISCLAIMER OF WARRANTY/LIMITATION OF REMEDIES: Silicon Labs has no\r
21  * obligation to support this Software. Silicon Labs is providing the\r
22  * Software "AS IS", with no express or implied warranties of any kind,\r
23  * including, but not limited to, any implied warranties of merchantability\r
24  * or fitness for any particular purpose or warranties against infringement\r
25  * of any proprietary rights of a third party.\r
26  *\r
27  * Silicon Labs will not be liable for any consequential, incidental, or\r
28  * special damages, or any other relief, or for any claim by any third party,\r
29  * arising from your use of this Software.\r
30  *\r
31  ******************************************************************************/\r
32 \r
33 \r
34 #ifndef __SILICON_LABS_EM_INT_H_\r
35 #define __SILICON_LABS_EM_INT_H_\r
36 \r
37 #include "em_device.h"\r
38 \r
39 extern uint32_t INT_LockCnt;\r
40 \r
41 #ifdef __cplusplus\r
42 extern "C" {\r
43 #endif\r
44 \r
45 /** @cond DO_NOT_INCLUDE_WITH_DOXYGEN */\r
46 #ifndef UINT32_MAX\r
47 #define UINT32_MAX ((uint32_t)(0xFFFFFFFF))\r
48 #endif\r
49 /** @endcond */\r
50 \r
51 /***************************************************************************//**\r
52  * @addtogroup EM_Library\r
53  * @{\r
54  ******************************************************************************/\r
55 \r
56 /***************************************************************************//**\r
57  * @addtogroup INT\r
58  * @{\r
59  ******************************************************************************/\r
60 \r
61 /***************************************************************************//**\r
62  * @brief\r
63  *   Disable interrupts.\r
64  *\r
65  * @details\r
66  *   Disable interrupts and increment lock level counter.\r
67  *\r
68  * @return\r
69  *   The resulting interrupt nesting level.\r
70  *\r
71  ******************************************************************************/\r
72 __STATIC_INLINE uint32_t INT_Disable(void)\r
73 {\r
74   __disable_irq();\r
75   if (INT_LockCnt < UINT32_MAX)\r
76   {\r
77     INT_LockCnt++;\r
78   }\r
79 \r
80   return INT_LockCnt;\r
81 }\r
82 \r
83 /***************************************************************************//**\r
84  * @brief\r
85  *   Enable interrupts.\r
86  *\r
87  * @return\r
88  *   The resulting interrupt nesting level.\r
89  *\r
90  * @details\r
91  *   Decrement interrupt lock level counter and enable interrupts if counter\r
92  *   reached zero.\r
93  *\r
94  ******************************************************************************/\r
95 __STATIC_INLINE uint32_t INT_Enable(void)\r
96 {\r
97   uint32_t retVal;\r
98 \r
99   if (INT_LockCnt > 0)\r
100   {\r
101     INT_LockCnt--;\r
102     retVal = INT_LockCnt;\r
103     if (retVal == 0)\r
104     {\r
105       __enable_irq();\r
106     }\r
107     return retVal;\r
108   }\r
109   else\r
110   {\r
111     return 0;\r
112   }\r
113 }\r
114 \r
115 /** @} (end addtogroup INT) */\r
116 /** @} (end addtogroup EM_Library) */\r
117 \r
118 #ifdef __cplusplus\r
119 }\r
120 #endif\r
121 \r
122 #endif /* __SILICON_LABS_EM_INT_H_ */\r