×
嵌入式 > 嵌入式开发 > 详情

MSP430单片机指令周期小谈

发布时间:2020-09-03 发布时间:
|
MSP430的时钟周期(振荡周期)、机器周期、指令周期之间的关系

时钟周期也称为振荡周期:定义为时钟脉冲的倒数(时钟周期便是直接供内部CPU使用的晶振的倒数 , 例如12M的晶振 , 它的时钟周期便是1/12us) , 是电脑中的最基本的、最小的时间单位 。 在一个时钟周期内 , CPU仅完成一个最基本的动作 。 时钟脉冲是电脑的基本工作脉冲 , 控制着电脑的工作节奏 。 时钟频率越高 , 工作速度就越快 。

机器周期:在电脑中 , 常把一条指令的执行过程划分为若干个阶段 , 每一个阶段完成一项工作 。 每一项工作称为一个基本操作 , 完成一个基本操作所需要的时间称为机器周期 。 8051系列单片机的一个机器周期由6个S周期(状态周期)组成 。 一个S周期=2个时钟周期 , 所以8051单片机的一个机器周期=6个状态周期=12个时钟周期 。

指令周期:执行一条指令所需要的时间 , 基本由若干个机器周期组成 。 指令不同 , 所需的机器周期也不同 。

专用知识:

430中 , 一个时钟周期 = MCLK晶振的倒数 。 假如MCLK是8M , 则一个时钟周期为1/8us;

一个机器周期 = 一个时钟周期 , 即430每个动作都能完成一个基本操作;

一个指令周期 = 1~6个机器周期 , 详细依据详细指令而定 。

另:指令长度 , 只是一个存储单位与时间没有必然关系 。

MSP430依据型号的不同最多可以选择使用3个振荡器 。 我们可以依据需要选择合适的振荡频率并可以在不需要时随时关闭振荡器以节省功耗 。 这3个振荡器分别为:

(1)DCO 数控RC振荡器 。 它在芯片内部不用时可以关闭 。 DCO的振荡频率会受周围环境温度和MSP430工作电压的影响且同一型号的芯片所产生的频率也不相同 。 但DCO的调节功能可以改善它的性能他的调节分为以下3步:a:选择BCSCTL1.RSELx断定时钟的标称频率;b:选择DCOCTL.DCOx在标称频率基础上分段粗调;c:选择DCOCTL.MODx的值进行细调 。

(2)LFXT1 接低频振荡器 。 典型为接32768HZ的时钟振荡器此时振荡器不需要接负载电容 。 也可以接450KHZ~8MHZ的标准晶体振荡器此时需要接负载电容 。

(3)XT2 接450KHZ~8MHZ的标准晶体振荡器 。 此时需要接负载电容不用时可以关闭 。

低频振荡器主要用来降低能量消耗如使用电池供电的系统高频振荡器用来对事件做出快速反应或者供CPU进行大量运算 。 当然高端430还有锁频环(FLL)及FLL+等模块 , 但是初步不用考虑那么多 。

MSP430的3种时钟信号:MCLK系统主时钟;SMCLK系统子时钟;ACLK辅助时钟 。

(1)MCLK系统主时钟 。 除了CPU运算使用此时钟以外外围模块也可以使用 。 MCLK可以选择任何一个振荡器所产生的时钟信号并进行1、2、4、8分频作为其信号源 。

(2)SMCLK系统子时钟 。 供外围模块使用 。 并在使用前可以通过各模块的寄存器实现分频 。 SMCLK可以选择任何一个振荡器所产生的时钟信号并进行1、2、4、8分频作为其信号源 。

(3)ACLK辅助时钟 。 供外围模块使用 。 并在使用前可以通过各模块的寄存器实现分频 。 但ACLK只能由LFXT1进行1、2、4、8分频作为信号源 。

PUC复位后MCLK和SMCLK的信号源为DCODCO的振荡频率默认为800KHZ 。 ACLK的信号源为LFXT1 。

MSP430内部含有晶体振荡器失效监测电路监测LFXT1(工作在高频模式)和XT2输出的时钟信号 。 当时钟信号丢失50us时监测电路捕获到振荡器失效 。 假如MCLK信号来源LFXT1或者XT2那么MSP430自动把MCLK的信号切换为DCO这样可以确保程序继续运行 。 但MSP430不对工作在低频模式的LFXT1进行监测 。

为了实现详细的时钟可以设置跟时钟相关的寄存器 , 在低端430中是DCOCTL、BCSCTL1和BCSCTL2三个寄存器 。 而对于高端的430 , 则要考虑SCFI0、SCFQCTL、FLL_CTL0、FLL_CTL1和BTCTL等几个寄存器 。 详细设置 , 参看DataSheet 。

单片机上电后 , 假如不对时钟系统进行设置 , 默认800 kHz的DCOCLK为MCLK和SMCLK的时钟源 , LFXTl接32768 Hz晶体 , 工作在低频模式(XTS=O)作为ACLK的时钟源 。 CPU的指令周期由MCLK决定 , 所以默认的指令周期便是1/800 kHz="1".25μs 。 要得到lμs的指令周期需要调整DCO频率 , 即MCLK=1 MHz , 只需进行如下设置:BCSCTLl=XT20FF+RSEL2;

//关闭XT2振荡器 , 设定DCO频率为1 MHz

DCOCTL=DCO2



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
一只老鸟的嵌入式ARM学习心得