完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
2个回答
|
|
1、在MSP430单片机中一共有三个时钟源:
一个LFXT1CLK,为低速/高速晶振源,通常接32.768khz,也可以接(400khz~8Mhz); 一个为XT2CLK,外接标准高速晶振,通常是接8Mhz,也可以接(400khz~8Mhz); 还有一个叫DCOCLK,为内部晶振,有RC震荡回路构成。 2、在MSP430单片机内部一共有三个时钟系统: 一个为ACLK,通常由LFXT1CLK作为时钟源,可以通过软件控制改时钟的分频系数树; 一个为MCLK(Main CLK)一听就知道是主时钟单元,为系统内核提供时钟,它可以通过软件从三个时钟源选择; 还有一个为SMCLK,称作辅助主时钟,也是可以由软件选择时钟源。 Basic Clock Module Registers(基础时钟寄存器) DCO control register Basic clock system control 1 Basic clock system control 2 Basic clock system control 3 SFR interrupt enable register 1 SFR interrupt flag register 1 3、MSP430的时钟设置包括3个寄存器,DCOCTL、BCSCTL1、BCSCTL2 DCOCTL,DCO控制寄存器,地址为56H,初始值为60H DCO2 DCO1 DCO0 MOD4 MOD3 MOD2 MOD1 MOD0 DCO0~DCO2: DCO Select Bit,定义了8种频率之一,而频率由注入直流发生器的电流定义。 MOD0~MOD4: Modulation Bit,频率的微调。 一般不需要DCO的场合保持默认初始值就行了。 BCSCTL1,Basic Clock System Control 1,地址为57H,初始值为84H XT2OFF XTS DIVA1 DIVA0 XT5V RSEL2 RSEL1 RSEL0 RSEL0~RSEL2: 选择某个内部电阻以决定标称频率.0最低,7最高。 RSEL0~RSEL2: 选择某个内部电阻以决定标称频率.0最低,7最高。 XT5V: 1. DIVA0~DIVA1:选择ACLK的分频系数。DIVA=0,1,2,3,ACLK的分频系数分别是1,2,4,8; XTS: 选择LFXT1工作在低频晶体模式(XTS=0)还是高频晶体模式(XTS=1)。 XT2OFF: 控制XT2振荡器的开启(XT2OFF=0)与关闭(XT2OFF=1)。 正常情况下把XT2OFF复位就可以了. BCSCTL2,Basic Clock System Control 2,地址为58H,初始值为00H SEM1 SELM0 DIVM1 DIVM0 SELS DIVS1 DIVS0 DCOR DCOR: Enable External Resistor. 0,选择内部电阻;1,选择外部电阻 DIVS0~DIVS1: DIVS=0,1,2,3对应SMCLK的分频因子为1,2,4,8 SELS: 选择SMCLK的时钟源, 0:DCOCLK; 1:XT2CLK/LFXTCLK. DIVM0~1: 选择MCLK的分频因子, DIVM=0,1,2,3对应分频因子为1,2,4,8. SELM0~1: 选择MCLK的时钟源, 0,1:DCOCLK, 2:XT2CLK, 3:LFXT1CLK 我用的时候一般都把SMCLK与MCLK的时钟源选择为XT2。 其它: 1. LFXT1: 一次有效的PUC信号将使OSCOFF复位,允许LFXT1工作,如果LFXT1信号没有用作SMCLK或MCLK,可软件置OSCOFF关闭LFXT1. 2. XT2: XT2产生XT2CLK时钟信号,如果XT2CLK信号没有用作时钟MCLK和SMCLK,可以通过置XT2OFF关闭XT2,PUC信号后置XT2OFF,即XT2的关闭的。 3. DCO振荡器:振荡器失效时,DCO振荡器会自动被选做MCLK的时钟源。如果DCO信号没有用作SMCLK和MCLK时钟信号时,可置SCG0位关闭DCO直流发生器。 4. 在PUC信号后,由DCOCLK作MCLK的时钟信号,根据需要可将MCLK的时钟源另外设置为LFXT1或XT2,设置顺序如下: (1)清OSCOFF/XT2 (2)清OFIFG (3)延时等待至少50uS (4)再次检查OFIFG,如果仍置位,则重复(1)-(4)步,直到OFIFG=0为止。 (5)设置BCSCTL2的相应SELM。 |
|
|
|
实例分析:
1、CPU运行在VLO时钟下: 这是最慢的时钟,在约12千赫兹下运行。因此,我们将通过可视化的LED闪烁的红色慢慢地在约每3秒钟率。 我们可以让时钟系统默认这种状态,设置专门来操作VLO。我们将不使用任何ALCK外设时钟在此实验室工作, 但你应该认识到,ACLK来自VLO时钟。 #include void main(void) { WDTCTL = WDTPW + WDTHOLD; 关闭看门狗定时器 P1DIR = 0x40; 配置输出 P1OUT = 0; 关闭LED BCSCTL3 |= LFXT1S_2; IFG1 &= ~OFIFG; 清除OSCFault 标志 __bis_SR_register(SCG1 + SCG0); 关闭 DCO BCSCTL2 |= SELM_3 + DIVM_3; while(1) { P1OUT = 0x40; 开启LED _delay_cycles(100); P1OUT = 0; 关闭 LED _delay_cycles(5000); } } 3、CPU运行在晶振(32768Hz)和DCO时钟下: 最慢的频率,我们可以运行DCO约在1MHz(这也是默认速度)。 因此,我们将开始切换MCLK到DCO下。在大多数系统中,你会希望ACLK上运行的VLO或32768赫兹晶振。 由于ACLK在我们目前的代码是在晶体上运行,我们会打开DCO计算。 #include void main(void) { WDTCTL = WDTPW + WDTHOLD; 关闭看门狗定时器 if (CALBC1_1MHZ == 0xFF || CALDCO_1MHZ == 0xFF) { while(1); 挂起 } BCSCTL1 = CALBC1_1MHZ; DCOCTL = CALDCO_1MHZ; 设置DCO模式 P1DIR = 0x41; 和P1.6配置输出 P1OUT = 0x01; 开启 BCSCTL3 |= LFXT1S_0; while(IFG1 & OFIFG) { IFG1 &= ~OFIFG; 清除OSCFault 标志 _delay_cycles(100000); 为可见标志延时 } P1OUT = 0; 关闭 // __bis_SR_register(SCG1 + SCG0); 关闭DCO BCSCTL2 |= SELM_0 + DIVM_3; while(1) { P1OUT = 0x40; 开启 _delay_cycles(100); P1OUT = 0; 关闭 _delay_cycles(5000); } } |
|
|
|
只有小组成员才能发言,加入小组>>
888 浏览 0 评论
1200 浏览 1 评论
2577 浏览 5 评论
2913 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2775 浏览 6 评论
keil5中manage run-time environment怎么是灰色,不可以操作吗?
1248浏览 3评论
227浏览 2评论
501浏览 2评论
410浏览 2评论
M0518 PWM的电压输出只有2V左右,没有3.3V是怎么回事?
489浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-2-2 19:46 , Processed in 1.146942 second(s), Total 79, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号