专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
MSP430F5438的DCO怎么设置
2019-03-24 10:07
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
TI MCU
12083
4
1619
DCO怎么设置,怎么知道频率是多少
此帖出自
小平头技术问答
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
LeoMe
1楼-- · 2019-03-24 12:59
void SetVcoreUp (unsigned int level)
{
PMMCTL0_H = PMMPW_H; /* Open PMM registers for write */
SVSMHCTL = SVSHE + SVSHRVL0 * level + SVMHE + SVSMHRRL0 * level; /* Set SVS/SVM high side new level */
SVSMLCTL = SVSLE + SVMLE + SVSMLRRL0 * level; /* Set SVM low side to new level */
while ((PMMIFG & SVSMLDLYIFG) == 0); /* Wait till SVM is settled */
PMMIFG &= ~(SVMLVLRIFG + SVMLIFG); /* Clear already set flags */
PMMCTL0_L = PMMCOREV0 * level; /* Set VCore to new level */
if ((PMMIFG & SVMLIFG)) /* Wait till new level reached */
while ((PMMIFG & SVMLVLRIFG) == 0);
SVSMLCTL = SVSLE + SVSLRVL0 * level + SVMLE + SVSMLRRL0 * level; /* Set SVS/SVM low side to new level */
PMMCTL0_H = 0x00; /* Lock PMM registers for write access */
}
void UcsInit (void)
{
// Increase Vcore setting to level3 to support fsystem=25MHz
// NOTE: Change core voltage one level at a time..
SetVcoreUp (0x01);
SetVcoreUp (0x02);
SetVcoreUp (0x03);
UCSCTL3 = SELREF_2; // Set DCO FLL reference = REFO
UCSCTL4 |= SELA_2; // Set ACLK = REFO
__bis_SR_register(SCG0); // Disable the FLL control loop
UCSCTL0 = 0x0000; // Set lowest possible DCOx, MODx
UCSCTL1 = DCORSEL_7; // Select DCO range 50MHz operation
UCSCTL2 = FLLD_1 + 762; // Set DCO Multiplier for 25MHz
// (N + 1) * FLLRef = Fdco
// (762 + 1) * 32768 = 25MHz
// Set FLL Div = fDCOCLK/2
__bic_SR_register(SCG0); // Enable the FLL control loop
// Worst-case settling time for the DCO when the DCO range bits have been
// changed is n x 32 x 32 x f_MCLK / f_FLL_reference. See UCS chapter in 5xx
// UG for optimization.
// 32 x 32 x 25 MHz / 32,768 Hz ~ 780k MCLK cycles for DCO to settle
__delay_cycles(782000);
// Loop until XT1,XT2 & DCO stabilizes - In this case only DCO has to stabilize
do
{
UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG);// Clear XT2,XT1,DCO fault flags
SFRIFG1 &= ~OFIFG; // Clear fault flags
}while (SFRIFG1&OFIFG); // Test oscillator fault flag
}
复制代码
官方给的一段程序,5438的DCO需要先升内核电压,然后设置DCO频率
UcsInit();//提高内核电压,DCO 25MHz
UCSCTL4|=SELM__DCOCLK+SELS__DCOCLK;//MCLK选择DCO 25MHz SMCLK选择DCO 25MHz
复制代码
在程序里调用一下
加载中...
数码小叶
2楼-- · 2019-03-24 16:24
精彩回答 2 元偷偷看……
加载中...
数码小叶
3楼-- · 2019-03-24 19:33
ccs刚装完,居然要更新,打不开例程
加载中...
dageliu
4楼-- · 2019-03-24 22:28
LeoMe 发表于 2015-6-17 14:08
官方给的一段程序,5438的DCO需要先升内核电压,然后设置DCO频率
在程序里调用一下
如果都是默认的呢,就是不初始化
加载中...
一周热门
更多
>
相关问题
相关文章
×
关闭
采纳回答
向帮助了您的网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
关闭
您已邀请
15
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
- void SetVcoreUp (unsigned int level)
- {
- PMMCTL0_H = PMMPW_H; /* Open PMM registers for write */
- SVSMHCTL = SVSHE + SVSHRVL0 * level + SVMHE + SVSMHRRL0 * level; /* Set SVS/SVM high side new level */
- SVSMLCTL = SVSLE + SVMLE + SVSMLRRL0 * level; /* Set SVM low side to new level */
- while ((PMMIFG & SVSMLDLYIFG) == 0); /* Wait till SVM is settled */
- PMMIFG &= ~(SVMLVLRIFG + SVMLIFG); /* Clear already set flags */
- PMMCTL0_L = PMMCOREV0 * level; /* Set VCore to new level */
- if ((PMMIFG & SVMLIFG)) /* Wait till new level reached */
- while ((PMMIFG & SVMLVLRIFG) == 0);
- SVSMLCTL = SVSLE + SVSLRVL0 * level + SVMLE + SVSMLRRL0 * level; /* Set SVS/SVM low side to new level */
- PMMCTL0_H = 0x00; /* Lock PMM registers for write access */
- }
- void UcsInit (void)
- {
- // Increase Vcore setting to level3 to support fsystem=25MHz
- // NOTE: Change core voltage one level at a time..
- SetVcoreUp (0x01);
- SetVcoreUp (0x02);
- SetVcoreUp (0x03);
- UCSCTL3 = SELREF_2; // Set DCO FLL reference = REFO
- UCSCTL4 |= SELA_2; // Set ACLK = REFO
- __bis_SR_register(SCG0); // Disable the FLL control loop
- UCSCTL0 = 0x0000; // Set lowest possible DCOx, MODx
- UCSCTL1 = DCORSEL_7; // Select DCO range 50MHz operation
- UCSCTL2 = FLLD_1 + 762; // Set DCO Multiplier for 25MHz
- // (N + 1) * FLLRef = Fdco
- // (762 + 1) * 32768 = 25MHz
- // Set FLL Div = fDCOCLK/2
- __bic_SR_register(SCG0); // Enable the FLL control loop
- // Worst-case settling time for the DCO when the DCO range bits have been
- // changed is n x 32 x 32 x f_MCLK / f_FLL_reference. See UCS chapter in 5xx
- // UG for optimization.
- // 32 x 32 x 25 MHz / 32,768 Hz ~ 780k MCLK cycles for DCO to settle
- __delay_cycles(782000);
- // Loop until XT1,XT2 & DCO stabilizes - In this case only DCO has to stabilize
- do
- {
- UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG);// Clear XT2,XT1,DCO fault flags
- SFRIFG1 &= ~OFIFG; // Clear fault flags
- }while (SFRIFG1&OFIFG); // Test oscillator fault flag
- }
复制代码官方给的一段程序,5438的DCO需要先升内核电压,然后设置DCO频率
- UcsInit();//提高内核电压,DCO 25MHz
- UCSCTL4|=SELM__DCOCLK+SELS__DCOCLK;//MCLK选择DCO 25MHz SMCLK选择DCO 25MHz
复制代码在程序里调用一下
如果都是默认的呢,就是不初始化
一周热门 更多>