SLAZ627W September   2014  – August 2021 MSP430FR6972

 

  1. 1Functional Advisories
  2. 2Preprogrammed Software Advisories
  3. 3Debug Only Advisories
  4. 4Fixed by Compiler Advisories
  5. 5Nomenclature, Package Symbolization, and Revision Identification
    1. 5.1 Device Nomenclature
    2. 5.2 Package Markings
      1.      PM64
      2.      RGC64
    3. 5.3 Memory-Mapped Hardware Revision (TLV Structure)
  6. 6Advisory Descriptions
    1. 6.1  ADC38
    2. 6.2  ADC42
    3. 6.3  ADC43
    4. 6.4  ADC64
    5. 6.5  ADC66
    6. 6.6  ADC67
    7. 6.7  ADC69
    8. 6.8  ADC70
    9. 6.9  ADC71
    10. 6.10 AES1
    11. 6.11 COMP7
    12. 6.12 COMP10
    13. 6.13 CPU21
    14. 6.14 CPU22
    15. 6.15 CPU40
    16. 6.16 CPU46
    17. 6.17 CPU47
    18. 6.18 CS7
    19. 6.19 CS12
    20. 6.20 DMA7
    21. 6.21 EEM19
    22. 6.22 EEM23
    23. 6.23 EEM27
    24. 6.24 EEM30
    25. 6.25 EEM31
    26. 6.26 GC4
    27. 6.27 GC5
    28. 6.28 JTAG27
    29. 6.29 PMM24
    30. 6.30 PMM27
    31. 6.31 PMM31
    32. 6.32 PMM32
    33. 6.33 PORT28
    34. 6.34 REF9
    35. 6.35 RTC10
    36. 6.36 RTC12
    37. 6.37 TB25
    38. 6.38 USCI41
    39. 6.39 USCI42
    40. 6.40 USCI45
    41. 6.41 USCI47
    42. 6.42 USCI50
  7. 7Revision History

CS12

CS Module

Category

Functional

Function

DCO overshoot at frequency change

Description

When changing frequencies (CSCTL1.DCOFSEL), the DCO frequency may overshoot and exceed the datasheet specification. After a time period of 10us has elapsed, the frequency overshoot settles down to the expected range as specified in the datasheet. The overshoot occur when switching to and from any DCOFSEL setting and impacts all peripherals using the DCO as a clock source. A potential impact can also be seen on FRAM accesses, since the overshoot may cause a temporary violation of FRAM access and cycle time requirements.

Workaround

When changing the DCO settings, use the following procedure:

1) Store the existing CSCTL3 divider into a temporary unsigned 16-bit variable

2) Set CSCTL3 to divide all corresponding clock sources by 4 or higher

3) Change DCO frequency

4) Wait ~10us

5) Restore the divider in CSCTL3 to the setting stored in the temporary variable.

The following code example shows how to increase DCO to 16MHz.


uint16_t tempCSCTL3 = 0;                    
CSCTL0_H = CSKEY_H;        // Unlock CS registers
/* Assuming SMCLK and MCLK are sourced from DCO */
/* Store CSCTL3 settings to recover later */
tempCSCTL3 = CSCTL3;                       
/* Keep overshoot transient within specification by setting clk sources to divide by 4*/
/* Clear the DIVS & DIVM masks (~0x77)and set both fields to 4 divider */
CSCTL3 = CSCTL3 & (~(0x77)) | DIVS__4 | DIVM__4;
CSCTL1 = DCOFSEL_4 | DCORSEL;        // Set DCO to 16MHz 
/* Delay by ~10us to let DCO settle. 60 cycles = 20 cycles buffer + (10us / (1/4MHz)) */
__delay_cycles(60);
CSCTL3 =  tempCSCTL3;      // Set all dividers
CSCTL0_H = 0;                    // Lock CS registers