[转]MSP430学习心得---时钟
时钟初始化和GPIO
概述:
本实验的目的是了解用于执行对MSP430 Value Line设备的初始化过程的步骤。在这个练习中,您将编写初始化代码,并运行该设备使用各种时钟资源。
1、写初始化代码
2、运行CPU的MCLK的来源方式:VLO 、32768晶体、DCO
3、主体程序部分
4、观察LED闪光灯速度
MSP430时钟:
1、在MSP430单片机中一共有三个或四个时钟源:
(1)LFXT1CLK,为低速/高速晶振源,通常接32.768kHz,也可以接(400kHz~16Mhz);
(2)XT2CLK,可选高频振荡器,外接标准高速晶振,通常是接8Mhz,也可以接(400kHz~16Mhz);
(3)DCOCLK,数控振荡器,为内部晶振,由RC震荡回路构成;
(4)VLOCLK,内部低频振荡器,12kHz标准振荡器。
2、在MSP430单片机内部一共有三个时钟系统:
(1)ACLK,Auxiliary Clock,辅助时钟,通常由LFXT1CLK或VLOCLK作为时钟源,可以通过软件控制更改时钟的分频系数;
(2)MCLK,Master Clock,系统主时钟单元,为系统内核提供时钟,它可以通过软件从四个时钟源选择;
(3)SMCLK,Sub-Main Clock,系统子时钟,也是可以由软件选择时钟源。
Basic Clock Module Registers(基础时钟寄存器)
DCO control register DCOCTL
Basic clock system control 1 BCSCTL1
Basic clock system control 2 BCSCTL2
Basic clock system control 3 BCSCTL3
SFR interrupt enable register 1 IE1
SFR interrupt flag register 1 IFG1
3、MSP430的时钟设置包括3个寄存器,DCOCTL、BCSCTL1、BCSCTL2、BCSCTL3
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最高。
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 <msp430g2231.h>
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗定时器
P1DIR = 0x40; // P1.6 配置输出
P1OUT = 0; // 关闭LED
BCSCTL3 |= LFXT1S_2; // LFXT1 = VLO
IFG1 &= ~OFIFG; // 清除OSCFault 标志
__bis_SR_register(SCG1 + SCG0); // 关闭 DCO
BCSCTL2 |= SELM_3 + DIVM_3; // MCLK = VLO/8
while(1)
{
P1OUT = 0x40; // 开启LED
_delay_cycles(100);
P1OUT = 0; // 关闭 LED
_delay_cycles(5000);
}
}
2、CPU运行在晶振(32768Hz)时钟下:
晶体频率为32768赫兹,约3倍的VLO。如果我们在前面的代码中使用晶振,指示灯应闪烁大约每秒一次。你知道为什么32768赫兹是一个标准?这是因为这个数字是2的15次方,因此很容易用简单的数字计数电路,以每秒一次获得率 ——手表和其他时间时基。认识到ACLK来自外部晶振时钟。
#include <msp430g2231.h>
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗定时器
P1DIR = 0x41; // P1.0 和P1.6配置输出
P1OUT = 0x01; // 开启P1.0
BCSCTL3 |= LFXT1S_0; // LFXT1 = 32768Hz 晶振
while(IFG1 & OFIFG)
{
IFG1 &= ~OFIFG; // 清除 OSCFault 标志
_delay_cycles(100000); // 为可见的标志延时
}
P1OUT = 0; // 关闭P1
__bis_SR_register(SCG1 + SCG0); // 关闭 DCO
BCSCTL2 |= SELM_3 + DIVM_3; // MCLK = 32768/8
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 <msp430g2231.h>
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗定时器
if (CALBC1_1MHZ ==0xFF || CALDCO_1MHZ == 0xFF)
{
while(1); // If cal const erased, 挂起
}
BCSCTL1 = CALBC1_1MHZ; // Set range
DCOCTL = CALDCO_1MHZ; //设置DCO模式
P1DIR = 0x41; // P1.0 和P1.6配置输出
P1OUT = 0x01; // P1.0 开启
BCSCTL3 |= LFXT1S_0; // LFXT1 = 32768Hz
while(IFG1 & OFIFG)
{
IFG1 &= ~OFIFG; // 清除OSCFault 标志
_delay_cycles(100000); // 为可见标志延时
}
P1OUT = 0; // P1.6 关闭
// __bis_SR_register(SCG1 + SCG0); // 关闭DCO
BCSCTL2 |= SELM_0 + DIVM_3; // MCLK = DCO
while(1)
{
P1OUT = 0x40; // P1.6 开启
_delay_cycles(100);
P1OUT = 0; / / P1.6 关闭
_delay_cycles(5000);
}
}
4、CPU运行在DCO时钟下:
最慢的频率,我们可以运行DCO约在1MHz(这也是默认速度)。因此,我们将开始切换MCLK到DCO下。在大多数系统中,你会希望在VLO或者是晶振下运行ACLK。由于ACLK在我们目前的代码是在VLO上运行,我们会打开DCO运行。
#include <msp430g2231.h>
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗定时器
if (CALBC1_1MHZ ==0xFF || CALDCO_1MHZ == 0xFF)
{
while(1); // If cal const erased,挂起
}
BCSCTL1 = CALBC1_1MHZ; // Set range
DCOCTL = CALDCO_1MHZ; // 设置DCO模式
P1DIR = 0x40; // P1.6 配置输出
P1OUT = 0; // P1关闭
BCSCTL3 |= LFXT1S_2; // LFXT1 = VLO
IFG1 &= ~OFIFG; // 清除 OSCFault 标志
//__bis_SR_register(SCG1 + SCG0); // 关闭DCO
BCSCTL2 |= SELM_0 + DIVM_3; // MCLK = DCO/8
while(1)
{
P1OUT = 0x40; // P1.6 关闭
_delay_cycles(100);
P1OUT = 0; // P1.6 开启
_delay_cycles(5000);
}
}
转载于:https://www.cnblogs.com/sky1991/archive/2012/08/19/2646433.html
[转]MSP430学习心得---时钟相关推荐
- MSP430学习心得
MSP430学习心得 当初英国留学,第一次接触到MSP430这种类型的单片机,学习过程中遇到了各种问题,现在回想起来,如果当初有一位引路人的话,我当年的学习过程也许会轻松许多吧. 遥记得EE312这门 ...
- STM32学习心得二十一:实时时钟RTC和备份寄存器BKP特征、原理及相关实验代码解读
记录一下,方便以后翻阅~ 主要内容 1) RTC特征与原理: 2) BKP备份寄存器特征与原理: 3) RTC常用寄存器+库函数介绍: 4) 相关实验代码解读. 实验内容: 因为没有买LCD屏,所以计 ...
- 【嵌入式】MSP430系统实时时钟RTC学习日志(完善中)
目录 MSP430系统实时时钟RTC [时钟初始化]系统时钟初始化需要注意的问题 MSP430F149时钟源选择(部分转) MSP430 系统时钟 ACLK.MCLK.SMCLK [MSP430时钟] ...
- [转]verilog语法学习心得
verilog语法学习心得 1.数字电路基础知识: 布尔代数.门级电路的内部晶体管结构.组合逻辑电路分析与设计.触发器.时序逻辑电路分析与设计 2.数字系统的构成: 传感器 AD 数字处理器 D ...
- 【12月原创】RT-thread - 柿饼UI学习心得分享
柿饼UI学习心得分享(2) 概述 介绍: Persimmon 是一套运行在RT-Thread嵌入式实时操作系统上的图形用户组件界面,用于提供图形界面的用户交互. 它采用C++语言编写,基于C语言实现的 ...
- STM32学习心得十九:电容触摸按键实验及相关代码解读
记录一下,方便以后翻阅~ 主要内容 1) 电容触摸按键原理: 2)部分实验代码解读. 实验内容 手触摸按键后,LED1灯翻转. 硬件原理图 上图,TPAD与STM_ADC用跳线帽相连,即TPAD与PA ...
- STM32学习心得十八:通用定时器基本原理及相关实验代码解读
记录一下,方便以后翻阅~ 主要内容: 1) 三种定时器分类及区别: 2) 通用定时器特点: 3) 通用定时器工作过程: 4) 实验一:定时器中断实验补充知识及部代码解读: 6) 实验二:定时器PWM输 ...
- 关于STM32F105 双CAN口通信的一些学习心得
在项目中用到stm32f105芯片,需要使用到两个CAN口进行通讯,以下是在运行调试过程中出现的问题以及一些解决方法和学习心得. 对GPIO口进行设置 在这里RX使用的是上拉输入,TX是推免输出.这里 ...
- STM32学习心得二十六:DAC数模转换实验
记录一下,方便以后翻阅~ 主要内容: 1) DAC数模转换原理: 2) 寄存器和库函数介绍: 3) 相关实验代码解读. 实验功能:系统启动后,按WK_UP键,输出电压加200点,对应电压值200*3. ...
最新文章
- Android Studio打包生成APK
- 随机森林算法参数解释及调优 转胡卫雄 RF模型可以理解成决策树模型嵌入到bagging框架,因此,我们首先对外层的bagging框架进行参数择优,然后再对内层的决策树模型进行参数择优
- 基于Xml 的IOC 容器-创建容器
- linux lcd显示流程,求助 armlinux中实现lcd显示
- HTML/CSS常用标签属性及样式
- wamp 下的mysql密码_wamp下更改mysql密码
- 最大值、数据排序、九九乘法表、杨辉三角
- GitKraKenSetup工具——小章鱼
- Java快逸报表展现demo_快逸报表导出成XML文件
- mysql nlssort函数_Oracle中 nls_sort 和 nlssort 排序功能
- 17.	Zigbee应用程序框架开发指南 - 使用Ember AppBuilder设计应用程序
- django实现证件照换底色后端和小程序(第三周学习记录)
- 【Unity3D实战】零基础一步一步教你制作酷跑类游戏(1)
- x86架构学习内存管理的单元
- 什么是PON(无源光纤网络)、PON的发展及演进
- oracle dba导入,“只有DBA才能导入由其他DBA导出的文件”各种解决办法
- 鲁迅名言——警醒自己
- c语言控制led数码管,数码管LED
- 架设网站php,初次架设PHP网站
- Chu-LiuEdmonds算法之无环解析
热门文章
- centos内核引导参数
- windows环境下部署Tomcat到服务器
- 【CSS3】Advanced3:Universal, Child, and Adjacent Selectors
- main(int argc,char *argv[ ],char *env)参数详解
- Python中猜数字游戏
- 单选框加了css后显示不出来,layui radio 单选框 效果 显示不来 解决方法
- kaggle实战笔记_1.数据处理
- python 身体BMI指数判断
- Cosmos分布式网络解决方案Althea推出以太坊Cosmos跨链桥
- SAP License:STMS权限