]> git.sur5r.net Git - freertos/blob
b6408489d4a31ec5ac1a4915b6439bf790011a66
[freertos] /
1 /*\r
2  * @brief Self Wakeup Timer (WKT) registers and 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 __WKT_001_H_\r
33 #define __WKT_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_WKT_001 IP: Self Wakeup Timer (WKT) register block and driver\r
43  * @ingroup IP_Drivers\r
44  * Self Wakeup Timer\r
45  * @{\r
46  */\r
47 \r
48 /**\r
49  * @brief Self wake-up timer register block structure\r
50  */\r
51 typedef struct {\r
52         __IO uint32_t  CTRL;    /*!< Offset: 0x000 Alarm/Wakeup Timer Control register */\r
53         uint32_t  Reserved[2];\r
54         __IO uint32_t  COUNT;   /*!< Offset: 0x000C Alarm/Wakeup Timer Counter register */\r
55 } IP_WKT_001_T;\r
56 \r
57 /**\r
58  * WKT Control register bit fields & masks\r
59  */\r
60 #define WKT_CTRL_CLKSEL        ((uint32_t) (1 << 0))    /*!< Select the self wake-up timer clock source */\r
61 #define WKT_CTRL_ALARMFLAG     ((uint32_t) (1 << 1))    /*!< Wake-up or alarm timer flag */\r
62 #define WKT_CTRL_CLEARCTR      ((uint32_t) (1 << 2))    /*!< Clears the self wake-up timer */\r
63 \r
64 /**\r
65  * WKT Clock source values enum\r
66  */\r
67 typedef enum IP_WKT_CLKSRC {\r
68         IP_WKT_CLKSRC_DIVIRC = 0,       /*!< Divided IRC clock - runs at 750kHz */\r
69         IP_WKT_CLKSRC_10KHZ = 1     /*!< Low power clock - runs at 10kHz */\r
70 } IP_WKT_CLKSRC_T;\r
71 \r
72 /**\r
73  * @brief       Clear WKT interrupt status\r
74  * @param   pWKT    :   Pointer to WKT register block\r
75  * @return      Nothing\r
76  */\r
77 STATIC INLINE void IP_WKT_ClearIntStatus(IP_WKT_001_T *pWKT)\r
78 {\r
79         if ( pWKT->CTRL & WKT_CTRL_ALARMFLAG ) {\r
80                 pWKT->CTRL |= WKT_CTRL_ALARMFLAG;\r
81         }\r
82 }\r
83 \r
84 /**\r
85  * @brief       Clear and stop WKT counter\r
86  * @param   pWKT    :   Pointer to WKT register block\r
87  * @return      Nothing\r
88  */\r
89 STATIC INLINE void IP_WKT_Stop(IP_WKT_001_T *pWKT)\r
90 {\r
91         pWKT->CTRL |= WKT_CTRL_CLEARCTR;\r
92 }\r
93 \r
94 /**\r
95  * @brief       Set the WKT clock source\r
96  * @param   pWKT    :   Pointer to WKT register block\r
97  * @param   clkSrc  :   WKT Clock source(WKT_CLKSRC_10KHZ or WKT_CLKSRC_DIVIRC)\r
98  * @return      Nothing\r
99  */\r
100 STATIC INLINE void IP_WKT_SetClockSource(IP_WKT_001_T *pWKT, IP_WKT_CLKSRC_T clkSrc)\r
101 {\r
102         if (clkSrc == IP_WKT_CLKSRC_10KHZ) {\r
103                 pWKT->CTRL |= WKT_CTRL_CLKSEL;  /* using Low Power clock 10kHz */\r
104         }\r
105         else {\r
106                 pWKT->CTRL &= ~WKT_CTRL_CLKSEL; /* using Divided IRC clock 750kHz */\r
107         }\r
108 }\r
109 \r
110 /**\r
111  * @brief       Set the WKT counter value & start the counter\r
112  * @param   pWKT    :   Pointer to WKT register block\r
113  * @param   cntVal  :   WKT Counter value\r
114  * @return      Nothing\r
115  */\r
116 STATIC INLINE void IP_WKT_Start(IP_WKT_001_T *pWKT, uint32_t cntVal)\r
117 {\r
118         pWKT->COUNT = cntVal;\r
119 }\r
120 \r
121 /**\r
122  * @}\r
123  */\r
124 \r
125 #ifdef __cplusplus\r
126 }\r
127 #endif\r
128 \r
129 #endif /* __WKT_001_H_ */\r