16 #if defined(__MSP430_HAS_UCS__) || defined(__MSP430_HAS_UCS_RF__)
22 #define __extension__(x)
25 volatile
unsigned int j; \
35 #define CC430_DEVICE (defined (__CC430F5133__) || defined(__CC430F5135__) || defined(__CC430F5137__) || \
36 defined(__CC430F6125__) || defined(__CC430F6126__) || defined(__CC430F6127__) || \
37 defined(__CC430F6135__) || defined(__CC430F6137__) || defined(__CC430F5123__) || \
38 defined(__CC430F5125__) || defined(__CC430F5143__) || defined(__CC430F5145__) || \
39 defined(__CC430F5147__) || defined(__CC430F6143__) || defined(__CC430F6145__) || \
40 defined(__CC430F6147__))
42 #define NOT_CC430_DEVICE (!defined (__CC430F5133__) && !defined(__CC430F5135__) && !defined(__CC430F5137__) && \
43 !defined(__CC430F6125__) && !defined(__CC430F6126__) && !defined(__CC430F6127__) && \
44 !defined(__CC430F6135__) && !defined(__CC430F6137__) && !defined(__CC430F5123__) && \
45 !defined(__CC430F5125__) && !defined(__CC430F5143__) && !defined(__CC430F5145__) && \
46 !defined(__CC430F5147__) && !defined(__CC430F6143__) && !defined(__CC430F6145__) && \
47 !defined(__CC430F6147__))
55 static uint32_t privateXT1ClockFrequency = 0;
64 static uint32_t privateXT2ClockFrequency = 0;
66 static uint32_t privateUCSSourceClockFromDCO (uint16_t FLLRefCLKSource
69 assert((SELM__DCOCLKDIV == FLLRefCLKSource) ||
70 (SELM__DCOCLK == FLLRefCLKSource)
78 N_value = (
HWREG16(UCS_BASE + OFS_UCSCTL2)) & 0x03FF;
79 uint16_t tempDivider =
HWREG8(UCS_BASE + OFS_UCSCTL3) & FLLREFDIV_7;
81 if (tempDivider < 4) {
82 n_value <<= tempDivider;
84 else if (tempDivider == 4) {
87 else if (tempDivider == 5) {
91 switch ( (
HWREG8(UCS_BASE + OFS_UCSCTL3)) & SELREF_7){
93 Fref_value = privateXT1ClockFrequency;
95 if(XTS != (
HWREG16(UCS_BASE + OFS_UCSCTL6) & XTS)) {
96 if (
HWREG8(UCS_BASE + OFS_UCSCTL7) & XT1LFOFFG){
97 HWREG8(UCS_BASE + OFS_UCSCTL7) &= ~(XT1LFOFFG);
99 HWREG8(SFR_BASE + OFS_SFRIFG1) &= ~OFIFG;
101 if (
HWREG8(UCS_BASE + OFS_UCSCTL7) & XT1LFOFFG){
102 Fref_value = UCS_REFOCLK_FREQUENCY;
107 if (
HWREG8(UCS_BASE + OFS_UCSCTL7) & XT1HFOFFG){
108 HWREG8(UCS_BASE + OFS_UCSCTL7) &= ~(XT1HFOFFG);
110 HWREG8(SFR_BASE + OFS_SFRIFG1) &= ~OFIFG;
112 if (
HWREG8(UCS_BASE + OFS_UCSCTL7) & XT1HFOFFG){
113 Fref_value = UCS_REFOCLK_FREQUENCY;
119 case SELREF__REFOCLK:
120 Fref_value = UCS_REFOCLK_FREQUENCY;
123 Fref_value = privateXT2ClockFrequency;
125 if (
HWREG8(UCS_BASE + OFS_UCSCTL7) & XT2OFFG){
126 HWREG8(UCS_BASE + OFS_UCSCTL7) &= ~(XT2OFFG);
129 HWREG8(SFR_BASE + OFS_SFRIFG1) &= ~OFIFG;
131 if (
HWREG8(UCS_BASE + OFS_UCSCTL7) & XT2OFFG){
132 Fref_value = UCS_REFOCLK_FREQUENCY;
140 uint32_t CLKFrequency = Fref_value * ( N_value + 1) / n_value;
142 if (SELM__DCOCLK == FLLRefCLKSource){
143 tempDivider = (
HWREG16(UCS_BASE + OFS_UCSCTL2)) & FLLD_7;
144 tempDivider = tempDivider >> 12;
146 for (
i = 0;
i < tempDivider;
i++){
147 D_value = D_value * 2;
150 CLKFrequency *= D_value;
152 return ( CLKFrequency) ;
155 static uint32_t privateUCSComputeCLKFrequency (uint16_t CLKSource,
156 uint16_t CLKSourceDivider
159 uint32_t CLKFrequency;
160 uint8_t CLKSourceFrequencyDivider = 1;
163 for (
i = 0;
i < CLKSourceDivider;
i++){
164 CLKSourceFrequencyDivider *= 2;
169 CLKFrequency = (privateXT1ClockFrequency /
170 CLKSourceFrequencyDivider);
172 if(XTS != (
HWREG16(UCS_BASE + OFS_UCSCTL6) & XTS)) {
173 if (
HWREG8(UCS_BASE + OFS_UCSCTL7) & XT1LFOFFG){
174 HWREG8(UCS_BASE + OFS_UCSCTL7) &= ~(XT1LFOFFG);
176 HWREG8(SFR_BASE + OFS_SFRIFG1) &= ~OFIFG;
178 if (
HWREG8(UCS_BASE + OFS_UCSCTL7) & XT1LFOFFG){
179 CLKFrequency = UCS_REFOCLK_FREQUENCY;
184 if (
HWREG8(UCS_BASE + OFS_UCSCTL7) & XT1HFOFFG){
185 HWREG8(UCS_BASE + OFS_UCSCTL7) &= ~(XT1HFOFFG);
187 HWREG8(SFR_BASE + OFS_SFRIFG1) &= ~OFIFG;
189 if (
HWREG8(UCS_BASE + OFS_UCSCTL7) & XT1HFOFFG){
190 CLKFrequency = UCS_REFOCLK_FREQUENCY;
198 (UCS_VLOCLK_FREQUENCY / CLKSourceFrequencyDivider);
202 (UCS_REFOCLK_FREQUENCY / CLKSourceFrequencyDivider);
206 (privateXT2ClockFrequency / CLKSourceFrequencyDivider);
208 if (
HWREG8(UCS_BASE + OFS_UCSCTL7) & XT2OFFG){
210 HWREG8(UCS_BASE + OFS_UCSCTL7) &= ~XT2OFFG;
212 HWREG8(SFR_BASE + OFS_SFRIFG1) &= ~OFIFG;
215 if (
HWREG8(UCS_BASE + OFS_UCSCTL7) & XT2OFFG){
217 privateUCSSourceClockFromDCO( SELM__DCOCLKDIV);
221 case SELM__DCOCLKDIV:
222 CLKFrequency = privateUCSSourceClockFromDCO(
223 CLKSource) / CLKSourceFrequencyDivider;
227 return ( CLKFrequency) ;
230 void UCS_setExternalClockSource (uint32_t XT1CLK_frequency,
231 uint32_t XT2CLK_frequency
234 privateXT1ClockFrequency = XT1CLK_frequency;
235 privateXT2ClockFrequency = XT2CLK_frequency;
238 void UCS_initClockSignal (uint8_t selectedClockSignal,
239 uint16_t clockSource,
240 uint16_t clockSourceDivider
244 (UCS_XT1CLK_SELECT == clockSource) ||
245 (UCS_VLOCLK_SELECT == clockSource) ||
246 (UCS_REFOCLK_SELECT == clockSource) ||
247 (UCS_DCOCLK_SELECT == clockSource) ||
248 (UCS_DCOCLKDIV_SELECT == clockSource) ||
249 (UCS_XT2CLK_SELECT == clockSource)
253 (UCS_CLOCK_DIVIDER_1 == clockSourceDivider) ||
254 (UCS_CLOCK_DIVIDER_2 == clockSourceDivider) ||
255 (UCS_CLOCK_DIVIDER_4 == clockSourceDivider) ||
256 (UCS_CLOCK_DIVIDER_8 == clockSourceDivider) ||
257 (UCS_CLOCK_DIVIDER_16 == clockSourceDivider) ||
258 (UCS_CLOCK_DIVIDER_32 == clockSourceDivider)
262 switch (selectedClockSignal){
264 HWREG16(UCS_BASE + OFS_UCSCTL4) &= ~(SELA_7);
265 clockSource = clockSource << 8;
266 HWREG16(UCS_BASE + OFS_UCSCTL4) |= (clockSource);
268 clockSourceDivider = clockSourceDivider << 8;
269 HWREG16(UCS_BASE + OFS_UCSCTL5) =
temp & ~(DIVA_7) | clockSourceDivider;
272 HWREG16(UCS_BASE + OFS_UCSCTL4) &= ~(SELS_7);
273 clockSource = clockSource << 4;
274 HWREG16(UCS_BASE + OFS_UCSCTL4) |= (clockSource);
276 clockSourceDivider = clockSourceDivider << 4;
277 HWREG16(UCS_BASE + OFS_UCSCTL5) =
temp & ~(DIVS_7) | clockSourceDivider;
280 HWREG16(UCS_BASE + OFS_UCSCTL4) &= ~(SELM_7);
281 HWREG16(UCS_BASE + OFS_UCSCTL4) |= (clockSource);
283 HWREG16(UCS_BASE + OFS_UCSCTL5) =
temp & ~(DIVM_7) | clockSourceDivider;
286 assert(clockSource <= SELA_5);
287 HWREG8(UCS_BASE + OFS_UCSCTL3) &= ~(SELREF_7);
289 clockSource = clockSource << 4;
290 HWREG8(UCS_BASE + OFS_UCSCTL3) |= (clockSource);
292 temp =
HWREG8(UCS_BASE + OFS_UCSCTL3) & 0x00FF;
295 switch(clockSourceDivider)
297 case UCS_CLOCK_DIVIDER_12:
298 HWREG8(UCS_BASE + OFS_UCSCTL3) =
temp & ~(FLLREFDIV_7) | FLLREFDIV__12;
300 case UCS_CLOCK_DIVIDER_16:
301 HWREG8(UCS_BASE + OFS_UCSCTL3) =
temp & ~(FLLREFDIV_7) | FLLREFDIV__16;
304 HWREG8(UCS_BASE + OFS_UCSCTL3) =
temp & ~(FLLREFDIV_7) | clockSourceDivider;
312 void UCS_turnOnLFXT1 (uint16_t xt1drive,
316 assert((xcap == UCS_XCAP_0) ||
317 (xcap == UCS_XCAP_1) ||
318 (xcap == UCS_XCAP_2) ||
319 (xcap == UCS_XCAP_3) );
321 assert((xt1drive == UCS_XT1_DRIVE_0 ) ||
322 (xt1drive == UCS_XT1_DRIVE_1 ) ||
323 (xt1drive == UCS_XT1_DRIVE_2 ) ||
324 (xt1drive == UCS_XT1_DRIVE_3 ));
327 HWREG16(UCS_BASE + OFS_UCSCTL6) &= ~XT1OFF;
330 HWREG16(UCS_BASE + OFS_UCSCTL6_L) |= XT1DRIVE1_L + XT1DRIVE0_L;
333 HWREG16(UCS_BASE + OFS_UCSCTL6) &= ~(XTS + XCAP_3 + XT1BYPASS);
334 HWREG16(UCS_BASE + OFS_UCSCTL6) |= xcap;
336 while (
HWREG8(UCS_BASE + OFS_UCSCTL7) & XT1LFOFFG)
339 HWREG8(UCS_BASE + OFS_UCSCTL7) &= ~(XT1LFOFFG);
342 HWREG8(SFR_BASE + OFS_SFRIFG1) &= ~OFIFG;
346 HWREG16(UCS_BASE + OFS_UCSCTL6) = (
HWREG16(UCS_BASE + OFS_UCSCTL6) &
353 void UCS_turnOnHFXT1(uint16_t xt1drive
357 HWREG16(UCS_BASE + OFS_UCSCTL6) &= ~XT1OFF;
360 if ((
HWREG16(UCS_BASE + OFS_UCSCTL6) & XT1DRIVE_3) != xt1drive){
362 HWREG16(UCS_BASE + OFS_UCSCTL6) &= ~XT1DRIVE_3;
365 HWREG16(UCS_BASE + OFS_UCSCTL6) |= xt1drive;
369 HWREG16(UCS_BASE + OFS_UCSCTL6) |= XTS;
371 HWREG16(UCS_BASE + OFS_UCSCTL6) &= ~XT1BYPASS;
374 while((
HWREG8(UCS_BASE + OFS_UCSCTL7) & (XT1HFOFFG))){
376 HWREG8(UCS_BASE + OFS_UCSCTL7) &= ~(XT1HFOFFG);
379 HWREG8(SFR_BASE + OFS_SFRIFG1) &= ~OFIFG;
383 void UCS_bypassXT1 (uint8_t highOrLowFrequency
386 assert((UCS_XT1_LOW_FREQUENCY == highOrLowFrequency) ||
387 (UCS_XT1_HIGH_FREQUENCY == highOrLowFrequency )
391 HWREG16(UCS_BASE + OFS_UCSCTL6) &= ~XTS;
392 HWREG16(UCS_BASE + OFS_UCSCTL6) |= highOrLowFrequency;
395 HWREG16(UCS_BASE + OFS_UCSCTL6) |= (XT1BYPASS + XT1OFF);
397 if (UCS_XT1_LOW_FREQUENCY == highOrLowFrequency){
398 while (
HWREG8(UCS_BASE + OFS_UCSCTL7) & (XT1LFOFFG)) {
400 HWREG8(UCS_BASE + OFS_UCSCTL7) &= ~(XT1LFOFFG);
405 HWREG8(SFR_BASE + OFS_SFRIFG1) &= ~OFIFG;
408 while (
HWREG8(UCS_BASE + OFS_UCSCTL7) & (XT1HFOFFG)) {
410 HWREG8(UCS_BASE + OFS_UCSCTL7) &= ~(XT1HFOFFG);
415 HWREG8(SFR_BASE + OFS_SFRIFG1) &= ~OFIFG;
421 bool UCS_turnOnLFXT1WithTimeout(uint16_t xt1drive,
426 assert((xcap == UCS_XCAP_0) ||
427 (xcap == UCS_XCAP_1) ||
428 (xcap == UCS_XCAP_2) ||
429 (xcap == UCS_XCAP_3) );
431 assert((xt1drive == UCS_XT1_DRIVE_0 ) ||
432 (xt1drive == UCS_XT1_DRIVE_1 ) ||
433 (xt1drive == UCS_XT1_DRIVE_2 ) ||
434 (xt1drive == UCS_XT1_DRIVE_3 ));
439 HWREG16(UCS_BASE + OFS_UCSCTL6) &= ~XT1OFF;
442 HWREG16(UCS_BASE + OFS_UCSCTL6_L) |= XT1DRIVE1_L + XT1DRIVE0_L;
445 HWREG16(UCS_BASE + OFS_UCSCTL6) &= ~(XTS + XCAP_3 + XT1BYPASS);
446 HWREG16(UCS_BASE + OFS_UCSCTL6) |= xcap;
450 HWREG8(UCS_BASE + OFS_UCSCTL7) &= ~(XT1LFOFFG);
453 HWREG8(SFR_BASE + OFS_SFRIFG1) &= ~OFIFG;
454 }
while ((
HWREG8(UCS_BASE + OFS_UCSCTL7) & XT1LFOFFG) && --timeout);
458 HWREG16(UCS_BASE + OFS_UCSCTL6) = (
HWREG16(UCS_BASE + OFS_UCSCTL6) &
469 bool UCS_turnOnHFXT1WithTimeout (uint16_t xt1drive,
473 assert((xt1drive == UCS_XT1_DRIVE_0 ) ||
474 (xt1drive == UCS_XT1_DRIVE_1 ) ||
475 (xt1drive == UCS_XT1_DRIVE_2 ) ||
476 (xt1drive == UCS_XT1_DRIVE_3 ));
481 HWREG16(UCS_BASE + OFS_UCSCTL6) &= ~XT1OFF;
484 if ((
HWREG16(UCS_BASE + OFS_UCSCTL6) & XT1DRIVE_3) != xt1drive){
486 HWREG16(UCS_BASE + OFS_UCSCTL6) &= ~XT1DRIVE_3;
489 HWREG16(UCS_BASE + OFS_UCSCTL6) |= xt1drive;
493 HWREG16(UCS_BASE + OFS_UCSCTL6) |= XTS;
495 HWREG16(UCS_BASE + OFS_UCSCTL6) &= ~XT1BYPASS;
500 HWREG8(UCS_BASE + OFS_UCSCTL7) &= ~(XT1HFOFFG);
503 HWREG8(SFR_BASE + OFS_SFRIFG1) &= ~OFIFG;
504 }
while ((
HWREG8(UCS_BASE + OFS_UCSCTL7) & ( XT1HFOFFG))
514 bool UCS_bypassXT1WithTimeout (uint8_t highOrLowFrequency,
518 assert((UCS_XT1_LOW_FREQUENCY == highOrLowFrequency) ||
519 (UCS_XT1_HIGH_FREQUENCY == highOrLowFrequency )
525 HWREG16(UCS_BASE + OFS_UCSCTL6) &= ~XTS;
526 HWREG16(UCS_BASE + OFS_UCSCTL6) |= highOrLowFrequency;
529 HWREG16(UCS_BASE + OFS_UCSCTL6) |= (XT1BYPASS + XT1OFF);
531 if (UCS_XT1_LOW_FREQUENCY == highOrLowFrequency){
534 HWREG8(UCS_BASE + OFS_UCSCTL7) &= ~(XT1LFOFFG);
539 HWREG8(SFR_BASE + OFS_SFRIFG1) &= ~OFIFG;
540 }
while ((
HWREG8(UCS_BASE + OFS_UCSCTL7) & (XT1LFOFFG)) && --timeout);
545 HWREG8(UCS_BASE + OFS_UCSCTL7) &= ~(XT1HFOFFG);
550 HWREG8(SFR_BASE + OFS_SFRIFG1) &= ~OFIFG;
551 }
while ((
HWREG8(UCS_BASE + OFS_UCSCTL7) & (XT1HFOFFG))&& --timeout);
561 void UCS_turnOffXT1 (
void)
564 HWREG16(UCS_BASE + OFS_UCSCTL6) |= XT1OFF;
567 void UCS_turnOnXT2 (uint16_t xt2drive
573 if ((
HWREG16(UCS_BASE + OFS_UCSCTL6) & XT2DRIVE_3) != xt2drive){
575 HWREG16(UCS_BASE + OFS_UCSCTL6) &= ~XT2DRIVE_3;
578 HWREG16(UCS_BASE + OFS_UCSCTL6) |= xt2drive;
581 HWREG16(UCS_BASE + OFS_UCSCTL6) &= ~XT2BYPASS;
585 HWREG16(UCS_BASE + OFS_UCSCTL6) &= ~XT2OFF;
587 while (
HWREG8(UCS_BASE + OFS_UCSCTL7) & XT2OFFG){
589 HWREG8(UCS_BASE + OFS_UCSCTL7) &= ~(XT2OFFG);
599 HWREG8(SFR_BASE + OFS_SFRIFG1) &= ~OFIFG;
603 void UCS_bypassXT2 (
void)
607 HWREG16(UCS_BASE + OFS_UCSCTL6) |= XT2BYPASS;
609 HWREG16(UCS_BASE + OFS_UCSCTL6) |= XT2OFF;
611 while (
HWREG8(UCS_BASE + OFS_UCSCTL7) & XT2OFFG){
613 HWREG8(UCS_BASE + OFS_UCSCTL7) &= ~(XT2OFFG);
623 HWREG8(SFR_BASE + OFS_SFRIFG1) &= ~OFIFG;
627 bool UCS_turnOnXT2WithTimeout (uint16_t xt2drive,
635 if ((
HWREG16(UCS_BASE + OFS_UCSCTL6) & XT2DRIVE_3) != xt2drive){
637 HWREG16(UCS_BASE + OFS_UCSCTL6) &= ~XT2DRIVE_3;
640 HWREG16(UCS_BASE + OFS_UCSCTL6) |= xt2drive;
643 HWREG16(UCS_BASE + OFS_UCSCTL6) &= ~XT2BYPASS;
647 HWREG16(UCS_BASE + OFS_UCSCTL6) &= ~XT2OFF;
651 HWREG8(UCS_BASE + OFS_UCSCTL7) &= ~(XT2OFFG);
661 HWREG8(SFR_BASE + OFS_SFRIFG1) &= ~OFIFG;
662 }
while ((
HWREG8(UCS_BASE + OFS_UCSCTL7) & XT2OFFG) && --timeout);
671 bool UCS_bypassXT2WithTimeout (uint16_t timeout
678 HWREG16(UCS_BASE + OFS_UCSCTL6) |= XT2BYPASS;
680 HWREG16(UCS_BASE + OFS_UCSCTL6) |= XT2OFF;
684 HWREG8(UCS_BASE + OFS_UCSCTL7) &= ~(XT2OFFG);
694 HWREG8(SFR_BASE + OFS_SFRIFG1) &= ~OFIFG;
695 }
while ((
HWREG8(UCS_BASE + OFS_UCSCTL7) & XT2OFFG) && --timeout);
704 void UCS_turnOffXT2 (
void)
707 HWREG16(UCS_BASE + OFS_UCSCTL6) |= XT2OFF;
710 void UCS_initFLLSettle (uint16_t fsystem,
714 volatile uint16_t x = ratio * 32;
716 UCS_initFLL(fsystem, ratio);
724 void UCS_initFLL (uint16_t fsystem,
728 uint16_t d, dco_div_bits;
734 uint16_t srRegisterState = __get_SR_register() & SCG0;
738 dco_div_bits = FLLD__2;
740 if (fsystem > 16000){
751 dco_div_bits = dco_div_bits + FLLD0;
756 __bis_SR_register(SCG0);
759 HWREG8(UCS_BASE + OFS_UCSCTL0_H) = 0x0000;
762 HWREG16(UCS_BASE + OFS_UCSCTL2) &= ~(0x03FF);
763 HWREG16(UCS_BASE + OFS_UCSCTL2) = dco_div_bits | (d - 1);
766 HWREG8(UCS_BASE + OFS_UCSCTL1) = DCORSEL_0;
767 }
else if (fsystem < 1250){
768 HWREG8(UCS_BASE + OFS_UCSCTL1) = DCORSEL_1;
769 }
else if (fsystem < 2500){
770 HWREG8(UCS_BASE + OFS_UCSCTL1) = DCORSEL_2;
771 }
else if (fsystem < 5000){
772 HWREG8(UCS_BASE + OFS_UCSCTL1) = DCORSEL_3;
773 }
else if (fsystem < 10000){
774 HWREG8(UCS_BASE + OFS_UCSCTL1) = DCORSEL_4;
775 }
else if (fsystem < 20000){
776 HWREG8(UCS_BASE + OFS_UCSCTL1) = DCORSEL_5;
777 }
else if (fsystem < 40000){
778 HWREG8(UCS_BASE + OFS_UCSCTL1) = DCORSEL_6;
780 HWREG8(UCS_BASE + OFS_UCSCTL1) = DCORSEL_7;
784 __bic_SR_register(SCG0);
786 while (
HWREG8(UCS_BASE + OFS_UCSCTL7_L) & DCOFFG)
789 HWREG8(UCS_BASE + OFS_UCSCTL7_L) &= ~(DCOFFG);
792 HWREG8(SFR_BASE + OFS_SFRIFG1) &= ~OFIFG;
796 __bis_SR_register(srRegisterState);
801 HWREG16(UCS_BASE + OFS_UCSCTL4) &= ~(SELM_7 + SELS_7);
802 HWREG16(UCS_BASE + OFS_UCSCTL4) |= SELM__DCOCLK + SELS__DCOCLK;
805 HWREG16(UCS_BASE + OFS_UCSCTL4) &= ~(SELM_7 + SELS_7);
806 HWREG16(UCS_BASE + OFS_UCSCTL4) |= SELM__DCOCLKDIV + SELS__DCOCLKDIV;
811 void UCS_enableClockRequest (uint8_t selectClock
814 HWREG8(UCS_BASE + OFS_UCSCTL8) |= selectClock;
817 void UCS_disableClockRequest (uint8_t selectClock
820 HWREG8(UCS_BASE + OFS_UCSCTL8) &= ~selectClock;
823 uint8_t UCS_getFaultFlagStatus (uint8_t mask
826 assert(mask <= UCS_XT2OFFG );
827 return (
HWREG8(UCS_BASE + OFS_UCSCTL7) & mask);
830 void UCS_clearFaultFlag (uint8_t mask
833 assert(mask <= UCS_XT2OFFG );
834 HWREG8(UCS_BASE + OFS_UCSCTL7) &= ~mask;
837 void UCS_turnOffSMCLK (
void)
839 HWREG16(UCS_BASE + OFS_UCSCTL6) |= SMCLKOFF;
842 void UCS_turnOnSMCLK (
void)
844 HWREG16(UCS_BASE + OFS_UCSCTL6) &= ~SMCLKOFF;
847 uint32_t UCS_getACLK (
void)
850 uint16_t ACLKSource = (
HWREG16(UCS_BASE + OFS_UCSCTL4) & SELA_7);
852 ACLKSource = ACLKSource >> 8;
854 uint16_t ACLKSourceDivider =
HWREG16(UCS_BASE + OFS_UCSCTL5) & DIVA_7;
855 ACLKSourceDivider = ACLKSourceDivider >> 8;
857 return (privateUCSComputeCLKFrequency(
863 uint32_t UCS_getSMCLK (
void)
865 uint16_t SMCLKSource =
HWREG8(UCS_BASE + OFS_UCSCTL4_L) & SELS_7;
867 SMCLKSource = SMCLKSource >> 4;
869 uint16_t SMCLKSourceDivider =
870 HWREG16(UCS_BASE + OFS_UCSCTL5) & DIVS_7;
871 SMCLKSourceDivider = SMCLKSourceDivider >> 4;
873 return (privateUCSComputeCLKFrequency(
879 uint32_t UCS_getMCLK (
void)
882 uint16_t MCLKSource = (
HWREG16(UCS_BASE + OFS_UCSCTL4) & SELM_7);
884 uint16_t MCLKSourceDivider =
HWREG16(UCS_BASE + OFS_UCSCTL5) & DIVM_7;
886 return (privateUCSComputeCLKFrequency(
892 uint16_t UCS_clearAllOscFlagsWithTimeout(uint16_t timeout
899 HWREG8(UCS_BASE + OFS_UCSCTL7) &= ~(DCOFFG +
913 HWREG8(SFR_BASE + OFS_SFRIFG1) &= ~OFIFG;
916 }
while ((
HWREG8(SFR_BASE + OFS_SFRIFG1) & OFIFG) && --timeout);
918 return (
HWREG8(UCS_BASE + OFS_UCSCTL7) & (DCOFFG +