Advertisement
Guest User

Untitled

a guest
Sep 24th, 2017
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.85 KB | None | 0 0
  1. void clockInit() {
  2.  
  3.     // Configure crystal ports
  4.     P5SEL |= BIT2 | BIT3 | BIT4 | BIT5;     // Configure P5 to use Crystals
  5.  
  6.     // This should make XT1 startup in 500ms and XT2 in less than 1ms
  7.     UCSCTL6 = XT2DRIVE_3      |             // Turn up crystal drive to
  8.               XT1DRIVE_3      |             // speed up oscillator startup
  9.               XCAP_3          |             // Use maximum capacitance (12pF)
  10. //            XT1OFF          |             // Make sure XT1 and XT2
  11. //            XT2OFF          |             // oscillators are active
  12. //            SMCLKOFF        |             // Leave SMCLK ON
  13. //            XT1BYPASS       |             // Not using external clock source
  14. //            XT2BYPASS       |             // Not using external clock source
  15. //            XTS             |             // XT1 low-frequency mode, which
  16.               0;                            // means XCAP bits will be used
  17.  
  18.     UCSCTL0 = 0x00;                         // Let FLL manage DCO and MOD
  19.  
  20.     UCSCTL1 = DCORSEL_5       |             // Select DCO range to around 16MHz
  21. //            DISMOD          |             // Enable modulator
  22.               0;
  23.  
  24.     UCSCTL2 = FLLD__1         |             // Set FLL dividers
  25.               FLLN(4);                      // DCOCLK = 1 * 4 * FLLREF
  26.  
  27.     UCSCTL3 = SELREF__XT2CLK  |             // Use XT2 Oscillator for FLLREF
  28.               FLLREFDIV__1;                 // divided by 1
  29.  
  30.     UCSCTL5 = DIVPA__1        |             // Output dividers to 1
  31.                DIVA__1        |             // ACLK  divided by 1
  32.                DIVS__4        |             // SMCLK divided by 4
  33.                DIVM__1;                     // MCLK  divided by 1
  34.  
  35.     UCSCTL7 = 0;                            // Clear XT2,XT1,DCO fault flags
  36.  
  37.     UCSCTL8 = SMCLKREQEN      |             // Enable conditional requests for
  38.                MCLKREQEN      |             // SMCLK, MCLK and ACLK. In case one
  39.                ACLKREQEN;                   // fails, another takes over
  40.  
  41.     do {                                    // Check if all clocks are oscillating
  42.       UCSCTL7 &= ~(   XT2OFFG |             // Try to clear XT2,XT1,DCO fault flags,
  43.                     XT1LFOFFG |             // system fault flags and check if
  44.                        DCOFFG );            // oscillators are still faulty
  45.       SFRIFG1 &= ~OFIFG;                    //
  46.     } while (SFRIFG1 & OFIFG);              // Exit only when everything is ok
  47.  
  48.     UCSCTL6 &= ~(XT1DRIVE_3   |             // Xtal is now stable,
  49.                  XT2DRIVE_3);               // reduce drive strength (to save power)
  50.  
  51.     UCSCTL4 = SELA__XT1CLK    |             // ACLK  = XT1   =>      32.768 Hz
  52.               SELS__XT2CLK    |             // SMCLK = XT2/4 =>   1.000.000 Hz
  53.               SELM__DCOCLK;                 // MCLK  = DCO   =>  16.000.000 Hz
  54. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement