EE445M RTOS
Taken at the University of Texas Spring 2015
sysctl.c
Go to the documentation of this file.
1 //*****************************************************************************
2 //
3 // sysctl.c - Driver for the system controller.
4 //
5 // Copyright (c) 2005-2014 Texas Instruments Incorporated. All rights reserved.
6 // Software License Agreement
7 //
8 // Redistribution and use in source and binary forms, with or without
9 // modification, are permitted provided that the following conditions
10 // are met:
11 //
12 // Redistributions of source code must retain the above copyright
13 // notice, this list of conditions and the following disclaimer.
14 //
15 // Redistributions in binary form must reproduce the above copyright
16 // notice, this list of conditions and the following disclaimer in the
17 // documentation and/or other materials provided with the
18 // distribution.
19 //
20 // Neither the name of Texas Instruments Incorporated nor the names of
21 // its contributors may be used to endorse or promote products derived
22 // from this software without specific prior written permission.
23 //
24 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
25 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
26 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
27 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
28 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
29 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
30 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
31 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
32 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
33 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
34 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
35 //
36 // This is part of revision 2.1.0.12573 of the Tiva Peripheral Driver Library.
37 //
38 //*****************************************************************************
39 
40 //*****************************************************************************
41 //
44 //
45 //*****************************************************************************
46 
47 #include <stdbool.h>
48 #include <stdint.h>
49 #include "inc/hw_ints.h"
50 #include "inc/hw_nvic.h"
51 #include "inc/hw_sysctl.h"
52 #include "inc/hw_types.h"
53 #include "inc/hw_flash.h"
54 #include "driverlib/cpu.h"
55 #include "driverlib/debug.h"
56 #include "driverlib/interrupt.h"
57 #include "driverlib/sysctl.h"
58 
59 //*****************************************************************************
60 //
61 // The flash shift used in the math to calculate the flash sector size.
62 //
63 //*****************************************************************************
64 #ifndef FLASH_PP_MAINSS_S
65 #define FLASH_PP_MAINSS_S 16
66 #endif
67 
68 //*****************************************************************************
69 //
70 // This macro converts the XTAL value provided in the ui32Config parameter to
71 // an index to the g_pui32Xtals array.
72 //
73 //*****************************************************************************
74 #define SysCtlXtalCfgToIndex(a) ((a & 0x7c0) >> 6)
75 
76 //*****************************************************************************
77 //
78 // An array that maps the crystal number in RCC to a frequency.
79 //
80 //*****************************************************************************
81 static const uint32_t g_pui32Xtals[] =
82 {
83  1000000,
84  1843200,
85  2000000,
86  2457600,
87  3579545,
88  3686400,
89  4000000,
90  4096000,
91  4915200,
92  5000000,
93  5120000,
94  6000000,
95  6144000,
96  7372800,
97  8000000,
98  8192000,
99  10000000,
100  12000000,
101  12288000,
102  13560000,
103  14318180,
104  16000000,
105  16384000,
106  18000000,
107  20000000,
108  24000000,
109  25000000
110 };
111 
112 //*****************************************************************************
113 //
114 // Maximum number of VCO entries in the g_pui32XTALtoVCO and
115 // g_pui32VCOFrequencies structures for a device.
116 //
117 //*****************************************************************************
118 #define MAX_VCO_ENTRIES 2
119 #define MAX_XTAL_ENTRIES 18
120 
121 //*****************************************************************************
122 //
123 // These macros are used in the g_pui32XTALtoVCO table to make it more
124 // readable.
125 //
126 //*****************************************************************************
127 #define PLL_M_TO_REG(mi, mf) \
128  ((uint32_t)mi | (uint32_t)(mf << SYSCTL_PLLFREQ0_MFRAC_S))
129 #define PLL_N_TO_REG(n) \
130  ((uint32_t)(n - 1) << SYSCTL_PLLFREQ1_N_S)
131 
132 //*****************************************************************************
133 //
134 // Look up of the values that go into the PLLFREQ0 and PLLFREQ1 registers.
135 //
136 //*****************************************************************************
138 {
139  {
140  //
141  // VCO 320 MHz
142  //
143  { PLL_M_TO_REG(64, 0), PLL_N_TO_REG(1) }, // 5 MHz
144  { PLL_M_TO_REG(62, 512), PLL_N_TO_REG(1) }, // 5.12 MHz
145  { PLL_M_TO_REG(160, 0), PLL_N_TO_REG(3) }, // 6 MHz
146  { PLL_M_TO_REG(52, 85), PLL_N_TO_REG(1) }, // 6.144 MHz
147  { PLL_M_TO_REG(43, 412), PLL_N_TO_REG(1) }, // 7.3728 MHz
148  { PLL_M_TO_REG(40, 0), PLL_N_TO_REG(1) }, // 8 MHz
149  { PLL_M_TO_REG(39, 64), PLL_N_TO_REG(1) }, // 8.192 MHz
150  { PLL_M_TO_REG(32, 0), PLL_N_TO_REG(1) }, // 10 MHz
151  { PLL_M_TO_REG(80, 0), PLL_N_TO_REG(3) }, // 12 MHz
152  { PLL_M_TO_REG(26, 43), PLL_N_TO_REG(1) }, // 12.288 MHz
153  { PLL_M_TO_REG(23, 613), PLL_N_TO_REG(1) }, // 13.56 MHz
154  { PLL_M_TO_REG(22, 358), PLL_N_TO_REG(1) }, // 14.318180 MHz
155  { PLL_M_TO_REG(20, 0), PLL_N_TO_REG(1) }, // 16 MHz
156  { PLL_M_TO_REG(19, 544), PLL_N_TO_REG(1) }, // 16.384 MHz
157  { PLL_M_TO_REG(160, 0), PLL_N_TO_REG(9) }, // 18 MHz
158  { PLL_M_TO_REG(16, 0), PLL_N_TO_REG(1) }, // 20 MHz
159  { PLL_M_TO_REG(40, 0), PLL_N_TO_REG(3) }, // 24 MHz
160  { PLL_M_TO_REG(64, 0), PLL_N_TO_REG(5) }, // 25 MHz
161  },
162  {
163  //
164  // VCO 480 MHz
165  //
166  { PLL_M_TO_REG(96, 0), PLL_N_TO_REG(1) }, // 5 MHz
167  { PLL_M_TO_REG(93, 768), PLL_N_TO_REG(1) }, // 5.12 MHz
168  { PLL_M_TO_REG(80, 0), PLL_N_TO_REG(1) }, // 6 MHz
169  { PLL_M_TO_REG(78, 128), PLL_N_TO_REG(1) }, // 6.144 MHz
170  { PLL_M_TO_REG(65, 107), PLL_N_TO_REG(1) }, // 7.3728 MHz
171  { PLL_M_TO_REG(60, 0), PLL_N_TO_REG(1) }, // 8 MHz
172  { PLL_M_TO_REG(58, 608), PLL_N_TO_REG(1) }, // 8.192 MHz
173  { PLL_M_TO_REG(48, 0), PLL_N_TO_REG(1) }, // 10 MHz
174  { PLL_M_TO_REG(40, 0), PLL_N_TO_REG(1) }, // 12 MHz
175  { PLL_M_TO_REG(39, 64), PLL_N_TO_REG(1) }, // 12.288 MHz
176  { PLL_M_TO_REG(35, 408), PLL_N_TO_REG(1) }, // 13.56 MHz
177  { PLL_M_TO_REG(33, 536), PLL_N_TO_REG(1) }, // 14.318180 MHz
178  { PLL_M_TO_REG(30, 0), PLL_N_TO_REG(1) }, // 16 MHz
179  { PLL_M_TO_REG(29, 304), PLL_N_TO_REG(1) }, // 16.384 MHz
180  { PLL_M_TO_REG(80, 0), PLL_N_TO_REG(3) }, // 18 MHz
181  { PLL_M_TO_REG(24, 0), PLL_N_TO_REG(1) }, // 20 MHz
182  { PLL_M_TO_REG(20, 0), PLL_N_TO_REG(1) }, // 24 MHz
183  { PLL_M_TO_REG(96, 0), PLL_N_TO_REG(5) }, // 25 MHz
184  },
185 };
186 
187 //*****************************************************************************
188 //
189 // The mapping of system clock frequency to flash memory timing parameters.
190 //
191 //*****************************************************************************
192 static const struct
193 {
194  uint32_t ui32Frequency;
195  uint32_t ui32MemTiming;
196 }
197 g_sXTALtoMEMTIM[] =
198 {
200  (0 << SYSCTL_MEMTIM0_FWS_S) |
202  (0 << SYSCTL_MEMTIM0_EWS_S) |
204  { 40000000, (SYSCTL_MEMTIM0_FBCHT_1_5 | (1 << SYSCTL_MEMTIM0_FWS_S) |
207  { 60000000, (SYSCTL_MEMTIM0_FBCHT_2 | (2 << SYSCTL_MEMTIM0_FWS_S) |
210  { 80000000, (SYSCTL_MEMTIM0_FBCHT_2_5 | (3 << SYSCTL_MEMTIM0_FWS_S) |
213  { 100000000, (SYSCTL_MEMTIM0_FBCHT_3 | (4 << SYSCTL_MEMTIM0_FWS_S) |
216  { 120000000, (SYSCTL_MEMTIM0_FBCHT_3_5 | (5 << SYSCTL_MEMTIM0_FWS_S) |
219 };
220 
221 //*****************************************************************************
222 //
223 // Get the correct memory timings for a given system clock value.
224 //
225 //*****************************************************************************
226 static uint32_t
227 _SysCtlMemTimingGet(uint32_t ui32SysClock)
228 {
229  uint_fast8_t ui8Idx;
230 
231  //
232  // Loop through the flash memory timings.
233  //
234  for(ui8Idx = 0;
235  ui8Idx < (sizeof(g_sXTALtoMEMTIM) / sizeof(g_sXTALtoMEMTIM[0]));
236  ui8Idx++)
237  {
238  //
239  // See if the system clock frequency is less than the maximum frequency
240  // for this flash memory timing.
241  //
242  if(ui32SysClock <= g_sXTALtoMEMTIM[ui8Idx].ui32Frequency)
243  {
244  //
245  // This flash memory timing is the best choice for the system clock
246  // frequency, so return it now.
247  //
248  return(g_sXTALtoMEMTIM[ui8Idx].ui32MemTiming);
249  }
250  }
251 
252  //
253  // An appropriate flash memory timing could not be found, so the device is
254  // being clocked too fast. Return the default flash memory timing.
255  //
256  return(0);
257 }
258 
259 //*****************************************************************************
260 //
261 // Calculate the system frequency from the register settings base on the
262 // oscillator input.
263 //
264 //*****************************************************************************
265 static uint32_t
266 _SysCtlFrequencyGet(uint32_t ui32Xtal)
267 {
268  uint32_t ui32Result;
269  uint_fast16_t ui16F1, ui16F2;
270  uint_fast16_t ui16PInt, ui16PFract;
271  uint_fast8_t ui8Q, ui8N;
272 
273  //
274  // Extract all of the values from the hardware registers.
275  //
276  ui16PFract = ((HWREG(SYSCTL_PLLFREQ0) & SYSCTL_PLLFREQ0_MFRAC_M) >>
279  ui8Q = (((HWREG(SYSCTL_PLLFREQ1) & SYSCTL_PLLFREQ1_Q_M) >>
280  SYSCTL_PLLFREQ1_Q_S) + 1);
281  ui8N = (((HWREG(SYSCTL_PLLFREQ1) & SYSCTL_PLLFREQ1_N_M) >>
282  SYSCTL_PLLFREQ1_N_S) + 1);
283 
284  //
285  // Divide the crystal value by N.
286  //
287  ui32Xtal /= (uint32_t)ui8N;
288 
289  //
290  // Calculate the multiplier for bits 9:5.
291  //
292  ui16F1 = ui16PFract / 32;
293 
294  //
295  // Calculate the multiplier for bits 4:0.
296  //
297  ui16F2 = ui16PFract - (ui16F1 * 32);
298 
299  //
300  // Get the integer portion.
301  //
302  ui32Result = ui32Xtal * (uint32_t)ui16PInt;
303 
304  //
305  // Add first fractional bits portion(9:0).
306  //
307  ui32Result += (ui32Xtal * (uint32_t)ui16F1) / 32;
308 
309  //
310  // Add the second fractional bits portion(4:0).
311  //
312  ui32Result += (ui32Xtal * (uint32_t)ui16F2) / 1024;
313 
314  //
315  // Divide the result by Q.
316  //
317  ui32Result = ui32Result / (uint32_t)ui8Q;
318 
319  //
320  // Return the resulting PLL frequency.
321  //
322  return(ui32Result);
323 }
324 
325 //*****************************************************************************
326 //
327 // Look up of the possible VCO frequencies.
328 //
329 //*****************************************************************************
330 static const uint32_t g_pui32VCOFrequencies[MAX_VCO_ENTRIES] =
331 {
332  320000000, // VCO 320
333  480000000, // VCO 480
334 };
335 
336 //*****************************************************************************
337 //
338 // The base addresses of the various peripheral control registers.
339 //
340 //*****************************************************************************
341 #define SYSCTL_PPBASE 0x400fe300
342 #define SYSCTL_SRBASE 0x400fe500
343 #define SYSCTL_RCGCBASE 0x400fe600
344 #define SYSCTL_SCGCBASE 0x400fe700
345 #define SYSCTL_DCGCBASE 0x400fe800
346 #define SYSCTL_PCBASE 0x400fe900
347 #define SYSCTL_PRBASE 0x400fea00
348 
349 //*****************************************************************************
350 //
360 //
361 //*****************************************************************************
362 #ifdef DEBUG
363 static bool
364 _SysCtlPeripheralValid(uint32_t ui32Peripheral)
365 {
366  return((ui32Peripheral == SYSCTL_PERIPH_ADC0) ||
367  (ui32Peripheral == SYSCTL_PERIPH_ADC1) ||
368  (ui32Peripheral == SYSCTL_PERIPH_CAN0) ||
369  (ui32Peripheral == SYSCTL_PERIPH_CAN1) ||
370  (ui32Peripheral == SYSCTL_PERIPH_COMP0) ||
371  (ui32Peripheral == SYSCTL_PERIPH_CCM0) ||
372  (ui32Peripheral == SYSCTL_PERIPH_EEPROM0) ||
373  (ui32Peripheral == SYSCTL_PERIPH_EPHY0) ||
374  (ui32Peripheral == SYSCTL_PERIPH_EMAC0) ||
375  (ui32Peripheral == SYSCTL_PERIPH_EPI0) ||
376  (ui32Peripheral == SYSCTL_PERIPH_FAN0) ||
377  (ui32Peripheral == SYSCTL_PERIPH_GPIOA) ||
378  (ui32Peripheral == SYSCTL_PERIPH_GPIOB) ||
379  (ui32Peripheral == SYSCTL_PERIPH_GPIOC) ||
380  (ui32Peripheral == SYSCTL_PERIPH_GPIOD) ||
381  (ui32Peripheral == SYSCTL_PERIPH_GPIOE) ||
382  (ui32Peripheral == SYSCTL_PERIPH_GPIOF) ||
383  (ui32Peripheral == SYSCTL_PERIPH_GPIOG) ||
384  (ui32Peripheral == SYSCTL_PERIPH_GPIOH) ||
385  (ui32Peripheral == SYSCTL_PERIPH_GPIOJ) ||
386  (ui32Peripheral == SYSCTL_PERIPH_GPIOK) ||
387  (ui32Peripheral == SYSCTL_PERIPH_GPIOL) ||
388  (ui32Peripheral == SYSCTL_PERIPH_GPIOM) ||
389  (ui32Peripheral == SYSCTL_PERIPH_GPION) ||
390  (ui32Peripheral == SYSCTL_PERIPH_GPIOP) ||
391  (ui32Peripheral == SYSCTL_PERIPH_GPIOQ) ||
392  (ui32Peripheral == SYSCTL_PERIPH_GPIOR) ||
393  (ui32Peripheral == SYSCTL_PERIPH_GPIOS) ||
394  (ui32Peripheral == SYSCTL_PERIPH_GPIOT) ||
395  (ui32Peripheral == SYSCTL_PERIPH_HIBERNATE) ||
396  (ui32Peripheral == SYSCTL_PERIPH_I2C0) ||
397  (ui32Peripheral == SYSCTL_PERIPH_I2C1) ||
398  (ui32Peripheral == SYSCTL_PERIPH_I2C2) ||
399  (ui32Peripheral == SYSCTL_PERIPH_I2C3) ||
400  (ui32Peripheral == SYSCTL_PERIPH_I2C4) ||
401  (ui32Peripheral == SYSCTL_PERIPH_I2C5) ||
402  (ui32Peripheral == SYSCTL_PERIPH_I2C6) ||
403  (ui32Peripheral == SYSCTL_PERIPH_I2C7) ||
404  (ui32Peripheral == SYSCTL_PERIPH_I2C8) ||
405  (ui32Peripheral == SYSCTL_PERIPH_I2C9) ||
406  (ui32Peripheral == SYSCTL_PERIPH_LCD0) ||
407  (ui32Peripheral == SYSCTL_PERIPH_PWM0) ||
408  (ui32Peripheral == SYSCTL_PERIPH_PWM1) ||
409  (ui32Peripheral == SYSCTL_PERIPH_QEI0) ||
410  (ui32Peripheral == SYSCTL_PERIPH_QEI1) ||
411  (ui32Peripheral == SYSCTL_PERIPH_SSI0) ||
412  (ui32Peripheral == SYSCTL_PERIPH_SSI1) ||
413  (ui32Peripheral == SYSCTL_PERIPH_SSI2) ||
414  (ui32Peripheral == SYSCTL_PERIPH_SSI3) ||
415  (ui32Peripheral == SYSCTL_PERIPH_TIMER0) ||
416  (ui32Peripheral == SYSCTL_PERIPH_TIMER1) ||
417  (ui32Peripheral == SYSCTL_PERIPH_TIMER2) ||
418  (ui32Peripheral == SYSCTL_PERIPH_TIMER3) ||
419  (ui32Peripheral == SYSCTL_PERIPH_TIMER4) ||
420  (ui32Peripheral == SYSCTL_PERIPH_TIMER5) ||
421  (ui32Peripheral == SYSCTL_PERIPH_UART0) ||
422  (ui32Peripheral == SYSCTL_PERIPH_UART1) ||
423  (ui32Peripheral == SYSCTL_PERIPH_UART2) ||
424  (ui32Peripheral == SYSCTL_PERIPH_UART3) ||
425  (ui32Peripheral == SYSCTL_PERIPH_UART4) ||
426  (ui32Peripheral == SYSCTL_PERIPH_UART5) ||
427  (ui32Peripheral == SYSCTL_PERIPH_UART6) ||
428  (ui32Peripheral == SYSCTL_PERIPH_UART7) ||
429  (ui32Peripheral == SYSCTL_PERIPH_UDMA) ||
430  (ui32Peripheral == SYSCTL_PERIPH_USB0) ||
431  (ui32Peripheral == SYSCTL_PERIPH_WDOG0) ||
432  (ui32Peripheral == SYSCTL_PERIPH_WDOG1) ||
433  (ui32Peripheral == SYSCTL_PERIPH_WTIMER0) ||
434  (ui32Peripheral == SYSCTL_PERIPH_WTIMER1) ||
435  (ui32Peripheral == SYSCTL_PERIPH_WTIMER2) ||
436  (ui32Peripheral == SYSCTL_PERIPH_WTIMER3) ||
437  (ui32Peripheral == SYSCTL_PERIPH_WTIMER4) ||
438  (ui32Peripheral == SYSCTL_PERIPH_WTIMER5));
439 }
440 #endif
441 
442 //*****************************************************************************
443 //
449 //
450 //*****************************************************************************
451 uint32_t
453 {
454  return((HWREG(FLASH_SSIZE) + 1) * 256);
455 }
456 
457 //*****************************************************************************
458 //
464 //
465 //*****************************************************************************
466 uint32_t
468 {
469 
470  //
471  // TM4C123 devices report the flash size in DC0.
472  //
473  if(CLASS_IS_TM4C123)
474  {
475  //
476  // Compute the size of the flash.
477  //
478  return(((HWREG(SYSCTL_DC0) & SYSCTL_DC0_FLASHSZ_M) << 11) + 0x800);
479  }
480  else
481  {
482  //
483  // Get the flash size from the FLASH_PP register.
484  //
485  return(2048 * ((HWREG(FLASH_PP) & FLASH_PP_SIZE_M) + 1));
486  }
487 }
488 
489 //*****************************************************************************
490 //
497 //
498 //*****************************************************************************
499 uint32_t
501 {
502  //
503  // TM4C129 devices store the value in a different register.
504  //
505  if(CLASS_IS_TM4C129)
506  {
507  //
508  // Get the flash sector size from the FLASH_PP register.
509  //
510  return(1 << (10 +
511  ((HWREG(FLASH_PP) &
513  }
514  else
515  {
516  //
517  // The sector size is fixed at 1KB.
518  //
519  return(1024);
520  }
521 }
522 
523 //*****************************************************************************
524 //
565 //
566 //*****************************************************************************
567 bool
568 SysCtlPeripheralPresent(uint32_t ui32Peripheral)
569 {
570  //
571  // Check the arguments.
572  //
573  ASSERT(_SysCtlPeripheralValid(ui32Peripheral));
574 
575  //
576  // See if this peripheral is present.
577  //
578  return(HWREGBITW(SYSCTL_PPBASE + ((ui32Peripheral & 0xff00) >> 8),
579  ui32Peripheral & 0xff));
580 }
581 
582 //*****************************************************************************
583 //
629 //
630 //*****************************************************************************
631 bool
632 SysCtlPeripheralReady(uint32_t ui32Peripheral)
633 {
634  //
635  // Check the arguments.
636  //
637  ASSERT(_SysCtlPeripheralValid(ui32Peripheral));
638 
639  //
640  // See if this peripheral is ready.
641  //
642  return(HWREGBITW(SYSCTL_PRBASE + ((ui32Peripheral & 0xff00) >> 8),
643  ui32Peripheral & 0xff));
644 }
645 
646 //*****************************************************************************
647 //
664 //
665 //*****************************************************************************
666 void
667 SysCtlPeripheralPowerOn(uint32_t ui32Peripheral)
668 {
669  //
670  // Check the arguments.
671  //
672  ASSERT(_SysCtlPeripheralValid(ui32Peripheral));
673 
674  //
675  // Power on this peripheral.
676  //
677  HWREGBITW(SYSCTL_PCBASE + ((ui32Peripheral & 0xff00) >> 8),
678  ui32Peripheral & 0xff) = 1;
679 }
680 
681 //*****************************************************************************
682 //
700 //
701 //*****************************************************************************
702 void
703 SysCtlPeripheralPowerOff(uint32_t ui32Peripheral)
704 {
705  //
706  // Check the arguments.
707  //
708  ASSERT(_SysCtlPeripheralValid(ui32Peripheral));
709 
710  //
711  // Power off this peripheral.
712  //
713  HWREGBITW(SYSCTL_PCBASE + ((ui32Peripheral & 0xff00) >> 8),
714  ui32Peripheral & 0xff) = 0;
715 }
716 
717 //*****************************************************************************
718 //
759 //
760 //*****************************************************************************
761 void
762 SysCtlPeripheralReset(uint32_t ui32Peripheral)
763 {
764  volatile uint_fast8_t ui8Delay;
765 
766  //
767  // Check the arguments.
768  //
769  ASSERT(_SysCtlPeripheralValid(ui32Peripheral));
770 
771  //
772  // Put the peripheral into the reset state.
773  //
774  HWREGBITW(SYSCTL_SRBASE + ((ui32Peripheral & 0xff00) >> 8),
775  ui32Peripheral & 0xff) = 1;
776 
777  //
778  // Delay for a little bit.
779  //
780  for(ui8Delay = 0; ui8Delay < 16; ui8Delay++)
781  {
782  }
783 
784  //
785  // Take the peripheral out of the reset state.
786  //
787  HWREGBITW(SYSCTL_SRBASE + ((ui32Peripheral & 0xff00) >> 8),
788  ui32Peripheral & 0xff) = 0;
789 }
790 
791 //*****************************************************************************
792 //
838 //
839 //*****************************************************************************
840 void
841 SysCtlPeripheralEnable(uint32_t ui32Peripheral)
842 {
843  //
844  // Check the arguments.
845  //
846  ASSERT(_SysCtlPeripheralValid(ui32Peripheral));
847 
848  //
849  // Enable this peripheral.
850  //
851  HWREGBITW(SYSCTL_RCGCBASE + ((ui32Peripheral & 0xff00) >> 8),
852  ui32Peripheral & 0xff) = 1;
853 }
854 
855 //*****************************************************************************
856 //
895 //
896 //*****************************************************************************
897 void
898 SysCtlPeripheralDisable(uint32_t ui32Peripheral)
899 {
900  //
901  // Check the arguments.
902  //
903  ASSERT(_SysCtlPeripheralValid(ui32Peripheral));
904 
905  //
906  // Disable this peripheral.
907  //
908  HWREGBITW(SYSCTL_RCGCBASE + ((ui32Peripheral & 0xff00) >> 8),
909  ui32Peripheral & 0xff) = 0;
910 }
911 
912 //*****************************************************************************
913 //
959 //
960 //*****************************************************************************
961 void
962 SysCtlPeripheralSleepEnable(uint32_t ui32Peripheral)
963 {
964  //
965  // Check the arguments.
966  //
967  ASSERT(_SysCtlPeripheralValid(ui32Peripheral));
968 
969  //
970  // Enable this peripheral in sleep mode.
971  //
972  HWREGBITW(SYSCTL_SCGCBASE + ((ui32Peripheral & 0xff00) >> 8),
973  ui32Peripheral & 0xff) = 1;
974 }
975 
976 //*****************************************************************************
977 //
1024 //
1025 //*****************************************************************************
1026 void
1027 SysCtlPeripheralSleepDisable(uint32_t ui32Peripheral)
1028 {
1029  //
1030  // Check the arguments.
1031  //
1032  ASSERT(_SysCtlPeripheralValid(ui32Peripheral));
1033 
1034  //
1035  // Disable this peripheral in sleep mode.
1036  //
1037  HWREGBITW(SYSCTL_SCGCBASE + ((ui32Peripheral & 0xff00) >> 8),
1038  ui32Peripheral & 0xff) = 0;
1039 }
1040 
1041 //*****************************************************************************
1042 //
1090 //
1091 //*****************************************************************************
1092 void
1093 SysCtlPeripheralDeepSleepEnable(uint32_t ui32Peripheral)
1094 {
1095  //
1096  // Check the arguments.
1097  //
1098  ASSERT(_SysCtlPeripheralValid(ui32Peripheral));
1099 
1100  //
1101  // Enable this peripheral in deep-sleep mode.
1102  //
1103  HWREGBITW(SYSCTL_DCGCBASE + ((ui32Peripheral & 0xff00) >> 8),
1104  ui32Peripheral & 0xff) = 1;
1105 }
1106 
1107 //*****************************************************************************
1108 //
1158 //
1159 //*****************************************************************************
1160 void
1161 SysCtlPeripheralDeepSleepDisable(uint32_t ui32Peripheral)
1162 {
1163  //
1164  // Check the arguments.
1165  //
1166  ASSERT(_SysCtlPeripheralValid(ui32Peripheral));
1167 
1168  //
1169  // Disable this peripheral in deep-sleep mode.
1170  //
1171  HWREGBITW(SYSCTL_DCGCBASE + ((ui32Peripheral & 0xff00) >> 8),
1172  ui32Peripheral & 0xff) = 0;
1173 }
1174 
1175 //*****************************************************************************
1176 //
1190 //
1191 //*****************************************************************************
1192 void
1194 {
1195  if(CLASS_IS_TM4C123)
1196  {
1197  //
1198  // Enable peripheral clock gating as requested.
1199  //
1200  if(bEnable)
1201  {
1203  }
1204  else
1205  {
1207  }
1208  }
1209  else
1210  {
1211  //
1212  // Enable peripheral clock gating as requested.
1213  //
1214  if(bEnable)
1215  {
1217  }
1218  else
1219  {
1221  }
1222  }
1223 }
1224 
1225 //*****************************************************************************
1226 //
1251 //
1252 //*****************************************************************************
1253 void
1254 SysCtlIntRegister(void (*pfnHandler)(void))
1255 {
1256  //
1257  // Register the interrupt handler, returning an error if an error occurs.
1258  //
1259  IntRegister(INT_SYSCTL_TM4C123, pfnHandler);
1260 
1261  //
1262  // Enable the system control interrupt.
1263  //
1265 }
1266 
1267 //*****************************************************************************
1268 //
1279 //
1280 //*****************************************************************************
1281 void
1283 {
1284  //
1285  // Disable the interrupt.
1286  //
1288 
1289  //
1290  // Unregister the interrupt handler.
1291  //
1293 }
1294 
1295 //*****************************************************************************
1296 //
1314 //
1315 //*****************************************************************************
1316 void
1317 SysCtlIntEnable(uint32_t ui32Ints)
1318 {
1319  //
1320  // Enable the specified interrupts.
1321  //
1322  HWREG(SYSCTL_IMC) |= ui32Ints;
1323 }
1324 
1325 //*****************************************************************************
1326 //
1344 //
1345 //*****************************************************************************
1346 void
1347 SysCtlIntDisable(uint32_t ui32Ints)
1348 {
1349  //
1350  // Disable the specified interrupts.
1351  //
1352  HWREG(SYSCTL_IMC) &= ~(ui32Ints);
1353 }
1354 
1355 //*****************************************************************************
1356 //
1383 //
1384 //*****************************************************************************
1385 void
1386 SysCtlIntClear(uint32_t ui32Ints)
1387 {
1388  //
1389  // Clear the requested interrupt sources.
1390  //
1391  HWREG(SYSCTL_MISC) = ui32Ints;
1392 }
1393 
1394 //*****************************************************************************
1395 //
1414 //
1415 //*****************************************************************************
1416 uint32_t
1417 SysCtlIntStatus(bool bMasked)
1418 {
1419  //
1420  // Return either the interrupt status or the raw interrupt status as
1421  // requested.
1422  //
1423  if(bMasked)
1424  {
1425  return(HWREG(SYSCTL_MISC));
1426  }
1427  else
1428  {
1429  return(HWREG(SYSCTL_RIS));
1430  }
1431 }
1432 
1433 //*****************************************************************************
1434 //
1452 //
1453 //*****************************************************************************
1454 void
1455 SysCtlLDOSleepSet(uint32_t ui32Voltage)
1456 {
1457  //
1458  // Check the arguments.
1459  //
1460  ASSERT((ui32Voltage == SYSCTL_LDO_0_90V) ||
1461  (ui32Voltage == SYSCTL_LDO_0_95V) ||
1462  (ui32Voltage == SYSCTL_LDO_1_00V) ||
1463  (ui32Voltage == SYSCTL_LDO_1_05V) ||
1464  (ui32Voltage == SYSCTL_LDO_1_10V) ||
1465  (ui32Voltage == SYSCTL_LDO_1_15V) ||
1466  (ui32Voltage == SYSCTL_LDO_1_20V));
1467 
1468  //
1469  // Set the sleep-mode LDO voltage to the requested value.
1470  //
1471  HWREG(SYSCTL_LDOSPCTL) = ui32Voltage;
1472 }
1473 
1474 //*****************************************************************************
1475 //
1490 //
1491 //*****************************************************************************
1492 uint32_t
1494 {
1495  //
1496  // Return the sleep-mode LDO voltage setting.
1497  //
1498  return(HWREG(SYSCTL_LDOSPCTL));
1499 }
1500 
1501 //*****************************************************************************
1502 //
1521 //
1522 //*****************************************************************************
1523 void
1524 SysCtlLDODeepSleepSet(uint32_t ui32Voltage)
1525 {
1526  //
1527  // Check the arguments.
1528  //
1529  ASSERT((ui32Voltage == SYSCTL_LDO_0_90V) ||
1530  (ui32Voltage == SYSCTL_LDO_0_95V) ||
1531  (ui32Voltage == SYSCTL_LDO_1_00V) ||
1532  (ui32Voltage == SYSCTL_LDO_1_05V) ||
1533  (ui32Voltage == SYSCTL_LDO_1_10V) ||
1534  (ui32Voltage == SYSCTL_LDO_1_15V) ||
1535  (ui32Voltage == SYSCTL_LDO_1_20V));
1536 
1537  //
1538  // Set the deep-sleep LDO voltage to the requested value.
1539  //
1540  HWREG(SYSCTL_LDODPCTL) = ui32Voltage;
1541 }
1542 
1543 //*****************************************************************************
1544 //
1560 //
1561 //*****************************************************************************
1562 uint32_t
1564 {
1565  //
1566  // Return the deep-sleep-mode LDO voltage setting.
1567  //
1568  return(HWREG(SYSCTL_LDODPCTL));
1569 }
1570 
1571 //*****************************************************************************
1572 //
1602 //
1603 //*****************************************************************************
1604 void
1605 SysCtlSleepPowerSet(uint32_t ui32Config)
1606 {
1607  //
1608  // Set the sleep-mode flash and SRAM power configuration.
1609  //
1610  HWREG(SYSCTL_SLPPWRCFG) = ui32Config;
1611 }
1612 
1613 //*****************************************************************************
1614 //
1646 //
1647 //*****************************************************************************
1648 void
1649 SysCtlDeepSleepPowerSet(uint32_t ui32Config)
1650 {
1651  //
1652  // Set the deep-sleep-mode flash and SRAM power configuration.
1653  //
1654  HWREG(SYSCTL_DSLPPWRCFG) = ui32Config;
1655 }
1656 
1657 //*****************************************************************************
1658 //
1668 //
1669 //*****************************************************************************
1670 void
1672 {
1673  //
1674  // Perform a software reset request. This request causes the device to
1675  // reset, no further code is executed.
1676  //
1678 
1679  //
1680  // The device should have reset, so this should never be reached. Just in
1681  // case, loop forever.
1682  //
1683  while(1)
1684  {
1685  }
1686 }
1687 
1688 //*****************************************************************************
1689 //
1700 //
1701 //*****************************************************************************
1702 void
1704 {
1705  //
1706  // Wait for an interrupt.
1707  //
1708  CPUwfi();
1709 }
1710 
1711 //*****************************************************************************
1712 //
1723 //
1724 //*****************************************************************************
1725 void
1727 {
1728  //
1729  // Enable deep-sleep.
1730  //
1732 
1733  //
1734  // Wait for an interrupt.
1735  //
1736  CPUwfi();
1737 
1738  //
1739  // Disable deep-sleep so that a future sleep works correctly.
1740  //
1742 }
1743 
1744 //*****************************************************************************
1745 //
1757 //
1758 //*****************************************************************************
1759 uint32_t
1761 {
1762  //
1763  // Return the reset reasons.
1764  //
1765  return(HWREG(SYSCTL_RESC));
1766 }
1767 
1768 //*****************************************************************************
1769 //
1784 //
1785 //*****************************************************************************
1786 void
1787 SysCtlResetCauseClear(uint32_t ui32Causes)
1788 {
1789  //
1790  // Clear the given reset reasons.
1791  //
1792  HWREG(SYSCTL_RESC) &= ~(ui32Causes);
1793 }
1794 
1795 //*****************************************************************************
1796 //
1822 //
1823 //*****************************************************************************
1824 #if defined(ewarm) || defined(DOXYGEN)
1825 void
1826 SysCtlDelay(uint32_t ui32Count)
1827 {
1828  __asm(" subs r0, #1\n"
1829  " bne.n SysCtlDelay\n"
1830  " bx lr");
1831 }
1832 #endif
1833 #if defined(codered) || defined(gcc) || defined(sourcerygxx)
1834 void __attribute__((naked))
1835 SysCtlDelay(uint32_t ui32Count)
1836 {
1837  __asm(" subs r0, #1\n"
1838  " bne SysCtlDelay\n"
1839  " bx lr");
1840 }
1841 #endif
1842 #if defined(rvmdk) || defined(__ARMCC_VERSION)
1843 __asm void
1844 SysCtlDelay(uint32_t ui32Count)
1845 {
1846  subs r0, #1;
1847  bne SysCtlDelay;
1848  bx lr;
1849 }
1850 #endif
1851 //
1852 // For CCS implement this function in pure assembly. This prevents the TI
1853 // compiler from doing funny things with the optimizer.
1854 //
1855 #if defined(ccs)
1856 __asm(" .sect \".text:SysCtlDelay\"\n"
1857  " .clink\n"
1858  " .thumbfunc SysCtlDelay\n"
1859  " .thumb\n"
1860  " .global SysCtlDelay\n"
1861  "SysCtlDelay:\n"
1862  " subs r0, #1\n"
1863  " bne.n SysCtlDelay\n"
1864  " bx lr\n");
1865 #endif
1866 
1867 //*****************************************************************************
1868 //
1897 //
1898 //*****************************************************************************
1899 void
1900 SysCtlMOSCConfigSet(uint32_t ui32Config)
1901 {
1902  //
1903  // Configure the MOSC control.
1904  //
1905  HWREG(SYSCTL_MOSCCTL) = ui32Config;
1906 }
1907 
1908 //*****************************************************************************
1909 //
1934 //
1935 //*****************************************************************************
1936 uint32_t
1937 SysCtlPIOSCCalibrate(uint32_t ui32Type)
1938 {
1939  //
1940  // Perform the requested calibration. If performing user calibration, the
1941  // UTEN bit must be set with one write, then the UT field in a second
1942  // write, and the UPDATE bit in a final write. For other calibration
1943  // types, a single write to set UPDATE or CAL is all that is required.
1944  //
1945  if(ui32Type & (SYSCTL_PIOSCCAL_UTEN | SYSCTL_PIOSCCAL_UPDATE))
1946  {
1949  ui32Type & (SYSCTL_PIOSCCAL_UTEN | SYSCTL_PIOSCCAL_UT_M);
1950  }
1951  HWREG(SYSCTL_PIOSCCAL) = ui32Type;
1952 
1953  //
1954  // See if an automatic calibration was requested.
1955  //
1956  if(ui32Type & SYSCTL_PIOSCCAL_CAL)
1957  {
1958  //
1959  // Wait for the automatic calibration to complete.
1960  //
1962  {
1963  }
1964 
1965  //
1966  // If the automatic calibration failed, return an error.
1967  //
1968  if((HWREG(SYSCTL_PIOSCSTAT) & SYSCTL_PIOSCSTAT_CR_M) !=
1970  {
1971  return(0);
1972  }
1973  }
1974 
1975  //
1976  // The calibration was successful.
1977  //
1978  return(1);
1979 }
1980 
1981 //*****************************************************************************
1982 //
2028 //
2029 //*****************************************************************************
2030 void
2031 SysCtlResetBehaviorSet(uint32_t ui32Behavior)
2032 {
2033  HWREG(SYSCTL_RESBEHAVCTL) = ui32Behavior;
2034 }
2035 
2036 //*****************************************************************************
2037 //
2048 //
2049 //*****************************************************************************
2050 uint32_t
2052 {
2053  return(HWREG(SYSCTL_RESBEHAVCTL));
2054 }
2055 
2056 //*****************************************************************************
2057 //
2112 //
2113 //*****************************************************************************
2114 uint32_t
2115 SysCtlClockFreqSet(uint32_t ui32Config, uint32_t ui32SysClock)
2116 {
2117  int32_t i32Timeout, i32VCOIdx, i32XtalIdx;
2118  uint32_t ui32MOSCCTL;
2119  uint32_t ui32SysDiv, ui32Osc, ui32OscSelect, ui32RSClkConfig;
2120  bool bNewPLL;
2121 
2122  //
2123  // TM4C123 devices should not use this function.
2124  //
2125  if(CLASS_IS_TM4C123)
2126  {
2127  return(0);
2128  }
2129 
2130  //
2131  // Get the index of the crystal from the ui32Config parameter.
2132  //
2133  i32XtalIdx = SysCtlXtalCfgToIndex(ui32Config);
2134 
2135  //
2136  // Determine which non-PLL source was selected.
2137  //
2138  if((ui32Config & 0x38) == SYSCTL_OSC_INT)
2139  {
2140  //
2141  // Use the nominal frequency for the PIOSC oscillator and set the
2142  // crystal select.
2143  //
2144  ui32Osc = 16000000;
2145  ui32OscSelect = SYSCTL_RSCLKCFG_OSCSRC_PIOSC;
2146  ui32OscSelect |= SYSCTL_RSCLKCFG_PLLSRC_PIOSC;
2147 
2148  //
2149  // Force the crystal index to the value for 16-MHz.
2150  //
2152  }
2153  else if((ui32Config & 0x38) == SYSCTL_OSC_INT30)
2154  {
2155  //
2156  // Use the nominal frequency for the low frequency oscillator.
2157  //
2158  ui32Osc = 30000;
2159  ui32OscSelect = SYSCTL_RSCLKCFG_OSCSRC_LFIOSC;
2160  }
2161  else if((ui32Config & 0x38) == (SYSCTL_OSC_EXT32 & 0x38))
2162  {
2163  //
2164  // Use the RTC frequency.
2165  //
2166  ui32Osc = 32768;
2167  ui32OscSelect = SYSCTL_RSCLKCFG_OSCSRC_RTC;
2168  }
2169  else if((ui32Config & 0x38) == SYSCTL_OSC_MAIN)
2170  {
2171  //
2172  // Bounds check the source frequency for the main oscillator. The is
2173  // because the PLL tables in the g_pppui32XTALtoVCO structure range
2174  // from 5MHz to 25MHz.
2175  //
2176  if((i32XtalIdx > (SysCtlXtalCfgToIndex(SYSCTL_XTAL_25MHZ))) ||
2177  (i32XtalIdx < (SysCtlXtalCfgToIndex(SYSCTL_XTAL_5MHZ))))
2178  {
2179  return(0);
2180  }
2181 
2182  ui32Osc = g_pui32Xtals[i32XtalIdx];
2183 
2184  //
2185  // Set the PLL source select to MOSC.
2186  //
2187  ui32OscSelect = SYSCTL_RSCLKCFG_OSCSRC_MOSC;
2188  ui32OscSelect |= SYSCTL_RSCLKCFG_PLLSRC_MOSC;
2189 
2190  //
2191  // Clear MOSC power down, high oscillator range setting, and no crystal
2192  // present setting.
2193  //
2194  ui32MOSCCTL = HWREG(SYSCTL_MOSCCTL) &
2197 
2198  //
2199  // Increase the drive strength for MOSC of 10 MHz and above.
2200  //
2201  if(i32XtalIdx >= (SysCtlXtalCfgToIndex(SYSCTL_XTAL_10MHZ) -
2203  {
2204  ui32MOSCCTL |= SYSCTL_MOSCCTL_OSCRNG;
2205  }
2206 
2207  HWREG(SYSCTL_MOSCCTL) = ui32MOSCCTL;
2208  }
2209  else
2210  {
2211  //
2212  // This was an invalid request because no oscillator source was
2213  // indicated.
2214  //
2215  ui32Osc = 0;
2216  ui32OscSelect = SYSCTL_RSCLKCFG_OSCSRC_PIOSC;
2217  }
2218 
2219  //
2220  // Check if the running with the PLL enabled was requested.
2221  //
2222  if((ui32Config & SYSCTL_USE_OSC) == SYSCTL_USE_PLL)
2223  {
2224  //
2225  // ui32Config must be SYSCTL_OSC_MAIN or SYSCTL_OSC_INT.
2226  //
2227  if(((ui32Config & 0x38) != SYSCTL_OSC_MAIN) &&
2228  ((ui32Config & 0x38) != SYSCTL_OSC_INT))
2229  {
2230  return(0);
2231  }
2232 
2233  //
2234  // Get the VCO index out of the ui32Config parameter.
2235  //
2236  i32VCOIdx = (ui32Config >> 24) & 7;
2237 
2238  //
2239  // Check that the VCO index is not out of bounds.
2240  //
2241  ASSERT(i32VCOIdx < MAX_VCO_ENTRIES);
2242 
2243  //
2244  // Set the memory timings for the maximum external frequency since
2245  // this could be a switch to PIOSC or possibly to MOSC which can be
2246  // up to 25MHz.
2247  //
2249 
2250  //
2251  // Clear the old PLL divider and source in case it was set.
2252  //
2253  ui32RSClkConfig = HWREG(SYSCTL_RSCLKCFG) &
2257 
2258  //
2259  // Update the memory timings to match running from PIOSC.
2260  //
2261  ui32RSClkConfig |= SYSCTL_RSCLKCFG_MEMTIMU;
2262 
2263  //
2264  // Update clock configuration to switch back to PIOSC.
2265  //
2266  HWREG(SYSCTL_RSCLKCFG) = ui32RSClkConfig;
2267 
2268  //
2269  // The table starts at 5 MHz so modify the index to match this.
2270  //
2271  i32XtalIdx -= SysCtlXtalCfgToIndex(SYSCTL_XTAL_5MHZ);
2272 
2273  //
2274  // If there were no changes to the PLL do not force the PLL to lock by
2275  // writing the PLL settings.
2276  //
2277  if((HWREG(SYSCTL_PLLFREQ1) !=
2278  g_pppui32XTALtoVCO[i32VCOIdx][i32XtalIdx][1]) ||
2279  (HWREG(SYSCTL_PLLFREQ0) !=
2280  (g_pppui32XTALtoVCO[i32VCOIdx][i32XtalIdx][0] |
2282  {
2283  bNewPLL = true;
2284  }
2285  else
2286  {
2287  bNewPLL = false;
2288  }
2289 
2290  //
2291  // If there are new PLL settings write them.
2292  //
2293  if(bNewPLL)
2294  {
2295  //
2296  // Set the oscillator source.
2297  //
2298  HWREG(SYSCTL_RSCLKCFG) |= ui32OscSelect;
2299 
2300  //
2301  // Set the M, N and Q values provided from the table and preserve
2302  // the power state of the main PLL.
2303  //
2305  g_pppui32XTALtoVCO[i32VCOIdx][i32XtalIdx][1];
2307  (g_pppui32XTALtoVCO[i32VCOIdx][i32XtalIdx][0] |
2309  }
2310 
2311  //
2312  // Calculate the System divider such that we get a frequency that is
2313  // the closest to the requested frequency without going over.
2314  //
2315  ui32SysDiv = (g_pui32VCOFrequencies[i32VCOIdx] + ui32SysClock - 1) /
2316  ui32SysClock;
2317 
2318  //
2319  // Calculate the actual system clock.
2320  //
2321  ui32SysClock = _SysCtlFrequencyGet(ui32Osc) / ui32SysDiv;
2322 
2323  //
2324  // Set the Flash and EEPROM timing values.
2325  //
2326  HWREG(SYSCTL_MEMTIM0) = _SysCtlMemTimingGet(ui32SysClock);
2327 
2328  //
2329  // Check if the PLL is already powered up.
2330  //
2332  {
2333  if(bNewPLL == true)
2334  {
2335  //
2336  // Trigger the PLL to lock to the new frequency.
2337  //
2339  }
2340  }
2341  else
2342  {
2343  //
2344  // Power up the PLL.
2345  //
2347  }
2348 
2349  //
2350  // Wait until the PLL has locked.
2351  //
2352  for(i32Timeout = 32768; i32Timeout > 0; i32Timeout--)
2353  {
2355  {
2356  break;
2357  }
2358  }
2359 
2360  //
2361  // If the loop above did not timeout then switch over to the PLL
2362  //
2363  if(i32Timeout)
2364  {
2365  ui32RSClkConfig = HWREG(SYSCTL_RSCLKCFG);
2366  ui32RSClkConfig |= ((ui32SysDiv - 1) <<
2367  SYSCTL_RSCLKCFG_PSYSDIV_S) | ui32OscSelect |
2369  ui32RSClkConfig |= SYSCTL_RSCLKCFG_MEMTIMU;
2370 
2371  //
2372  // Set the new clock configuration.
2373  //
2374  HWREG(SYSCTL_RSCLKCFG) = ui32RSClkConfig;
2375  }
2376  else
2377  {
2378  ui32SysClock = 0;
2379  }
2380  }
2381  else
2382  {
2383  //
2384  // Set the Flash and EEPROM timing values for PIOSC.
2385  //
2387 
2388  //
2389  // Make sure that the PLL is powered down since it is not being used.
2390  //
2392 
2393  //
2394  // Clear the old PLL divider and source in case it was set.
2395  //
2396  ui32RSClkConfig = HWREG(SYSCTL_RSCLKCFG);
2397  ui32RSClkConfig &= ~(SYSCTL_RSCLKCFG_OSYSDIV_M |
2400 
2401  //
2402  // Update the memory timings.
2403  //
2404  ui32RSClkConfig |= SYSCTL_RSCLKCFG_MEMTIMU;
2405 
2406  //
2407  // Set the new clock configuration.
2408  //
2409  HWREG(SYSCTL_RSCLKCFG) = ui32RSClkConfig;
2410 
2411  //
2412  // If zero given as the system clock then default to divide by 1.
2413  //
2414  if(ui32SysClock == 0)
2415  {
2416  ui32SysDiv = 0;
2417  }
2418  else
2419  {
2420  //
2421  // Calculate the System divider based on the requested
2422  // frequency.
2423  //
2424  ui32SysDiv = ui32Osc / ui32SysClock;
2425 
2426  //
2427  // If the system divisor is not already zero, subtract one to
2428  // set the value in the register which requires the value to
2429  // be n-1.
2430  //
2431  if(ui32SysDiv != 0)
2432  {
2433  ui32SysDiv -= 1;
2434  }
2435 
2436  //
2437  // Calculate the system clock.
2438  //
2439  ui32SysClock = ui32Osc / (ui32SysDiv + 1);
2440  }
2441 
2442  //
2443  // Set the memory timing values for the new system clock.
2444  //
2445  HWREG(SYSCTL_MEMTIM0) = _SysCtlMemTimingGet(ui32SysClock);
2446 
2447  //
2448  // Set the new system clock values.
2449  //
2450  ui32RSClkConfig = HWREG(SYSCTL_RSCLKCFG);
2451  ui32RSClkConfig |= (ui32SysDiv << SYSCTL_RSCLKCFG_OSYSDIV_S) |
2452  ui32OscSelect;
2453 
2454  //
2455  // Update the memory timings.
2456  //
2457  ui32RSClkConfig |= SYSCTL_RSCLKCFG_MEMTIMU;
2458 
2459  //
2460  // Set the new clock configuration.
2461  //
2462  HWREG(SYSCTL_RSCLKCFG) = ui32RSClkConfig;
2463  }
2464 
2465  return(ui32SysClock);
2466 }
2467 
2468 //*****************************************************************************
2469 //
2529 //
2530 //*****************************************************************************
2531 void
2532 SysCtlClockSet(uint32_t ui32Config)
2533 {
2534  uint32_t ui32Delay, ui32RCC, ui32RCC2;
2535 
2536  //
2537  // Get the current value of the RCC and RCC2 registers.
2538  //
2539  ui32RCC = HWREG(SYSCTL_RCC);
2540  ui32RCC2 = HWREG(SYSCTL_RCC2);
2541 
2542  //
2543  // Bypass the PLL and system clock dividers for now.
2544  //
2545  ui32RCC |= SYSCTL_RCC_BYPASS;
2546  ui32RCC &= ~(SYSCTL_RCC_USESYSDIV);
2547  ui32RCC2 |= SYSCTL_RCC2_BYPASS2;
2548 
2549  //
2550  // Write the new RCC value.
2551  //
2552  HWREG(SYSCTL_RCC) = ui32RCC;
2553  HWREG(SYSCTL_RCC2) = ui32RCC2;
2554 
2555  //
2556  // See if the oscillator needs to be enabled.
2557  //
2558  if((ui32RCC & SYSCTL_RCC_MOSCDIS) && !(ui32Config & SYSCTL_MAIN_OSC_DIS))
2559  {
2560  //
2561  // Make sure that the required oscillators are enabled. For now, the
2562  // previously enabled oscillators must be enabled along with the newly
2563  // requested oscillators.
2564  //
2565  ui32RCC &= (~SYSCTL_RCC_MOSCDIS | (ui32Config & SYSCTL_MAIN_OSC_DIS));
2566 
2567  //
2568  // Clear the MOSC power up raw interrupt status to be sure it is not
2569  // set when waiting below.
2570  //
2572 
2573  //
2574  // Write the new RCC value.
2575  //
2576  HWREG(SYSCTL_RCC) = ui32RCC;
2577 
2578  //
2579  // Timeout using the legacy delay value.
2580  //
2581  ui32Delay = 524288;
2582 
2583  while((HWREG(SYSCTL_RIS) & SYSCTL_RIS_MOSCPUPRIS) == 0)
2584  {
2585  ui32Delay--;
2586 
2587  if(ui32Delay == 0)
2588  {
2589  break;
2590  }
2591  }
2592 
2593  //
2594  // If the main oscillator failed to start up then do not switch to
2595  // it and return.
2596  //
2597  if(ui32Delay == 0)
2598  {
2599  return;
2600  }
2601 
2602  }
2603 
2604  //
2605  // Set the new crystal value and oscillator source. Because the OSCSRC2
2606  // field in RCC2 overlaps the XTAL field in RCC, the OSCSRC field has a
2607  // special encoding within ui32Config to avoid the overlap.
2608  //
2609  ui32RCC &= ~(SYSCTL_RCC_XTAL_M | SYSCTL_RCC_OSCSRC_M);
2610  ui32RCC |= ui32Config & (SYSCTL_RCC_XTAL_M | SYSCTL_RCC_OSCSRC_M);
2611  ui32RCC2 &= ~(SYSCTL_RCC2_USERCC2 | SYSCTL_RCC2_OSCSRC2_M);
2612  ui32RCC2 |= ui32Config & (SYSCTL_RCC2_USERCC2 | SYSCTL_RCC_OSCSRC_M);
2613  ui32RCC2 |= (ui32Config & 0x00000008) << 3;
2614 
2615  //
2616  // Write the new RCC value.
2617  //
2618  HWREG(SYSCTL_RCC) = ui32RCC;
2619  HWREG(SYSCTL_RCC2) = ui32RCC2;
2620 
2621  //
2622  // Set the PLL configuration.
2623  //
2624  ui32RCC &= ~SYSCTL_RCC_PWRDN;
2625  ui32RCC |= ui32Config & SYSCTL_RCC_PWRDN;
2626  ui32RCC2 &= ~SYSCTL_RCC2_PWRDN2;
2627  ui32RCC2 |= ui32Config & SYSCTL_RCC2_PWRDN2;
2628 
2629  //
2630  // Clear the PLL lock interrupt.
2631  //
2633 
2634  //
2635  // Write the new RCC value.
2636  //
2637  if(ui32RCC2 & SYSCTL_RCC2_USERCC2)
2638  {
2639  HWREG(SYSCTL_RCC2) = ui32RCC2;
2640  HWREG(SYSCTL_RCC) = ui32RCC;
2641  }
2642  else
2643  {
2644  HWREG(SYSCTL_RCC) = ui32RCC;
2645  HWREG(SYSCTL_RCC2) = ui32RCC2;
2646  }
2647 
2648  //
2649  // Set the requested system divider and disable the appropriate
2650  // oscillators. This value is not written immediately.
2651  //
2652  ui32RCC &= ~(SYSCTL_RCC_SYSDIV_M | SYSCTL_RCC_USESYSDIV |
2654  ui32RCC |= ui32Config & (SYSCTL_RCC_SYSDIV_M | SYSCTL_RCC_USESYSDIV |
2656  ui32RCC2 &= ~(SYSCTL_RCC2_SYSDIV2_M);
2657  ui32RCC2 |= ui32Config & SYSCTL_RCC2_SYSDIV2_M;
2658  if(ui32Config & SYSCTL_RCC2_DIV400)
2659  {
2660  ui32RCC |= SYSCTL_RCC_USESYSDIV;
2661  ui32RCC2 &= ~(SYSCTL_RCC_USESYSDIV);
2662  ui32RCC2 |= ui32Config & (SYSCTL_RCC2_DIV400 | SYSCTL_RCC2_SYSDIV2LSB);
2663  }
2664  else
2665  {
2666  ui32RCC2 &= ~(SYSCTL_RCC2_DIV400);
2667  }
2668 
2669  //
2670  // See if the PLL output is being used to clock the system.
2671  //
2672  if(!(ui32Config & SYSCTL_RCC_BYPASS))
2673  {
2674  //
2675  // Wait until the PLL has locked.
2676  //
2677  for(ui32Delay = 32768; ui32Delay > 0; ui32Delay--)
2678  {
2680  {
2681  break;
2682  }
2683  }
2684 
2685  //
2686  // Enable use of the PLL.
2687  //
2688  ui32RCC &= ~(SYSCTL_RCC_BYPASS);
2689  ui32RCC2 &= ~(SYSCTL_RCC2_BYPASS2);
2690  }
2691 
2692  //
2693  // Write the final RCC value.
2694  //
2695  HWREG(SYSCTL_RCC) = ui32RCC;
2696  HWREG(SYSCTL_RCC2) = ui32RCC2;
2697 
2698  //
2699  // Delay for a little bit so that the system divider takes effect.
2700  //
2701  SysCtlDelay(16);
2702 }
2703 
2704 //*****************************************************************************
2705 //
2724 //
2725 //*****************************************************************************
2726 uint32_t
2728 {
2729  uint32_t ui32RCC, ui32RCC2, ui32PLL, ui32Clk, ui32Max;
2730  uint32_t ui32PLL1;
2731 
2732  //
2733  // This function is only valid on TM4C123 devices.
2734  //
2736 
2737  //
2738  // Read RCC and RCC2.
2739  //
2740  ui32RCC = HWREG(SYSCTL_RCC);
2741  ui32RCC2 = HWREG(SYSCTL_RCC2);
2742 
2743  //
2744  // Get the base clock rate.
2745  //
2746  switch((ui32RCC2 & SYSCTL_RCC2_USERCC2) ?
2747  (ui32RCC2 & SYSCTL_RCC2_OSCSRC2_M) :
2748  (ui32RCC & SYSCTL_RCC_OSCSRC_M))
2749  {
2750  //
2751  // The main oscillator is the clock source. Determine its rate from
2752  // the crystal setting field.
2753  //
2755  {
2756  ui32Clk = g_pui32Xtals[(ui32RCC & SYSCTL_RCC_XTAL_M) >>
2758  break;
2759  }
2760 
2761  //
2762  // The internal oscillator is the source clock.
2763  //
2764  case SYSCTL_RCC_OSCSRC_INT:
2765  {
2766  //
2767  // The internal oscillator on all devices is 16 MHz.
2768  //
2769  ui32Clk = 16000000;
2770  break;
2771  }
2772 
2773  //
2774  // The internal oscillator divided by four is the source clock.
2775  //
2777  {
2778  //
2779  // The internal oscillator on all devices is 16 MHz.
2780  //
2781  ui32Clk = 16000000 / 4;
2782  break;
2783  }
2784 
2785  //
2786  // The internal 30-KHz oscillator is the source clock.
2787  //
2788  case SYSCTL_RCC_OSCSRC_30:
2789  {
2790  //
2791  // The internal 30-KHz oscillator has an accuracy of +/- 30%.
2792  //
2793  ui32Clk = 30000;
2794  break;
2795  }
2796 
2797  //
2798  // The 32.768-KHz clock from the hibernate module is the source clock.
2799  //
2801  {
2802  ui32Clk = 32768;
2803  break;
2804  }
2805 
2806  //
2807  // An unknown setting, so return a zero clock (that is, an unknown
2808  // clock rate).
2809  //
2810  default:
2811  {
2812  return(0);
2813  }
2814  }
2815 
2816  //
2817  // Default the maximum frequency to the maximum 32-bit unsigned value.
2818  //
2819  ui32Max = 0xffffffff;
2820 
2821  //
2822  // See if the PLL is being used.
2823  //
2824  if(((ui32RCC2 & SYSCTL_RCC2_USERCC2) &&
2825  !(ui32RCC2 & SYSCTL_RCC2_BYPASS2)) ||
2826  (!(ui32RCC2 & SYSCTL_RCC2_USERCC2) && !(ui32RCC & SYSCTL_RCC_BYPASS)))
2827  {
2828  //
2829  // Read the two PLL frequency registers. The formula for a
2830  // TM4C123 device is "(xtal * m) / ((q + 1) * (n + 1))".
2831  //
2832  ui32PLL = HWREG(SYSCTL_PLLFREQ0);
2833  ui32PLL1 = HWREG(SYSCTL_PLLFREQ1);
2834 
2835  //
2836  // Divide the input clock by the dividers.
2837  //
2838  ui32Clk /= ((((ui32PLL1 & SYSCTL_PLLFREQ1_Q_M) >>
2839  SYSCTL_PLLFREQ1_Q_S) + 1) *
2840  (((ui32PLL1 & SYSCTL_PLLFREQ1_N_M) >>
2841  SYSCTL_PLLFREQ1_N_S) + 1) * 2);
2842 
2843  //
2844  // Multiply the clock by the multiplier, which is split into an
2845  // integer part and a fractional part.
2846  //
2847  ui32Clk = ((ui32Clk * ((ui32PLL & SYSCTL_PLLFREQ0_MINT_M) >>
2849  ((ui32Clk * ((ui32PLL & SYSCTL_PLLFREQ0_MFRAC_M) >>
2850  SYSCTL_PLLFREQ0_MFRAC_S)) >> 10));
2851 
2852  //
2853  // Force the system divider to be enabled. It is always used when
2854  // using the PLL, but in some cases it does not read as being enabled.
2855  //
2856  ui32RCC |= SYSCTL_RCC_USESYSDIV;
2857 
2858  //
2859  // Calculate the maximum system frequency.
2860  //
2862  {
2864  {
2865  ui32Max = 80000000;
2866  break;
2867  }
2869  {
2870  ui32Max = 66666666;
2871  break;
2872  }
2874  {
2875  ui32Max = 50000000;
2876  break;
2877  }
2879  {
2880  ui32Max = 40000000;
2881  break;
2882  }
2884  {
2885  ui32Max = 25000000;
2886  break;
2887  }
2889  {
2890  ui32Max = 20000000;
2891  break;
2892  }
2893  default:
2894  {
2895  break;
2896  }
2897  }
2898  }
2899 
2900  //
2901  // See if the system divider is being used.
2902  //
2903  if(ui32RCC & SYSCTL_RCC_USESYSDIV)
2904  {
2905  //
2906  // Adjust the clock rate by the system clock divider.
2907  //
2908  if(ui32RCC2 & SYSCTL_RCC2_USERCC2)
2909  {
2910  if((ui32RCC2 & SYSCTL_RCC2_DIV400) &&
2911  (((ui32RCC2 & SYSCTL_RCC2_USERCC2) &&
2912  !(ui32RCC2 & SYSCTL_RCC2_BYPASS2)) ||
2913  (!(ui32RCC2 & SYSCTL_RCC2_USERCC2) &&
2914  !(ui32RCC & SYSCTL_RCC_BYPASS))))
2915 
2916  {
2917  ui32Clk = ((ui32Clk * 2) / (((ui32RCC2 &
2920  (SYSCTL_RCC2_SYSDIV2_S - 1)) +
2921  1));
2922  }
2923  else
2924  {
2925  ui32Clk /= (((ui32RCC2 & SYSCTL_RCC2_SYSDIV2_M) >>
2926  SYSCTL_RCC2_SYSDIV2_S) + 1);
2927  }
2928  }
2929  else
2930  {
2931  ui32Clk /= (((ui32RCC & SYSCTL_RCC_SYSDIV_M) >>
2932  SYSCTL_RCC_SYSDIV_S) + 1);
2933  }
2934  }
2935 
2936  //
2937  // Limit the maximum clock to the maximum clock frequency.
2938  //
2939  if(ui32Max < ui32Clk)
2940  {
2941  ui32Clk = ui32Max;
2942  }
2943 
2944  //
2945  // Return the computed clock rate.
2946  //
2947  return(ui32Clk);
2948 }
2949 
2950 //*****************************************************************************
2951 //
2986 //
2987 //*****************************************************************************
2988 void
2989 SysCtlDeepSleepClockSet(uint32_t ui32Config)
2990 {
2991  //
2992  // Set the deep-sleep clock configuration.
2993  //
2994  HWREG(SYSCTL_DSLPCLKCFG) = ui32Config;
2995 }
2996 
2997 //*****************************************************************************
2998 //
3036 //
3037 //*****************************************************************************
3038 void
3039 SysCtlDeepSleepClockConfigSet(uint32_t ui32Div, uint32_t ui32Config)
3040 {
3041  uint32_t ui32Value;
3042 
3043  ASSERT(ui32Div != 0);
3044 
3045  if(CLASS_IS_TM4C123)
3046  {
3047  //
3048  // Set the deep-sleep clock configuration.
3049  //
3050  HWREG(SYSCTL_DSLPCLKCFG) = (ui32Config & ~SYSCTL_DSLPCLKCFG_D_M) |
3051  ((ui32Div - 1) << SYSCTL_DSLPCLKCFG_D_S);
3052  }
3053  else
3054  {
3055  //
3056  // Initialize the value with the divider.
3057  //
3058  ui32Value = ui32Div - 1;
3059 
3060  //
3061  // Set the clock source selection based on the defines used for
3062  // SysCtlDeepSleepClockSet() function so that there is some backwards
3063  // compatibility.
3064  //
3065  switch(ui32Config & SYSCTL_DSLPCLKCFG_O_M)
3066  {
3067  //
3068  // Choose the main external oscillator.
3069  //
3070  case SYSCTL_DSLP_OSC_MAIN:
3071  {
3072  ui32Value |= SYSCTL_DSCLKCFG_DSOSCSRC_MOSC;
3073 
3074  break;
3075  }
3076 
3077  //
3078  // Choose the low frequency oscillator.
3079  //
3080  case SYSCTL_DSLP_OSC_INT30:
3081  {
3082  ui32Value |= SYSCTL_DSCLKCFG_DSOSCSRC_LFIOSC;
3083 
3084  break;
3085  }
3086 
3087  //
3088  // Choose the low frequency oscillator.
3089  //
3090  case SYSCTL_DSLP_OSC_EXT32:
3091  {
3092  ui32Value |= SYSCTL_DSCLKCFG_DSOSCSRC_RTC;
3093 
3094  break;
3095  }
3096  //
3097  // The zero value uses the PIOSC as the clock source.
3098  //
3099  case SYSCTL_DSLP_OSC_INT:
3100  default:
3101  {
3102  break;
3103  }
3104  }
3105 
3106  //
3107  // Set the PIOSC power down bit.
3108  //
3109  if(ui32Config & SYSCTL_DSLP_PIOSC_PD)
3110  {
3111  ui32Value |= SYSCTL_DSCLKCFG_PIOSCPD;
3112  }
3113 
3114  //
3115  // Set the PIOSC power down bit.
3116  //
3117  if(ui32Config & SYSCTL_DSLP_MOSC_PD)
3118  {
3119  ui32Value |= SYSCTL_DSCLKCFG_MOSCDPD;
3120  }
3121 
3122  //
3123  // Update the deep-sleep clock configuration.
3124  //
3125  HWREG(SYSCTL_DSCLKCFG) = ui32Value;
3126  }
3127 }
3128 
3129 //*****************************************************************************
3130 //
3149 //
3150 //*****************************************************************************
3151 void
3152 SysCtlPWMClockSet(uint32_t ui32Config)
3153 {
3154  //
3155  // Check the arguments.
3156  //
3157  ASSERT((ui32Config == SYSCTL_PWMDIV_1) ||
3158  (ui32Config == SYSCTL_PWMDIV_2) ||
3159  (ui32Config == SYSCTL_PWMDIV_4) ||
3160  (ui32Config == SYSCTL_PWMDIV_8) ||
3161  (ui32Config == SYSCTL_PWMDIV_16) ||
3162  (ui32Config == SYSCTL_PWMDIV_32) ||
3163  (ui32Config == SYSCTL_PWMDIV_64));
3164 
3165  //
3166  // Check that there is a PWM block on this part.
3167  //
3169 
3170  //
3171  // Set the PWM clock configuration into the run-mode clock configuration
3172  // register.
3173  //
3176  ui32Config);
3177 }
3178 
3179 //*****************************************************************************
3180 //
3192 //
3193 //*****************************************************************************
3194 uint32_t
3196 {
3197  //
3198  // Check that there is a PWM block on this part.
3199  //
3201 
3202  //
3203  // Return the current PWM clock configuration. Make sure that
3204  // SYSCTL_PWMDIV_1 is returned in all cases where the divider is disabled.
3205  //
3207  {
3208  //
3209  // The divider is not active so reflect this in the value we return.
3210  //
3211  return(SYSCTL_PWMDIV_1);
3212  }
3213  else
3214  {
3215  //
3216  // The divider is active so directly return the masked register value.
3217  //
3218  return(HWREG(SYSCTL_RCC) &
3219  (SYSCTL_RCC_USEPWMDIV | SYSCTL_RCC_PWMDIV_M));
3220  }
3221 }
3222 
3223 //*****************************************************************************
3224 //
3245 //
3246 //*****************************************************************************
3247 void
3248 SysCtlGPIOAHBEnable(uint32_t ui32GPIOPeripheral)
3249 {
3250  //
3251  // Check the arguments.
3252  //
3253  ASSERT((ui32GPIOPeripheral == SYSCTL_PERIPH_GPIOA) ||
3254  (ui32GPIOPeripheral == SYSCTL_PERIPH_GPIOB) ||
3255  (ui32GPIOPeripheral == SYSCTL_PERIPH_GPIOC) ||
3256  (ui32GPIOPeripheral == SYSCTL_PERIPH_GPIOD) ||
3257  (ui32GPIOPeripheral == SYSCTL_PERIPH_GPIOE) ||
3258  (ui32GPIOPeripheral == SYSCTL_PERIPH_GPIOF) ||
3259  (ui32GPIOPeripheral == SYSCTL_PERIPH_GPIOG) ||
3260  (ui32GPIOPeripheral == SYSCTL_PERIPH_GPIOH) ||
3261  (ui32GPIOPeripheral == SYSCTL_PERIPH_GPIOJ));
3262 
3263  //
3264  // Enable this GPIO for AHB access.
3265  //
3266  HWREG(SYSCTL_GPIOHBCTL) |= (1 << (ui32GPIOPeripheral & 0xF));
3267 }
3268 
3269 //*****************************************************************************
3270 //
3291 //
3292 //*****************************************************************************
3293 void
3294 SysCtlGPIOAHBDisable(uint32_t ui32GPIOPeripheral)
3295 {
3296  //
3297  // Check the arguments.
3298  //
3299  ASSERT((ui32GPIOPeripheral == SYSCTL_PERIPH_GPIOA) ||
3300  (ui32GPIOPeripheral == SYSCTL_PERIPH_GPIOB) ||
3301  (ui32GPIOPeripheral == SYSCTL_PERIPH_GPIOC) ||
3302  (ui32GPIOPeripheral == SYSCTL_PERIPH_GPIOD) ||
3303  (ui32GPIOPeripheral == SYSCTL_PERIPH_GPIOE) ||
3304  (ui32GPIOPeripheral == SYSCTL_PERIPH_GPIOF) ||
3305  (ui32GPIOPeripheral == SYSCTL_PERIPH_GPIOG) ||
3306  (ui32GPIOPeripheral == SYSCTL_PERIPH_GPIOH) ||
3307  (ui32GPIOPeripheral == SYSCTL_PERIPH_GPIOJ));
3308 
3309  //
3310  // Disable this GPIO for AHB access.
3311  //
3312  HWREG(SYSCTL_GPIOHBCTL) &= ~(1 << (ui32GPIOPeripheral & 0xF));
3313 }
3314 
3315 //*****************************************************************************
3316 //
3326 //
3327 //*****************************************************************************
3328 void
3330 {
3331  //
3332  // Turn on the USB PLL.
3333  //
3335 }
3336 
3337 //*****************************************************************************
3338 //
3348 //
3349 //*****************************************************************************
3350 void
3352 {
3353  //
3354  // Turn off the USB PLL.
3355  //
3357 }
3358 
3359 //*****************************************************************************
3360 //
3416 //
3417 //*****************************************************************************
3418 void
3419 SysCtlVoltageEventConfig(uint32_t ui32Config)
3420 {
3421  //
3422  // Set the requested events.
3423  //
3424  HWREG(SYSCTL_PTBOCTL) = ui32Config;
3425 }
3426 
3427 //*****************************************************************************
3428 //
3462 //
3463 //*****************************************************************************
3464 uint32_t
3466 {
3467  //
3468  // Return the current voltage event status.
3469  //
3470  return(HWREG(SYSCTL_PWRTC));
3471 }
3472 
3473 //*****************************************************************************
3474 //
3499 //
3500 //*****************************************************************************
3501 void
3502 SysCtlVoltageEventClear(uint32_t ui32Status)
3503 {
3504  //
3505  // Clear the requested voltage events.
3506  //
3507  HWREG(SYSCTL_PWRTC) |= ui32Status;
3508 }
3509 
3510 //*****************************************************************************
3511 //
3540 //
3541 //*****************************************************************************
3542 uint32_t
3544 {
3545  return(HWREG(SYSCTL_NMIC));
3546 }
3547 
3548 //*****************************************************************************
3549 //
3580 //
3581 //*****************************************************************************
3582 void
3583 SysCtlNMIClear(uint32_t ui32Ints)
3584 {
3585  //
3586  // Clear the requested interrupt sources.
3587  //
3588  HWREG(SYSCTL_NMIC) &= ~ui32Ints;
3589 }
3590 
3591 //*****************************************************************************
3592 //
3631 //
3632 //*****************************************************************************
3633 void
3634 SysCtlClockOutConfig(uint32_t ui32Config, uint32_t ui32Div)
3635 {
3636  ASSERT(ui32Div != 0);
3637  ASSERT((ui32Config & ~(SYSCTL_CLKOUT_EN | SYSCTL_CLKOUT_DIS |
3639  SYSCTL_CLKOUT_MOSC)) == 0);
3640 
3641  //
3642  // Set the requested configuration and divisor.
3643  //
3644  HWREG(SYSCTL_DIVSCLK) = ui32Config | ((ui32Div - 1) &
3646 }
3647 
3648 //*****************************************************************************
3649 //
3683 //
3684 //*****************************************************************************
3685 void
3686 SysCtlAltClkConfig(uint32_t ui32Config)
3687 {
3688  //
3689  // Set the requested configuration and divisor.
3690  //
3691  HWREG(SYSCTL_ALTCLKCFG) = ui32Config;
3692 }
3693 
3694 //*****************************************************************************
3695 //
3696 // Close the Doxygen group.
3698 //
3699 //*****************************************************************************
#define SYSCTL_DSCLKCFG_DSOSCSRC_RTC
Definition: hw_sysctl.h:1482
void SysCtlDeepSleep(void)
Definition: sysctl.c:1726
#define SYSCTL_PERIPH_ADC0
Definition: sysctl.h:63
#define SYSCTL_PWMDIV_64
Definition: sysctl.h:213
#define SYSCTL_PERIPH_QEI0
Definition: sysctl.h:108
void SysCtlSleepPowerSet(uint32_t ui32Config)
Definition: sysctl.c:1605
#define SYSCTL_PERIPH_GPIOJ
Definition: sysctl.h:79
#define SYSCTL_DC1
Definition: hw_sysctl.h:51
#define SYSCTL_PLLFREQ0_MFRAC_S
Definition: hw_sysctl.h:1550
void SysCtlVoltageEventConfig(uint32_t ui32Config)
Definition: sysctl.c:3419
#define SYSCTL_PERIPH_COMP0
Definition: sysctl.h:67
#define SYSCTL_PERIPH_GPIOG
Definition: sysctl.h:77
#define SYSCTL_MEMTIM0_FBCHT_1_5
Definition: hw_sysctl.h:1241
void SysCtlPeripheralDeepSleepEnable(uint32_t ui32Peripheral)
Definition: sysctl.c:1093
void SysCtlDeepSleepClockSet(uint32_t ui32Config)
Definition: sysctl.c:2989
#define SYSCTL_MEMTIM0_EBCHT_2_5
Definition: hw_sysctl.h:1226
void SysCtlClockOutConfig(uint32_t ui32Config, uint32_t ui32Div)
Definition: sysctl.c:3634
#define SYSCTL_MEMTIM0_MB1
Definition: hw_sysctl.h:1235
static const uint32_t g_pppui32XTALtoVCO[2][18][2]
Definition: sysctl.c:137
void SysCtlUSBPLLDisable(void)
Definition: sysctl.c:3351
#define SYSCTL_CLKOUT_MOSC
Definition: sysctl.h:566
#define SysCtlXtalCfgToIndex(a)
Definition: sysctl.c:74
#define SYSCTL_DSLPCLKCFG_O_M
Definition: hw_sysctl.h:1457
#define SYSCTL_PLLFREQ0_MFRAC_M
Definition: hw_sysctl.h:1548
#define SYSCTL_RCC_XTAL_M
Definition: hw_sysctl.h:1077
#define SYSCTL_LDOSPCTL
Definition: hw_sysctl.h:116
#define SYSCTL_RCC_XTAL_S
Definition: hw_sysctl.h:1106
void SysCtlIntUnregister(void)
Definition: sysctl.c:1282
#define SYSCTL_PERIPH_I2C3
Definition: sysctl.h:97
#define SYSCTL_OSC_INT30
Definition: sysctl.h:381
#define SYSCTL_PERIPH_GPIOH
Definition: sysctl.h:78
#define SYSCTL_RCC2_DIV400
Definition: hw_sysctl.h:1151
#define SYSCTL_PERIPH_GPIOK
Definition: sysctl.h:85
void SysCtlIntEnable(uint32_t ui32Ints)
Definition: sysctl.c:1317
#define SYSCTL_RCC2_SYSDIV2_S
Definition: hw_sysctl.h:1164
#define SYSCTL_PERIPH_HIBERNATE
Definition: sysctl.h:80
#define SYSCTL_RSCLKCFG_NEWFREQ
Definition: hw_sysctl.h:1184
#define INT_SYSCTL_TM4C123
Definition: hw_ints.h:92
#define SYSCTL_PERIPH_GPIOB
Definition: sysctl.h:72
#define NVIC_APINT
Definition: hw_nvic.h:116
void SysCtlResetCauseClear(uint32_t ui32Causes)
Definition: sysctl.c:1787
#define SYSCTL_PLLSTAT
Definition: hw_sysctl.h:111
#define SYSCTL_RESBEHAVCTL
Definition: hw_sysctl.h:118
#define SYSCTL_RSCLKCFG
Definition: hw_sysctl.h:76
#define SYSCTL_CLKOUT_DIS
Definition: sysctl.h:563
#define SYSCTL_XTAL_5MHZ
Definition: sysctl.h:360
#define HWREG(x)
Definition: hw_types.h:48
#define SYSCTL_RSCLKCFG_OSYSDIV_S
Definition: hw_sysctl.h:1209
#define SYSCTL_LDO_1_15V
Definition: sysctl.h:153
#define SYSCTL_CLKOUT_SYSCLK
Definition: sysctl.h:564
#define SYSCTL_PPBASE
Definition: sysctl.c:341
#define SYSCTL_PERIPH_GPIOS
Definition: sysctl.h:92
#define SYSCTL_MEMTIM0_EWS_S
Definition: hw_sysctl.h:1254
#define SYSCTL_PERIPH_WTIMER1
Definition: sysctl.h:135
#define SYSCTL_PERIPH_I2C6
Definition: sysctl.h:100
#define SYSCTL_MEMTIM0_FBCHT_2_5
Definition: hw_sysctl.h:1244
#define SYSCTL_PLLFREQ0_MINT_S
Definition: hw_sysctl.h:1551
#define SYSCTL_RCC_OSCSRC_INT4
Definition: hw_sysctl.h:1102
#define SYSCTL_MEMTIM0_FBCE
Definition: hw_sysctl.h:1252
#define SYSCTL_DSLPPWRCFG
Definition: hw_sysctl.h:113
#define SYSCTL_RCC2_OSCSRC2_32
Definition: hw_sysctl.h:1163
void SysCtlReset(void)
Definition: sysctl.c:1671
#define SYSCTL_PERIPH_I2C0
Definition: sysctl.h:94
#define SYSCTL_RESC
Definition: hw_sysctl.h:68
#define SYSCTL_PERIPH_GPIOT
Definition: sysctl.h:93
#define SYSCTL_RCC_ACG
Definition: hw_sysctl.h:1064
uint32_t SysCtlResetBehaviorGet(void)
Definition: sysctl.c:2051
#define MAX_VCO_ENTRIES
Definition: sysctl.c:118
#define SYSCTL_IMC
Definition: hw_sysctl.h:65
#define SYSCTL_PERIPH_GPIOF
Definition: sysctl.h:76
#define FLASH_PP_SIZE_M
Definition: hw_flash.h:267
#define SYSCTL_PERIPH_WDOG0
Definition: sysctl.h:132
#define SYSCTL_LDO_1_00V
Definition: sysctl.h:150
#define SYSCTL_DC1_PWM0
Definition: hw_sysctl.h:665
void SysCtlPWMClockSet(uint32_t ui32Config)
Definition: sysctl.c:3152
void SysCtlUSBPLLEnable(void)
Definition: sysctl.c:3329
bool SysCtlPeripheralReady(uint32_t ui32Peripheral)
Definition: sysctl.c:632
static uint32_t _SysCtlMemTimingGet(uint32_t ui32SysClock)
Definition: sysctl.c:227
#define SYSCTL_SCGCBASE
Definition: sysctl.c:344
#define SYSCTL_OSC_MAIN
Definition: sysctl.h:378
#define SYSCTL_RCC2
Definition: hw_sysctl.h:74
#define SYSCTL_PIOSCCAL_UTEN
Definition: hw_sysctl.h:1517
#define SYSCTL_DSLPCLKCFG_D_M
Definition: hw_sysctl.h:1456
#define SYSCTL_DSLP_MOSC_PD
Definition: sysctl.h:461
#define SYSCTL_MOSCCTL_OSCRNG
Definition: hw_sysctl.h:1171
#define SYSCTL_PWRTC
Definition: hw_sysctl.h:69
uint32_t SysCtlIntStatus(bool bMasked)
Definition: sysctl.c:1417
#define SYSCTL_PERIPH_WTIMER3
Definition: sysctl.h:137
uint32_t SysCtlResetCauseGet(void)
Definition: sysctl.c:1760
#define SYSCTL_DC1_MINSYSDIV_50
Definition: hw_sysctl.h:673
#define SYSCTL_MOSCCTL_NOXTAL
Definition: hw_sysctl.h:1173
#define ASSERT(expr)
Definition: debug.h:67
#define SYSCTL_PERIPH_WTIMER4
Definition: sysctl.h:138
#define SYSCTL_DSLP_OSC_INT
Definition: sysctl.h:457
uint32_t SysCtlFlashSectorSizeGet(void)
Definition: sysctl.c:500
#define SYSCTL_RCC_SYSDIV_M
Definition: hw_sysctl.h:1065
#define SYSCTL_USE_OSC
Definition: sysctl.h:350
#define SYSCTL_PERIPH_GPIOR
Definition: sysctl.h:91
#define MAX_XTAL_ENTRIES
Definition: sysctl.c:119
#define SYSCTL_RCC2_SYSDIV2LSB
Definition: hw_sysctl.h:1154
#define SYSCTL_CLKOUT_EN
Definition: sysctl.h:562
#define SYSCTL_DSCLKCFG
Definition: hw_sysctl.h:100
#define SYSCTL_PERIPH_TIMER2
Definition: sysctl.h:116
#define SYSCTL_PERIPH_TIMER5
Definition: sysctl.h:119
#define SYSCTL_PRBASE
Definition: sysctl.c:347
static const uint32_t g_pui32Xtals[]
Definition: sysctl.c:81
#define SYSCTL_DCGCBASE
Definition: sysctl.c:345
void SysCtlDelay(uint32_t ui32Count)
uint32_t SysCtlClockGet(void)
Definition: sysctl.c:2727
#define SYSCTL_RSCLKCFG_PLLSRC_M
Definition: hw_sysctl.h:1187
#define SYSCTL_LDO_0_95V
Definition: sysctl.h:149
#define SYSCTL_LDODPCTL
Definition: hw_sysctl.h:117
void SysCtlLDOSleepSet(uint32_t ui32Voltage)
Definition: sysctl.c:1455
uint32_t SysCtlVoltageEventStatus(void)
Definition: sysctl.c:3465
#define SYSCTL_XTAL_16MHZ
Definition: sysctl.h:372
#define SYSCTL_PERIPH_EMAC0
Definition: sysctl.h:68
#define SYSCTL_SRBASE
Definition: sysctl.c:342
#define SYSCTL_RCC_OSCSRC_30
Definition: hw_sysctl.h:1103
#define SYSCTL_SLPPWRCFG
Definition: hw_sysctl.h:112
#define SYSCTL_RCC
Definition: hw_sysctl.h:70
#define SYSCTL_PERIPH_TIMER1
Definition: sysctl.h:115
#define SYSCTL_DC1_PWM1
Definition: hw_sysctl.h:664
void SysCtlNMIClear(uint32_t ui32Ints)
Definition: sysctl.c:3583
void SysCtlMOSCConfigSet(uint32_t ui32Config)
Definition: sysctl.c:1900
#define NVIC_APINT_SYSRESETREQ
Definition: hw_nvic.h:938
#define SYSCTL_DC1_MINSYSDIV_25
Definition: hw_sysctl.h:677
#define SYSCTL_PERIPH_UART5
Definition: sysctl.h:127
#define SYSCTL_PLLFREQ1_N_M
Definition: hw_sysctl.h:1560
#define SYSCTL_PERIPH_UDMA
Definition: sysctl.h:130
#define SYSCTL_PWMDIV_2
Definition: sysctl.h:208
#define SYSCTL_PERIPH_UART0
Definition: sysctl.h:122
#define SYSCTL_RSCLKCFG_PLLSRC_MOSC
Definition: hw_sysctl.h:1191
#define SYSCTL_RSCLKCFG_MEMTIMU
Definition: hw_sysctl.h:1183
void SysCtlPeripheralSleepDisable(uint32_t ui32Peripheral)
Definition: sysctl.c:1027
#define SYSCTL_LDO_0_90V
Definition: sysctl.h:148
#define SYSCTL_RCC_BYPASS
Definition: hw_sysctl.h:1076
#define SYSCTL_PERIPH_GPIOQ
Definition: sysctl.h:90
#define SYSCTL_RSCLKCFG_OSCSRC_M
Definition: hw_sysctl.h:1194
void SysCtlGPIOAHBEnable(uint32_t ui32GPIOPeripheral)
Definition: sysctl.c:3248
#define SYSCTL_PERIPH_SSI0
Definition: sysctl.h:110
#define SYSCTL_PLLFREQ1_Q_S
Definition: hw_sysctl.h:1561
#define SYSCTL_RSCLKCFG_OSCSRC_RTC
Definition: hw_sysctl.h:1202
#define SYSCTL_RCC_OSCSRC_M
Definition: hw_sysctl.h:1099
#define SYSCTL_DC0
Definition: hw_sysctl.h:50
#define SYSCTL_PIOSCSTAT
Definition: hw_sysctl.h:107
#define SYSCTL_RCC2_OSCSRC2_M
Definition: hw_sysctl.h:1158
#define FLASH_PP_MAINSS_M
Definition: hw_flash.h:260
#define SYSCTL_PERIPH_UART1
Definition: sysctl.h:123
#define SYSCTL_PERIPH_USB0
Definition: sysctl.h:131
bool SysCtlPeripheralPresent(uint32_t ui32Peripheral)
Definition: sysctl.c:568
void SysCtlDeepSleepPowerSet(uint32_t ui32Config)
Definition: sysctl.c:1649
#define SYSCTL_CLKOUT_PIOSC
Definition: sysctl.h:565
#define SYSCTL_DSLPCLKCFG_D_S
Definition: hw_sysctl.h:1464
void SysCtlGPIOAHBDisable(uint32_t ui32GPIOPeripheral)
Definition: sysctl.c:3294
void SysCtlPeripheralPowerOn(uint32_t ui32Peripheral)
Definition: sysctl.c:667
#define SYSCTL_LDO_1_20V
Definition: sysctl.h:154
#define SYSCTL_PERIPH_I2C7
Definition: sysctl.h:101
void SysCtlPeripheralPowerOff(uint32_t ui32Peripheral)
Definition: sysctl.c:703
#define SYSCTL_PERIPH_GPIOP
Definition: sysctl.h:89
void SysCtlSleep(void)
Definition: sysctl.c:1703
#define SYSCTL_PERIPH_GPIOM
Definition: sysctl.h:87
#define SYSCTL_MOSCCTL_PWRDN
Definition: hw_sysctl.h:1172
#define SYSCTL_PERIPH_GPIOA
Definition: sysctl.h:71
#define SYSCTL_PIOSCCAL_UT_M
Definition: hw_sysctl.h:1520
#define SYSCTL_DC0_FLASHSZ_M
Definition: hw_sysctl.h:646
#define SYSCTL_PERIPH_UART7
Definition: sysctl.h:129
#define SYSCTL_LDO_1_05V
Definition: sysctl.h:151
#define SYSCTL_XTAL_10MHZ
Definition: sysctl.h:367
#define SYSCTL_PERIPH_WTIMER5
Definition: sysctl.h:139
#define SYSCTL_DIVSCLK_DIV_M
Definition: hw_sysctl.h:1501
#define SYSCTL_RSCLKCFG_USEPLL
Definition: hw_sysctl.h:1186
void SysCtlPeripheralClockGating(bool bEnable)
Definition: sysctl.c:1193
void SysCtlIntRegister(void(*pfnHandler)(void))
Definition: sysctl.c:1254
#define SYSCTL_PERIPH_GPION
Definition: sysctl.h:88
#define SYSCTL_PERIPH_I2C2
Definition: sysctl.h:96
#define SYSCTL_XTAL_25MHZ
Definition: sysctl.h:377
void SysCtlIntDisable(uint32_t ui32Ints)
Definition: sysctl.c:1347
#define SYSCTL_PLLFREQ0
Definition: hw_sysctl.h:109
#define SYSCTL_DSLP_PIOSC_PD
Definition: sysctl.h:460
uint32_t SysCtlLDOSleepGet(void)
Definition: sysctl.c:1493
#define SYSCTL_OSC_EXT32
Definition: sysctl.h:382
#define SYSCTL_PERIPH_EEPROM0
Definition: sysctl.h:82
#define SYSCTL_PERIPH_PWM0
Definition: sysctl.h:106
#define SYSCTL_LDO_1_10V
Definition: sysctl.h:152
#define SYSCTL_MEMTIM0_FWS_S
Definition: hw_sysctl.h:1255
uint32_t ui32Frequency
Definition: sysctl.c:194
#define SYSCTL_PERIPH_GPIOC
Definition: sysctl.h:73
#define SYSCTL_RSCLKCFG_PSYSDIV_M
Definition: hw_sysctl.h:1207
uint32_t SysCtlPWMClockGet(void)
Definition: sysctl.c:3195
#define SYSCTL_DSLP_OSC_MAIN
Definition: sysctl.h:456
#define SYSCTL_GPIOHBCTL
Definition: hw_sysctl.h:72
void SysCtlVoltageEventClear(uint32_t ui32Status)
Definition: sysctl.c:3502
#define SYSCTL_PERIPH_SSI3
Definition: sysctl.h:113
static const uint32_t g_pui32VCOFrequencies[2]
Definition: sysctl.c:330
#define SYSCTL_PERIPH_LCD0
Definition: sysctl.h:104
uint32_t ui32MemTiming
Definition: sysctl.c:195
#define NVIC_APINT_VECTKEY
Definition: hw_nvic.h:927
#define SYSCTL_PERIPH_TIMER0
Definition: sysctl.h:114
#define SYSCTL_MAIN_OSC_DIS
Definition: sysctl.h:384
#define SYSCTL_RCC_OSCSRC_MAIN
Definition: hw_sysctl.h:1100
#define FLASH_PP
Definition: hw_flash.h:60
void SysCtlPeripheralEnable(uint32_t ui32Peripheral)
Definition: sysctl.c:841
#define PLL_M_TO_REG(mi, mf)
Definition: sysctl.c:127
#define SYSCTL_DSCLKCFG_PIOSCPD
Definition: hw_sysctl.h:1472
#define SYSCTL_PWMDIV_16
Definition: sysctl.h:211
void SysCtlPeripheralDeepSleepDisable(uint32_t ui32Peripheral)
Definition: sysctl.c:1161
uint32_t SysCtlSRAMSizeGet(void)
Definition: sysctl.c:452
#define SYSCTL_PERIPH_TIMER3
Definition: sysctl.h:117
uint32_t SysCtlFlashSizeGet(void)
Definition: sysctl.c:467
#define SYSCTL_RSCLKCFG_PSYSDIV_S
Definition: hw_sysctl.h:1211
#define SYSCTL_RCC2_BYPASS2
Definition: hw_sysctl.h:1157
#define SYSCTL_RIS_MOSCPUPRIS
Definition: hw_sysctl.h:989
void SysCtlPeripheralReset(uint32_t ui32Peripheral)
Definition: sysctl.c:762
#define SYSCTL_PIOSCCAL_CAL
Definition: hw_sysctl.h:1518
#define SYSCTL_PERIPH_I2C9
Definition: sysctl.h:103
#define SYSCTL_PLLFREQ1
Definition: hw_sysctl.h:110
#define SYSCTL_MEMTIM0_FBCHT_3
Definition: hw_sysctl.h:1246
#define CLASS_IS_TM4C123
Definition: hw_types.h:93
#define SYSCTL_PIOSCCAL
Definition: hw_sysctl.h:105
#define SYSCTL_RCC2_USERCC2
Definition: hw_sysctl.h:1150
void CPUwfi(void)
#define SYSCTL_PERIPH_FAN0
Definition: sysctl.h:83
#define SYSCTL_DC1_MINSYSDIV_M
Definition: hw_sysctl.h:668
#define SYSCTL_RCC_PWMDIV_M
Definition: hw_sysctl.h:1068
#define SYSCTL_DC1_MINSYSDIV_66
Definition: hw_sysctl.h:671
#define SYSCTL_PERIPH_GPIOE
Definition: sysctl.h:75
#define SYSCTL_RCC2_PWRDN2
Definition: hw_sysctl.h:1156
#define SYSCTL_OSC_INT
Definition: sysctl.h:379
#define SYSCTL_DC1_MINSYSDIV_40
Definition: hw_sysctl.h:675
#define SYSCTL_PTBOCTL
Definition: hw_sysctl.h:60
#define SYSCTL_PLLFREQ0_MINT_M
Definition: hw_sysctl.h:1549
#define SYSCTL_RSCLKCFG_ACG
Definition: hw_sysctl.h:1185
#define SYSCTL_PERIPH_WDOG1
Definition: sysctl.h:133
#define SYSCTL_RCC2_USBPWRDN
Definition: hw_sysctl.h:1155
#define SYSCTL_DSLPCLKCFG
Definition: hw_sysctl.h:99
#define SYSCTL_PIOSCSTAT_CRPASS
Definition: hw_sysctl.h:1533
#define SYSCTL_DSLP_OSC_INT30
Definition: sysctl.h:458
#define SYSCTL_PERIPH_GPIOD
Definition: sysctl.h:74
#define SYSCTL_MEMTIM0_EBCHT_3
Definition: hw_sysctl.h:1228
#define SYSCTL_RCC_SYSDIV_S
Definition: hw_sysctl.h:1105
void SysCtlPeripheralDisable(uint32_t ui32Peripheral)
Definition: sysctl.c:898
#define SYSCTL_PERIPH_WTIMER2
Definition: sysctl.h:136
#define SYSCTL_PIOSCCAL_UPDATE
Definition: hw_sysctl.h:1519
#define SYSCTL_USE_PLL
Definition: sysctl.h:349
#define SYSCTL_DC1_MINSYSDIV_20
Definition: hw_sysctl.h:679
void IntUnregister(uint32_t ui32Interrupt)
Definition: interrupt.c:381
#define SYSCTL_PERIPH_I2C5
Definition: sysctl.h:99
#define SYSCTL_PERIPH_SSI1
Definition: sysctl.h:111
void SysCtlIntClear(uint32_t ui32Ints)
Definition: sysctl.c:1386
#define SYSCTL_PERIPH_SSI2
Definition: sysctl.h:112
#define SYSCTL_PERIPH_UART3
Definition: sysctl.h:125
#define SYSCTL_PERIPH_CAN1
Definition: sysctl.h:66
#define SYSCTL_RSCLKCFG_OSYSDIV_M
Definition: hw_sysctl.h:1205
#define SYSCTL_DC1_MINSYSDIV_80
Definition: hw_sysctl.h:669
#define NVIC_SYS_CTRL_SLEEPDEEP
Definition: hw_nvic.h:948
#define SYSCTL_PERIPH_EPI0
Definition: sysctl.h:70
#define SYSCTL_MOSCCTL
Definition: hw_sysctl.h:75
#define SYSCTL_DSCLKCFG_MOSCDPD
Definition: hw_sysctl.h:1473
#define SYSCTL_PLLFREQ1_Q_M
Definition: hw_sysctl.h:1559
#define SYSCTL_MEMTIM0_EBCHT_3_5
Definition: hw_sysctl.h:1229
#define SYSCTL_PERIPH_I2C8
Definition: sysctl.h:102
void __attribute__((weak))
Definition: startup_gcc.c:50
#define SYSCTL_DIVSCLK
Definition: hw_sysctl.h:102
void SysCtlPeripheralSleepEnable(uint32_t ui32Peripheral)
Definition: sysctl.c:962
#define SYSCTL_PERIPH_UART2
Definition: sysctl.h:124
#define SYSCTL_RSCLKCFG_PLLSRC_PIOSC
Definition: hw_sysctl.h:1189
#define SYSCTL_RCC_MOSCDIS
Definition: hw_sysctl.h:1104
#define SYSCTL_PLLFREQ1_N_S
Definition: hw_sysctl.h:1562
#define SYSCTL_MEMTIM0_EBCE
Definition: hw_sysctl.h:1234
#define NVIC_SYS_CTRL
Definition: hw_nvic.h:118
#define SYSCTL_RCC2_SYSDIV2_M
Definition: hw_sysctl.h:1153
#define SYSCTL_PWMDIV_8
Definition: sysctl.h:210
#define SYSCTL_DSCLKCFG_DSOSCSRC_LFIOSC
Definition: hw_sysctl.h:1478
#define SYSCTL_PERIPH_QEI1
Definition: sysctl.h:109
#define HWREGBITW(x, b)
Definition: hw_types.h:54
#define SYSCTL_RIS
Definition: hw_sysctl.h:64
#define SYSCTL_RCC_USESYSDIV
Definition: hw_sysctl.h:1066
#define SYSCTL_MEMTIM0_FBCHT_0_5
Definition: hw_sysctl.h:1238
uint32_t SysCtlLDODeepSleepGet(void)
Definition: sysctl.c:1563
void SysCtlLDODeepSleepSet(uint32_t ui32Voltage)
Definition: sysctl.c:1524
#define SYSCTL_RSCLKCFG_OSCSRC_LFIOSC
Definition: hw_sysctl.h:1198
void SysCtlDeepSleepClockConfigSet(uint32_t ui32Div, uint32_t ui32Config)
Definition: sysctl.c:3039
#define SYSCTL_RCC_PWRDN
Definition: hw_sysctl.h:1075
#define SYSCTL_PERIPH_I2C4
Definition: sysctl.h:98
#define SYSCTL_PERIPH_WTIMER0
Definition: sysctl.h:134
#define SYSCTL_MISC_MOSCPUPMIS
Definition: hw_sysctl.h:1025
void SysCtlClockSet(uint32_t ui32Config)
Definition: sysctl.c:2532
#define SYSCTL_PERIPH_ADC1
Definition: sysctl.h:64
uint32_t SysCtlClockFreqSet(uint32_t ui32Config, uint32_t ui32SysClock)
Definition: sysctl.c:2115
uint32_t SysCtlNMIStatus(void)
Definition: sysctl.c:3543
#define SYSCTL_RCC_USEPWMDIV
Definition: hw_sysctl.h:1067
#define CLASS_IS_TM4C129
Definition: hw_types.h:99
#define SYSCTL_MISC_PLLLMIS
Definition: hw_sysctl.h:1029
#define SYSCTL_MEMTIM0
Definition: hw_sysctl.h:78
static const struct @1 g_sXTALtoMEMTIM[]
#define SYSCTL_PWMDIV_4
Definition: sysctl.h:209
#define SYSCTL_PERIPH_UART6
Definition: sysctl.h:128
void SysCtlResetBehaviorSet(uint32_t ui32Behavior)
Definition: sysctl.c:2031
#define SYSCTL_MEMTIM0_FBCHT_2
Definition: hw_sysctl.h:1243
#define SYSCTL_ALTCLKCFG
Definition: hw_sysctl.h:98
#define SYSCTL_RSCLKCFG_OSCSRC_MOSC
Definition: hw_sysctl.h:1200
#define SYSCTL_PLLFREQ0_PLLPWR
Definition: hw_sysctl.h:1547
#define SYSCTL_PERIPH_CCM0
Definition: sysctl.h:81
#define SYSCTL_MEMTIM0_EBCHT_0_5
Definition: hw_sysctl.h:1220
#define SYSCTL_PERIPH_PWM1
Definition: sysctl.h:107
#define SYSCTL_RSCLKCFG_OSCSRC_PIOSC
Definition: hw_sysctl.h:1196
#define SYSCTL_PERIPH_I2C1
Definition: sysctl.h:95
#define SYSCTL_NMIC
Definition: hw_sysctl.h:71
#define SYSCTL_PCBASE
Definition: sysctl.c:346
#define SYSCTL_PERIPH_CAN0
Definition: sysctl.h:65
#define SYSCTL_PLLSTAT_LOCK
Definition: hw_sysctl.h:1569
#define SYSCTL_PWMDIV_1
Definition: sysctl.h:207
#define SYSCTL_RCGCBASE
Definition: sysctl.c:343
#define SYSCTL_PERIPH_TIMER4
Definition: sysctl.h:118
#define SYSCTL_PERIPH_EPHY0
Definition: sysctl.h:69
#define SYSCTL_MISC
Definition: hw_sysctl.h:66
#define SYSCTL_MEMTIM0_EBCHT_2
Definition: hw_sysctl.h:1225
#define SYSCTL_DSLP_OSC_EXT32
Definition: sysctl.h:459
void SysCtlAltClkConfig(uint32_t ui32Config)
Definition: sysctl.c:3686
#define SYSCTL_RCC_OSCSRC_INT
Definition: hw_sysctl.h:1101
void IntDisable(uint32_t ui32Interrupt)
Definition: interrupt.c:684
#define SYSCTL_PERIPH_GPIOL
Definition: sysctl.h:86
void IntRegister(uint32_t ui32Interrupt, void(*pfnHandler)(void))
Definition: interrupt.c:309
#define SYSCTL_PIOSCSTAT_CR_M
Definition: hw_sysctl.h:1530
#define FLASH_PP_MAINSS_S
Definition: sysctl.c:65
void IntEnable(uint32_t ui32Interrupt)
Definition: interrupt.c:610
#define PLL_N_TO_REG(n)
Definition: sysctl.c:129
static uint32_t _SysCtlFrequencyGet(uint32_t ui32Xtal)
Definition: sysctl.c:266
uint32_t SysCtlPIOSCCalibrate(uint32_t ui32Type)
Definition: sysctl.c:1937
#define FLASH_SSIZE
Definition: hw_flash.h:62
#define SYSCTL_DSCLKCFG_DSOSCSRC_MOSC
Definition: hw_sysctl.h:1480
#define SYSCTL_PWMDIV_32
Definition: sysctl.h:212
#define SYSCTL_MEMTIM0_FBCHT_3_5
Definition: hw_sysctl.h:1247
#define SYSCTL_PERIPH_UART4
Definition: sysctl.h:126