Jump to content
43oh

[solved] DCO stops when RSELx = 0xF


Recommended Posts

Snippet:

//...
//DCO 1MHz
if(CALDCO_1MHZ == 0xFF || CALBC1_1MHZ == 0xFF){
	P1OUT |= BIT0;
	while(true);
} else {
	BCSCTL1 = CALBC1_1MHZ;
	DCOCTL = CALDCO_1MHZ;
}
//...
BCSCTL1 = 0x8F;

Can anyone reasonably explain to me why setting all bits of RSELx stops DCO in this configuration? I've found this when implementing random number generator based on drift of VLO and DCO clocks. It took me 3 hours to finally figure out that it was crashing my almost finished app :P.

 

Thx in advance.

Link to post
Share on other sites

See errata page 3.

 

Function Switching RSEL can cause DCO dead time

Description After switching RSELx bits (located in register BCSCTL1) from a value of >13 to a value of <12 OR from a value of <12 to a value of >13, the resulting clock delivered by the DCO can stop before the new clock frequency is applied. This dead time is approximately 20 ms. In some instances, the DCO may completely stop, requiring a power cycle.

Workaround

 

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...