当前位置:首页 > 单片机 > 单片机
[导读]时钟初始化和GPIO概述:本实验的目的是了解用于执行对MSP430 Value Line设备的初始化过程的步骤。在这个练习中,您将编写初始化代码,并运行该设备使用各种时钟资源。1、写初始化代码2、运行CPU的MCLK的来源方式:VL

时钟初始化和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

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

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

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); // 为可见标志延时

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

在微控制器领域,MSP430与STM32无疑是两颗璀璨的明星。它们各自凭借其独特的技术特点和广泛的应用领域,在市场上占据了重要的位置。本文将深入解析MSP430与STM32之间的区别,探讨它们在不同应用场景下的优势和局限...

关键字: MSP430 STM32 单片机

香港2022年7月7日 /美通社/ -- 寿康集团有限公司(“寿康集团”或“本公司”及其附属公司,统称“本集团”;股份代号:0575.HK)旗下全资附属公司、并以香港为基地的人工智能创新公司及衰老与长寿深层生物...

关键字: 时钟 VI GE EV

摘 要:为了能通过串口采集电能参数,完成一种基于串口的三相电能采集设备的研制,设计了电能采集设备的硬件和软件部分。其中硬件采用MCU+专用电能计量芯片的结构,结构简单;软件则用于实现输入、输出、三相电能参数的采集和串行通...

关键字: 电能采集 ATT7022B MSP430 串口

文章转自知乎[MIPI自学笔记],作者IEEE1364https://zhuanlan.zhihu.com/p/926820471 MIPI概述MIPI是MobileIndustryProcessorInterface的...

关键字: MIPI LAN 数据流 时钟

1、为设计执行综合时使用的各种设计约束是什么?1.1、创建时钟(频率、占空比)。1.2、定义输入端口的transition-time要求1.3、指定输出端口的负载值1.4、对于输入和输出,指定延迟值(输入延迟和输出延迟)...

关键字: 数字芯片 时钟 WIRE CK

如今,SoCs正变得越来越复杂,数据经常从一个时钟域传输到另一个时钟域。上图信号A由C1时钟域触发,被C2时钟域采样。根据这两个时钟之间的关系,在将数据从源时钟传输到目标时钟时,可能会出现不同类型的问题,并且这些问题的解...

关键字: 时钟 触发器 同步器 SETUP

本文主要介绍各种类型的跨时钟域问题。同步时钟是指具有已知相位和频率关系的时钟。这些时钟本质上是来自同一时钟源。根据相位和频率关系,可分为以下几类:具有相同频率和零相位差的时钟具有相同频率和固定相位差的时钟具有不同频率和可...

关键字: 异步 时钟 相位差 SETUP

跨时钟域验证可分为结构验证和功能验证两类。结构验证确保在需要的地方添加了适当的同步逻辑。功能验证确保已添加的逻辑实现了预期的功能。仅通过执行结构验证,就可以检测到许多CDC问题。这些检查比功能验证更简单、更快。因此,验证...

关键字: 时钟 数据传输 信号 TE

来源:射频百花谭规范很重要工作过的朋友肯定知道,公司里是很强调规范的,特别是对于大的设计(无论软件还是硬件),不按照规范走几乎是不可实现的。逻辑设计也是这样:如果不按规范做的话,过一个月后调试时发现有错,回头再看自己写的...

关键字: VERILOG 时钟 计数器 仿真验证

中断服务程序

关键字: 时钟 中断程序
关闭
关闭