CC13xx Driver Library
aon_wuc.c
Go to the documentation of this file.
1 /******************************************************************************
2 * Filename: aon_wuc.c
3 * Revised: 2015-04-28 11:13:22 +0200 (Tue, 28 Apr 2015)
4 * Revision: 43340
5 *
6 * Description: Driver for the AON Wake-Up Controller.
7 *
8 * Copyright (c) 2015, Texas Instruments Incorporated
9 * All rights reserved.
10 *
11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted provided that the following conditions are met:
13 *
14 * 1) Redistributions of source code must retain the above copyright notice,
15 * this list of conditions and the following disclaimer.
16 *
17 * 2) Redistributions in binary form must reproduce the above copyright notice,
18 * this list of conditions and the following disclaimer in the documentation
19 * and/or other materials provided with the distribution.
20 *
21 * 3) Neither the name of the ORGANIZATION nor the names of its contributors may
22 * be used to endorse or promote products derived from this software without
23 * specific prior written permission.
24 *
25 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
26 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
28 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
29 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
30 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
31 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
32 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
33 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
34 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
35 * POSSIBILITY OF SUCH DAMAGE.
36 *
37 ******************************************************************************/
38 
39 #include <driverlib/aon_wuc.h>
40 
41 //*****************************************************************************
42 //
43 // Handle support for DriverLib in ROM:
44 // This section will undo prototype renaming made in the header file
45 //
46 //*****************************************************************************
47 #if !defined(DOXYGEN)
48  #undef AONWUCAuxReset
49  #define AONWUCAuxReset NOROM_AONWUCAuxReset
50  #undef AONWUCRechargeCtrlConfigSet
51  #define AONWUCRechargeCtrlConfigSet NOROM_AONWUCRechargeCtrlConfigSet
52  #undef AONWUCOscConfig
53  #define AONWUCOscConfig NOROM_AONWUCOscConfig
54 #endif
55 
56 
57 //*****************************************************************************
58 //
60 //
61 //*****************************************************************************
62 void
64 {
65  // Reset the AUX domain.
66 // HWREG(AON_WUC_BASE + AON_WUC_O_AUXCTL) |= AON_WUC_AUXCTL_RESET_REQ; // ROM version
68 
69  // Wait for AON interface to be in sync.
71 
72  // De-assert reset on the AUX domain.
73 // HWREG(AON_WUC_BASE + AON_WUC_O_AUXCTL) &= ~AON_WUC_AUXCTL_RESET_REQ; // ROM version
75 
76  // Wait for AON interface to be in sync.
78 }
79 
80 //*****************************************************************************
81 //
83 //
84 //*****************************************************************************
85 void
86 AONWUCRechargeCtrlConfigSet(bool bAdaptEnable, uint32_t ui32AdaptRate,
87  uint32_t ui32Period, uint32_t ui32MaxPeriod)
88 {
89  uint32_t ui32Shift;
90  uint32_t ui32C1;
91  uint32_t ui32C2;
92  uint32_t ui32Reg;
93  uint32_t ui32Exponent;
94  uint32_t ui32MaxExponent;
95  uint32_t ui32Mantissa;
96  uint32_t ui32MaxMantissa;
97 
98  //
99  // Check the arguments.
100  //
101  ASSERT((ui32AdaptRate >= RC_RATE_MIN) ||
102  (ui32AdaptRate <= RC_RATE_MAX));
103 
104  ui32C1 = 0;
105  ui32C2 = 0;
106  ui32Shift = 9;
107 
108  //
109  // Clear the previous values.
110  //
111  ui32Reg = HWREG(AON_WUC_BASE + AON_WUC_O_RECHARGECFG);
116 
117  //
118  // Check if the recharge controller adaptation algorithm should be active.
119  //
120  if(bAdaptEnable)
121  {
122  //
123  // Calculate adaptation parameters.
124  //
125  while(ui32AdaptRate)
126  {
127  if(ui32AdaptRate & (1 << ui32Shift))
128  {
129  if(!ui32C1)
130  {
131  ui32C1 = ui32Shift;
132  }
133  else if(!ui32C2)
134  {
135  if((2 * ui32AdaptRate) > ((uint32_t)(3 << ui32Shift)))
136  {
137  ui32C2 = ui32Shift + 1;
138  }
139  else
140  {
141  ui32C2 = ui32Shift;
142  }
143  }
144  else
145  {
146  break;
147  }
148  ui32AdaptRate &= ~(1 << ui32Shift);
149  }
150  ui32Shift--;
151  }
152  if(!ui32C2)
153  {
154  ui32C2 = ui32C1 = ui32C1 - 1;
155  }
156 
157  ui32C1 = 10 - ui32C1;
158  ui32C2 = 10 - ui32C2;
159 
160  //
161  // Update the recharge rate parameters.
162  //
164  ui32Reg |= (ui32C1 << AON_WUC_RECHARGECFG_C1_S) |
165  (ui32C2 << AON_WUC_RECHARGECFG_C2_S) |
167  }
168 
169  //
170  // Resolve the period into an exponent and mantissa.
171  //
172  ui32Period = (ui32Period >> 4);
173  ui32Exponent = 0;
175  {
176  ui32Period >>= 1;
177  ui32Exponent++;
178  }
179  ui32Mantissa = ui32Period;
180 
181  //
182  // Resolve the max period into an exponent and mantissa.
183  //
184  ui32MaxPeriod = (ui32MaxPeriod >> 4);
185  ui32MaxExponent = 0;
187  {
188  ui32MaxPeriod >>= 1;
189  ui32MaxExponent++;
190  }
191  ui32MaxMantissa = ui32MaxPeriod;
192 
193  //
194  // Configure the controller.
195  //
196  ui32Reg |= ((ui32MaxMantissa << AON_WUC_RECHARGECFG_MAX_PER_M_S) |
197  (ui32MaxExponent << AON_WUC_RECHARGECFG_MAX_PER_E_S) |
198  (ui32Mantissa << AON_WUC_RECHARGECFG_PER_M_S) |
199  (ui32Exponent << AON_WUC_RECHARGECFG_PER_E_S));
200  HWREG(AON_WUC_BASE + AON_WUC_O_RECHARGECFG) = ui32Reg;
201 
202 }
203 
204 //*****************************************************************************
205 //
207 //
208 //*****************************************************************************
209 void
210 AONWUCOscConfig(uint32_t ui32Period)
211 {
212  uint32_t ui32Mantissa;
213  uint32_t ui32Exponent;
214  uint32_t ui32Reg;
215 
216  //
217  // Resolve the period into a exponent and mantissa.
218  //
219  ui32Period = (ui32Period >> 4);
220  ui32Exponent = 0;
221  while(ui32Period > (AON_WUC_OSCCFG_PER_M_M >> AON_WUC_OSCCFG_PER_M_S))
222  {
223  ui32Period >>= 1;
224  ui32Exponent++;
225  }
226  ui32Mantissa = ui32Period;
227 
228  //
229  // Update the period for the oscillator amplitude calibration.
230  //
231  HWREG(AON_WUC_BASE + AON_WUC_O_OSCCFG) =
232  (ui32Mantissa << AON_WUC_OSCCFG_PER_M_S) |
233  (ui32Exponent << AON_WUC_OSCCFG_PER_E_S);
234 
235  //
236  // Set the maximum recharge period equal to the oscillator amplitude
237  // calibration period.
238  //
239  ui32Reg = HWREG(AON_WUC_BASE + AON_WUC_O_RECHARGECFG);
241  ui32Reg |= ((ui32Mantissa << AON_WUC_RECHARGECFG_MAX_PER_M_S) |
242  (ui32Exponent << AON_WUC_RECHARGECFG_MAX_PER_E_S));
243 
244  //
245  // Write the configuration.
246  //
247  HWREG(AON_WUC_BASE + AON_WUC_O_RECHARGECFG) = ui32Reg;
248 }
void AONWUCOscConfig(uint32_t ui32Period)
Configure the interval for oscillator amplitude calibration.
Definition: aon_wuc.c:210
void AONWUCAuxReset(void)
Reset the AUX domain.
Definition: aon_wuc.c:63
void AONWUCRechargeCtrlConfigSet(bool bAdaptEnable, uint32_t ui32AdaptRate, uint32_t ui32Period, uint32_t ui32MaxPeriod)
Configure the recharge controller.
Definition: aon_wuc.c:86
#define RC_RATE_MIN
Definition: aon_wuc.h:190
#define ASSERT(expr)
Definition: debug.h:74
#define RC_RATE_MAX
Definition: aon_wuc.h:188