MSP430: VLO and You!!

So what is the VLO? The VLO is the very low- freq Oscillator, low power and low frequency(12KHz). So how does this change things, well now you can source your clocks from the DCO or the VLO instead of the 32Khz watch crystal. …….and now your asking yourself “Do I really need another clock source?” I say “yes!!”

Now what can you do or how can i use the VLO? Its super easy to setup the VLO. In the Family user guide for the MSP430, Basic Clock Module+ will be your reference to set up the VLO.
Registers that you will be concerned about are BCSCTL2, BCSCTL3 and the special functions registers.


  • BCSCTL3 needs LFXT1S_2 to be set

BCSCTL3 |= LFXT1S_2;                      // LFXT1 = VLO

  • BCSCTL2 needs to be set

BCSCTL2 |= SELM_3 + SELS;                 // SMCLK  = MCLK = VLO = 12Khz

  • Clear OSC fault flag

IFG1 &= ~OFIFG;                           // Clear OSCFault flag

  • Turn off DCO if not used

_BIS_SR(SCG1 + SCG0);                // Stop DCO


And that is all you need to do to setup your msp430 to use the VLO for SMCLK, AMCLK and MCLK @ 12KHz.  So now you need more control. so here are your VLO options

BCSCTL1 –  controls XTS(not avalable on msp430x20xx), Divider for ACLK, and DCO range select.

  • DIVAx  – divide ACLK source by 1,2,4,8 or 00, 01, 10, 11(bit settings). Pretty much this will divide your Clock source by 1 – 8. This setting is just for ACLK which will be the crystal or VLO. (this only affects ACLK)
  • XTS, XT2OFF, and RSELx are not used for VLO but may be a good idea to read up on what they do.



BCSCTL2  – controls MCLK divider, SMCLK divider MCLK and SMCLK clock source, each one is configurable.

  • SELMx – selects MCLK clock source, your choices are DCOCLK or LFXT1CLK/VLOCLK  just remember you cant use the VLO and the crystal
  • DIVMx – MCLK divider, divides the clock source by given amount, 1,2,4,8
  • SELS – select SMCLK source  DCOCLK or LFXT1CLK/VLOCLK
  • DIVSx – look another Divider, this one is for SMCLK
  • DCOR- not used – sets DCO resister to internal or external


BCSCTL3 – XT and LFXT setting, only one setting is really used here.

  • LFXT1Sx – source of LFXT1,  00(0) for 32KHz crystal and  10(2) for VLO instead of the crystal
  • XT2Sx, XCAPx, XT2OF, LFXT1OF are not set or used for the VLO



So now you have a basic understanding on how to setup your VLO, now let me give you a quick  VLO test


/* VLO clock as main source instead of the DCO */
#include  <msp430x20x3.h>
void main(void)
WDTCTL = WDTPW + WDTHOLD;                 // Stop watchdog timer
BCSCTL3 |= LFXT1S_2;                      // LFXT1 = VLO
IFG1 &= ~OFIFG;                           // Clear OSCFault flag
__bis_SR_register(SCG1 + SCG0);           // Stop DCO
BCSCTL2 |= SELM_3;               // MCLK = LFXT1
P1DIR |= 0x01;                            // Set P1.0 to output direction
for (;;)
volatile unsigned int i;
P1OUT ^= 0x01;                          // Toggle P1.0 using exclusive-OR
i = 50000;                              // Delay
do (i--);
while (i != 0);

code for use with mspgcc


Now that we have the basics down on the VLO, what are some of the uses for it? Really low power clock, or a 3rd clock source that’s a different frequency then the main, really slow ADC conversions, odd SDA16 filter frequency, a low frequency tone generator.


What other uses can you find? Let me know in the comments 🙂