历史上的今天
今天是:2025年05月28日(星期三)
2021年05月28日 | MSP430F5510时钟模块
2021-05-28 来源:eefocus
简介:好像时钟模块很复杂,其实,我们实际使用的时候比较简单,比如XT1外接一个32.768K晶振,XT2外接一个12M晶振,然后ACLK=XT1,MCLK=SMCLK=XT2,就好了,这里说的,主要是说说DCO,和内部自己震荡源,比较特殊,一般不怎么用,除非你没有任何外接晶振,只能使用内部的振荡器。
我给出一张截图,需要注意的我都标在上面了,图片需要放大观看的。

下面是TI提供的一个例程,我不多说,简单说几句。
//******************************************************************************
// MSP430F550x Demo - Software Toggle P1.1 with 12MHz DCO
//
// Description: Toggle P1.1 by xor'ing P1.1 inside of a software loop.
// ACLK is rought out on pin P1.0, SMCLK is brought out on P2.2, and MCLK
// is brought out on pin P4.7.
// ACLK = REFO = 32kHz, MCLK = SMCLK = 12MHz
//
// MSP430F550x
// -----------------
// /|| |
// | | P1.0|-->ACLK
// --|RST P4.7|-->MCLK
// | P2.2|-->SMCLK
// | |
// | P1.1|-->Port Pin
//
// D. Archbold
// Texas Instruments Inc.
// April 2009
// Built with CCSv4 and IAR Embedded Workbench Version: 4.21
//******************************************************************************
#include void SetVcoreUp (unsigned int level); void main(void) { volatile unsigned int i; WDTCTL = WDTPW+WDTHOLD;// Stop WDT PMAPPWD = 0x02D52;// Enable Write-access to modify port mapping registers P4MAP7 = PM_MCLK; PMAPPWD = 0;// Disable Write-Access to modify port mapping registers P1DIR |= BIT1; // P1.1 output P1DIR |= BIT0; // ACLK set out to pins P1SEL |= BIT0; P2DIR |= BIT2; // SMCLK set out to pins P2SEL |= BIT2; P4SEL |= BIT7; P4DIR |= BIT7; // MCLK set out to pins UCSCTL3 |= SELREF_2; // Set DCO FLL reference = REFO UCSCTL4 |= SELA_2; // Set ACLK = REFO // Increase Vcore setting to level1 to support fsystem=12MHz // NOTE: Change core voltage one level at a time.. SetVcoreUp (0x01); // Initialize DCO to 12MHz __bis_SR_register(SCG0); // Disable the FLL control loop UCSCTL0 = 0x0000; // Set lowest possible DCOx, MODx UCSCTL1 = DCORSEL_5; // Select DCO range 24MHz operation UCSCTL2 = FLLD_1 + 374; // Set DCO Multiplier for 12MHz // (N + 1) * FLLRef = Fdco // (374 + 1) * 32768 = 12MHz 对照图片上面的公式,应该很清楚了。因为FLLD_1就是上面的D,它是1,所以就给省略了。 // 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 12 MHz / 32,768 Hz = 375000 = MCLK cycles for DCO to settle __delay_cycles(375000);这段话在MSP430F5510datasheet里面有说明的,自己可以找一下。 // Loop until XT1,XT2 & DCO fault flag is cleared do { UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG); // Clear XT2,XT1,DCO fault flags SFRIFG1 &= ~OFIFG; // Clear fault flags }while (SFRIFG1&OFIFG); // Test oscillator fault flag while(1) { P1OUT ^= BIT1; // Toggle P1.0 __delay_cycles(600000); // Delay } } void SetVcoreUp (unsigned int level) { // Open PMM registers for write PMMCTL0_H = PMMPW_H; // Set SVS/SVM high side new level SVSMHCTL = SVSHE + SVSHRVL0 * level + SVMHE + SVSMHRRL0 * level; // Set SVM low side to new level SVSMLCTL = SVSLE + SVMLE + SVSMLRRL0 * level; // Wait till SVM is settled while ((PMMIFG & SVSMLDLYIFG) == 0); // Clear already set flags PMMIFG &= ~(SVMLVLRIFG + SVMLIFG); // Set VCore to new level PMMCTL0_L = PMMCOREV0 * level; // Wait till new level reached if ((PMMIFG & SVMLIFG)) while ((PMMIFG & SVMLVLRIFG) == 0); // Set SVS/SVM low side to new level SVSMLCTL = SVSLE + SVSLRVL0 * level + SVMLE + SVSMLRRL0 * level; // Lock PMM registers for write access PMMCTL0_H = 0x00; }
史海拾趣
|
2008新馆内,奔驰与宝马位置面对面,都可谓气势磅礴,奔驰携带34款新车出现在会场,阶梯式的排列两层。围观的、试驾的、拍照的拥挤不堪,当碰到一些问题想去咨询时,销售都一直忙着洽谈卖车的事情了,满头汗水,根本顾不上回答。奔驰的Smart系列吸 ...… 查看全部问答> |
|
#include sbit led1=P0^0; sbit led2=P0^1; sbit led3=P0^2; sbit led4=P2^7; sbit sound=P2^6; sbit scl=P3^7; sbit sda=P3^6; &nbs ...… 查看全部问答> |
|
DSP2407 TBLW指令写不了FLASH,求救 我的代码这样写的 LDP #6h SPLK #02D8h, 0 LACC #157h TBLW 0 执行完之后没反应,但用TBLR倒是可以读出来的,我用开发板是可以写进去的,不知道什么原因啊… 查看全部问答> |
|
小弟是初学者,刚刚学习Verilog不久, 想请问一道题目:如何用verilog 编写 频率可以控制的信号发生器(正弦或预先) 麻烦专家给出详细且具体的解答,万分感谢!!… 查看全部问答> |
|
《植物大战僵尸》的移植版本一直层出不穷,这版《植物大战僵尸》牛的是用了数万行JS代码纯手写的,而且背后作者还是辣妈…… 试想,可能我们周围还有很多像她这样的人:他们低调的活跃在网页开发或网页设计领域,他们身怀绝技却不为人所知 ...… 查看全部问答> |
|
#include \"main.h\"extern uchar initdata[15];extern uchar txdata[32];uchar temp,bytecnt1,bitcnt,bitcnt1,tempi;//**************************延时********************void delay500ns(void){ _NOP();}//********************** ...… 查看全部问答> |
|
本帖最后由 辛昕 于 2014-2-16 01:49 编辑 想了想,这个问题其实可以简化为 1.一个精密电流源; 2.一个精密电阻; 3.一个精密AD 再精密的东西都存在一定的误差范围。 那么,我该如何处理最后的结果 并评价其中 精密电阻 的 精度是否达标呢 ...… 查看全部问答> |
|
本帖最后由 dontium 于 2015-1-23 11:46 编辑 示波器可以使操作者观察到时域的噪声波形,大部分不同类型的噪声具有截然不同的波形,可根据波形来判定是何种类型的噪声主导。 模拟示波器的一个缺点就是不能捕获低频噪声(1/f) 数字示波器可以捕 ...… 查看全部问答> |




