一个机器周期等于()个单片机振荡周期期=() 个状态周期

时钟周期、振荡周期、机器周期、CPU周期、状态周期、指令周期、总线周期、任务周期
计算机系统有一系列的“周期”概念,区别、联系地理解这些概念至关重要。以下对时钟周期、振荡周期、机器周期、CPU周期、状态周期、指令周期、总线周期、任务周期进行简单介绍。
在电子技术中,脉冲信号是一个按一定电压幅度,一定时间间隔连续发出的脉冲信号。脉冲信号之间的时间间隔称为周期;而将在单位时间(如1秒)内所产生的脉冲个数称为频率。频率是描述周期性循环信号(包括脉冲信号)在单位时间内所出现的脉冲数量多少的计量名称;频率的标准计量单位是Hz(赫)。电脑中的系统时钟就是一个典型的频率相当精确和稳定的脉冲信号发生器。
时钟周期,一般也称振荡周期(如果晶振的输出没有经过分频就直接作为cpu的工作时钟,则时钟周期就等于振荡周期),即CPU的晶振的工作频率的倒数,是计算机中最基本的、最小的时间单位。通常成为节拍脉冲或者T周期。对于单片机时钟周期,时钟周期是单片机的基本时间单位,两个振荡周期(始终周期)组成一个状态周期。
振荡周期(oscillating period)
  在衰减振荡中,两个相邻同方向峰值之间的时间称为振荡周期Tp,振荡频率2π/Tp。在相同衰减比下,振荡周期越短或振荡频率越高,则回复时间越短,因此振荡周期(频率)反映系统响应快慢的指标。
机器周期,一般也叫CPU周期。在计算机中,为了便于管理,常把一条指令的执行过程划分为若干个阶段(如,取指令、存储器读、存储器写等),每一阶段完成一项工作(称为一个基本操作)。完成一个基本操作所需要的时间称为机器周期。一般情况下,一个机器周期由若干个S周期(状态周期)组成。
  又称机器周期,CPU周期定义为从内存读取一条指令字的最短时间。一个指令周期常由若干CPU周期构成。
在8051单片机中把一个时钟周期定义为一个节拍(用P表示),二个节拍定义为一个状态周期(用S表示)。
8051系列单片机的一个机器周期同6个S周期(状态周期)组成。一个机器周期包含6个状态周期(S1-S6),而一个状态周期又包含两个时钟振荡周期(简称时钟周期)。例:8051单片机的机器周期由6个状态周期组成,也就是说一个机器周期=6个状态周期=12个时钟周期。
  指令周期是执行一条指令所需要的时间,即CPU从内存取出一条指令并执行这条指令的时间总和。一般由若干个机器周期组成,从取指令、分析指令到执行完所需的全部时间。指令不同,所需的机器周期数也不同。对于一些简单的的单字节指令,在取指令周期中,指令取出到指令寄存器后,立即译码执行,不再需要其它的机器周期。对于一些比较复杂的指令,例如转移指令、乘法指令,则需要两个或者两个以上的机器周期。通常含一个机器周期的指令称为单周期指令,包含两个机器周期的指令称为双周期指令。
总线周期通常指的使通过总线完成一次内存读写操作或完成一次输入输出设备的读写操作所必须的时间。由于存储器和I/O端口是挂接在总线上的,CPU对存储器和I/O接口的访问,是通过总线实现的。通常把CPU通过总线对微处理器外部(存储器或I/O接口)进行一次访问所需时间称为一个总线周期。一个总线周期一般包含4个时钟周期,这4个时钟周期分别称4个状态即T1状态、T2状态、T3状态和T4状态。
周期任务是指计算机系统按一定周期达到并请求运行,每次请求称为任务的一个任务实例,任务实例所属任务的起始时刻称为该任务实例的到达时刻,任务实例被置为就绪态的时刻称为该任务实例的释放时刻。
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!msp430时钟周期、机器周期、指令周期定义及关系
  在学习计算机组成原理,单片机,嵌入式等课程时,经常会遇到各种周期,大致有如下几种周期:
  时钟周期、状态周期
  节拍周期、振荡周期
  指令周期、机器周期、总线周期
  这些周期之间有很多联系,一般都是倍数关系,由最原始的周期分频得到
  1.时钟周期、振荡周期、节拍周期
  时钟周期又叫做振荡周期、节拍周期,定义为时钟晶振频率的倒数。时钟周期是计算机中最基本的、最小的时间单位。在一个时钟周期内,CPU仅完成一个最基本的动作。 例如晶振为12M,则时钟周期为1/12us。又可以被定义为节拍。
  2.状态周期
  状态周期是时钟周期的2倍,由时钟周期二分频得到。
  3.机器周期
  在计算机中,为了便于管理,常把一条指令的执行过程划分为若干个阶段,每一阶段完成一项工作。例如,取指令、存储器读、存储器写等,这每一项工作称为一个基本操作。完成一个基本操作所需要的时间称为机器周期。一般情况下,一个机器周期由若干个S周期(状态周期)组成。比如,取值周期,取数周期。在80C51内部,机器周期一般包括于6个状态周期,12个时钟周期。例如24M的晶振,机器周期为12/24M秒。
  4.指令周期
  指令周期是指取出并完成一条指令所需的时间,一般由若干个机器周期组成,分为单周期指令,双周期指令和多周期指令。
  对于一些简单的的单字节指令,在取指令周期中,指令取出到指令寄存器后,立即译码执行,不再需要其它的机器周期。对于一些比较复杂的指令,例如转移指令、乘法指令,则需要两个或者两个以上的机器周期。
  5.总线周期
  由于存贮器和I/O端口是挂接在总线上的,CPU对存贮器和I/O接口的访问,是通过总线实现的。通常把CPU通过总线对微处理器外部(存贮器或 I/O接口)进行一次访问所需时间称为一个总线周期。一个总线周期一般包含4个时钟周期,这4个时钟周期分别称4个状态即T1状态、T2状态、T3状态和 T4状态。
  那MSP430的时钟周期 机器周期 指令周期有什么关系呢?
  在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的信号源为DCO,DCO的振荡频率默认为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
关注电子发烧友微信
有趣有料的资讯及技术干货
下载发烧友APP
打造属于您的人脉电子圈
关注发烧友课堂
锁定最新课程活动及技术直播
早年TI隆重推出了基于ARM Cortex-M4F内核的32位低功耗MCU产品MSP432。而这两者...
TI近日推出采用CapTIvate(TM)技术的MSP430(TM)微控制器(MCU)系列产品,为成本敏感型应用...
您是否曾有看似超越现有技术好几年的想法?是否因为无法找到可满足需求的 MCU 而将草稿设计遗忘?请拂...
本文探讨了使用MSP430F5xxx实现ETC系统中实时HDLC编解码的方法。MSP430F5xxx...
基于MSP430单片机的GPS和CDMA双接收计时系统,是传统钟表计时技术与现代时频、微电子、通讯、...
TI 的蓝牙 + MSP430 音频散热器参考设计可供客户用于创建各种低端、低功耗音频解决方案的应用...
物联网节点必须在不更换一次电池的情况下运行数年才能最大程度地减少维护工作。对于某些类型的系统,节点只...
MSP430系列单片机是美国德州仪器(TI)1996年开始推向市场的一种16位超低功耗、具有精简指令...
简介 工业以太网交换机和服务器在功率较大时会产生较多热量,通常需要进行散热来保证系统正常工作,一般会...
看门狗定时器(WDT)是MSP430系列单片机中用于系统监测和内部定时使用的一种模块,是一个16位的...
随着智能电网建设的不断推进,智能电能表费控系统受到国家电网的重视,为进一步提高电能表费控系统的可靠性...
电子设备产品种类繁多,计算机、电视机、手机乃至可穿戴设备,这些产品在使用过程中有大量的能耗损失,及时...
本系统实现输入直流电压15V,输出交流电压有效值10V,额定功率10W,交流电压频率在20至100H...
心率是描述心动周期的专业术语,指心脏每分钟跳动的次数,以第一声音为准。心率测量是常用的医学检查项目之...
随着科技的发展和互联网技术的普及,以及智能手机的普及,移动互联网技术正在以迅雷不及掩耳之势走进人们的...
MSP430 MCU世界里的一则神话, 全球16位MCU最低功耗的标杆,过去20年来从未被超越,是工...
如果你是一位MSP430初学者。希望这些能帮到你吧,这是一个不错的综合问题。如果认为此文章对你有用,...
为了对烧断熔丝的MSP430系列单片机进行程序更新,采用USB转串口芯片PL2303和VB6.0编程...
USB3.0高速数据采集系统,以其5Gbps的带宽和即插即用等优越的性能,越来越受到人们的重视。目前...
MSP430单片机自从2000年问世以来,就以其功能完善、超低功耗、开发简便的特点得到了许多设计人员...
在MSP430选型时,我们主要着重介绍现在较流行使用的FLASH型单片机。因为目前主流单片机也是以F...
电能表外置微型断路器(以下简称:微型断路器)是配合智能电能表实现智能费控功能的关键器件,额定电流相对...
大部分火灾的发生是由于在火灾初期没有及时采取应急防火措施,如果能够有效检测异常火苗或者气体并及时报警...
#include"IRRemote.h" voidmain(void) { //初始化 Initia...
随着人们对汽车辅助驾驶系统智能化要求的提高和汽车电子系统的网络化发展,新型的倒车雷达应能够连续测距并...
本文介绍了单片机的时钟周期、状态周期、机器周期、指令周期这四个周期,并详细解析了定时器的工作原理。
本文主要介绍了MSP430低功耗运行模式原理分析及应用,MSP430系列是一款具有精简指令集的16位...
本文主要介绍了一种基于MSP430单片机编程器的设计,以MSP430F149为核心,主要由键盘、显示...
MSP430系列芯片一般外搭两颗晶振:一颗主频晶振,通常在4~16Mhz中选择;另外一颗时钟晶振,即...
MSP430的输入输出均可以设置上拉和下拉电阻。上下拉是否开启是由REN寄存器决定的,而是上拉还是下...
本文主要以MSP430单片机的端口为中心,先后主要介绍了端口的定义、分类以及端口的作用,最后则详细的...
在实际运用中,很多人使用16位单片机,16位单片机有哪些呢?本文给大家带来16位单片机的介绍
最近学习MSP430,把自己的一些经验分享下,这是我在网上发现的一篇很不错的文章,归纳得很好,简洁明...
作者:美国德州仪器公司华东区工程师 Johnny Guo, Daniel Fang, Martin ...
 MSP430内核采用RISC精简指令结构,整个代码量较少,按照复杂程度指令在几十个到百多不等,代码...
MSP430系列单片机是美国TI公司生产的新一代16位单片机,是一种超低功耗的混合信号处理器(Mix...
BSL(BootstrapLoader)是msp430flash系列独有的一项功能,在程序空间、RO...
通过研究三线串行接口的构成原理,设计了一种基于MSP430单片机和FPGA的三线串行接口测试仪。该测...
CPU的活动状态称为AM(ACTVE MODE)模式。其中AM耗电最大,LPM4耗电最省,仅为0.1...
TI的MSP430系列是一款功耗低、市面流行的SOC结构的CPU,适合做智能仪表。IAR对其支持得很...
头文件包含了单片机内部寄存器的地址定义等。引用此头文件,才能正常对一些寄存器进行读写操作,例如POR...
 使用iar,如果没有头文件,编译肯定通不过,更加不用说继续设计了,本人使用IAR进行msp430开...
MSP430不像51只有有一个外部晶振作为时钟源,MSP430又有3到4个时钟源!外部可接两个晶振,...
SP430 系列单片机基础时钟主要是由低频晶体振荡器,高频晶体振荡器,数字控振荡器(DCO),锁频环...
 我们在程序里对寄存器的设置,也就是对三个振荡器进行设置,时钟振荡器设置好了,还要对时钟模块进行设置...
MSP430系列单片机是一个16位的单 片机,采用了精简指令集(RISC)结构,具有丰富的寻址方式(...
在处理运算时,STM32的速度略快于MSP430,在做浮点运算时,速度远远快于MSP430,在需要复...
几种使用过的单片机比较(个人观点),供选型者和初学者参考51系列单片机使用的人很多,资料很多,根本不...
工业以太网交换机和服务器在功率较大时会产生较多热量,通常需要进行散热来保证系统正常工作。看TI最新带...
安全被越来越多的受到重视,门禁锁越来越普及,而且需求越来越复杂,有几个人必须同时刷卡才能进入;有的只...
最后总经过两天的思考、讨论、总结、检讨···,我们发现了问题的所在,想来想去,这估计是很大一部分初学...
全新 MSP430Ware 采用便利套件的形式提供,囊括了代码范例、产品说明书及其它设计资源,适用于...
这篇应用报告描述了一种低成本,基于 MSP430 LaunchPad Value Line开发工具包...
日前,德州仪器 (TI) 宣布推出 MSP430F563x 和 MSP430F663x 微控制器系列...
TI拥有广泛系列带集成型 LCD 且闪存高达 512KB 的 MSP430 器件组合。现在让我们深入...
2001 年,MSP430产品线推出第一款具有集成型 LCD 的微控制器。自此,TI相继推出强大的产...
不久之前,我们发布了全新的 TI Design 参考设计,展示了一种用于 无线监控电机状态 以确定是...
今年在旧金山召开的IoT世界大会上,TI是IoT世界黑客马拉松比赛的主办者。来自全国各地的制造商齐聚...
TI PLC模块电表应用方案概述 电表侧硬件原理 下面给大家介绍一下,电表侧硬件原理图: 1. 电表...
随着物联网 (IoT) 内器件的互联程度越来越高,并且客户需求也使得固件和软件升级变为重要的产品要求...
电感邻近度传感器可用于LC传感器附近金属的非接触式检测。这些电感式感测解决方案可以实现存在检测和工厂...
对于很多人来说,第一次接触能量采集可能是在早期使用太阳能便携式计算器的时候,虽然如今这种类型的计算器...
在现代仪表设计中,低功耗是必不可少的。不论是测量煤气、水、电或热量,你必须限制流耗,以实现较长的电池...
信号产生部分采用信号发生芯片MAX038,以MSP430单片机为微控制器,进行各种功能操作,完成输出...
没错,当您想到TI 一流微控制器 MSP430 时,低功耗是首先浮现在脑海的特性之一。毕竟,这是就 ...
在上周的《让低功耗 MSP430 的功耗更低》一文中,我们探讨了特别有趣的 MSP430 属性:尽管...
通常而言,电容式触控面板有时会比较难以处理,尤其是在下雨的时候,落下的雨滴与指尖的触感十分相似,而当...
本文介绍的是一种便携式可穿戴血糖仪,主要基于MSP430单片机为核心,葡萄糖氧化酶电极为测试传感器,...
单片机现在可谓是铺天盖地,种类繁多,让开发者们应接不暇,发展也是相当的迅速,从上世纪80年代,由当时...
本文无线充电系统的设计是用线圈耦合方式传递能量,使接收单元接收到足够的电能,以保证后续电路能量的供给...
MSP430(TM)微控制器(MCU)产品营销工程师Dave Smith说:“通常,我们只有在设备停止工作...
该参考设计中包含一个MSP430微控制器(MCU),其作为内务处理型MCU,用来优化移动电源的功耗。...
全新的MCU将产品组合中所采用的集成式铁电随机访问存储器(FRAM)从2KB扩展到了256KB。FR...
对于很多人来说,第一次接触能量采集可能是在早期使用太阳能便携式计算器的时候,虽然如今这种类型的计算器...
  设计基于MSP430F149单片机为主控制单元,CC2530为数据采集单元的温室大棚数据采集系统...
  心电图是心脏疾病诊断的重要工具之一,目前在医院临床中有广泛的应用,给医生诊断病症带来很大的帮助。...
  据初步调查统计,75%的汽车交通事故是由汽车倒车“后视”小良造成的。因此,许多非职业汽车驾驶员很...
 MSP430系列单片机是一款具有精简指令集的16位超低功耗混合型单片机。采用MSP430系列单片机...
  随着科学技术的迅速发展,尤其是电子信息技术的不断更新,医疗卫生事业也逐步深化改革,实现现代化医疗...
  本应用文档介绍了使用MSP430微控制器实现电容触摸转轮和多路独立LED的PWM软件驱动技术。方...
  德州仪器(TI)MSP430系列微控制器,凭借着它的超低功耗在电子行业中占据着举足轻重的行业地位...
  对MSP430系列单片机进行编程的方式有以下3种:利用JTAG接口,利用BSL固件和利用用户自定...
  德州仪器1996年到2000年初,先后推出了31x、32x、33x等几个系列,这些系列具有LCD...
  MSP430 系列是一个 16 位的、具有精简指令集的、超低功耗的混合型单片机,在 1996 年...
事实上,从全局来考虑低功耗设计已经成为了一个越来越迫切的问题。因此,低功耗设计排在电子产品设计的重要...
本文介绍的是一种新的检测系统,选用红外CO传感器和MSP430单片机作为核心信号处理电路,结合数字滤...
介绍一种基于MSP430F2274单片机为核心的智能小车,小车采用超声波测距技术实现自动避障,同时通...
随着控制器、处理器、传感器和发射器成本的降低,任何组装有电子电路和必须与其它系统进行远程通信的的器件...
在TI,我们欢迎那些在业余时间享受发明与创新的创客和爱好者。在德州仪器持续推出的“神级DIY”系列博...
电机的温度检测与控制在工业生产中有着至关重要的作用,目前国内缺乏针对电机转子温度进行实时在线监控的系...
供应链服务
版权所有 (C) 深圳华强聚丰电子科技有限公司
电信与信息服务业务经营许可证:粤B2-下次自动登录
现在的位置:
& 综合 & 正文
指令周期 机器周期 状态周期 振荡时钟周期(时钟周期)
时钟周期:
时钟周期也称为振荡周期,定义为时钟脉冲的倒数(可以这样来理解,时钟周期就是单片机外接晶振的倒数,例如12M的晶振,它的时间周期就是1/12 us),是计算机中最基本的、最小的时间单位。
在一个时钟周期内,CPU仅完成一个最基本的动作。对于某种单片机,若采用了1MHZ的时钟频率,则时钟周期为1us;若采用4MHZ的时钟频率,则时钟 周期为250us。由于时钟脉冲是计算机的基本工作脉冲,它控制着计算机的工作节奏(使计算机的每一步都统一到它的步调上来)。显然,对同一种机型的计算 机,时钟频率越高,计算机的工作速度就越快。
8051单片机把一个时钟周期定义为一个节拍(用P表示),二个节拍定义为一个状态周期(用S表示)。
机器周期:
在计算机中,为了便于管理,常把一条指令的执行过程划分为若干个阶段,每一阶段完成一项工作。例如,取指令、存储器读、存储器写等,这每一项工作称为一个基本操作。完成一个基本操作所需要的时间称为机器周期。一般情况下,一个机器周期由若干个S周期(状态周期)组成。
8051系列单片机的一个机器周期同6个 S周期(状态周期)组成。前面已说过一个时钟周期定义为一个节拍(用P表示),二个节拍定义为一个状态周期(用S表示),8051单片机的机器周期由6个 状态周期组成,也就是说一个机器周期=6个状态周期=12个时钟周期。
例如外接24M晶振的单片机,他的一个机器周期=12/24M 秒;
指令周期:
执行一条指令所需要的时间,一般由若干个机器周期组成。指令不同,所需的机器周期也不同。
对于一些简单的的单字节指令,在取指令周期中,指令取出到指令寄存器后,立即译码执行,不再需要其它的机器周期。对于一些比较复杂的指令,例如转移指令、乘法指令,则需要两个或者两个以上的机器周期。
通常含一个机器周期的指令称为单周期指令,包含两个机器周期的指令称为双周期指令。
总线周期:
由于存贮器和I/O端口是挂接在总线上的,CPU对存贮器和I/O接口的访问,是通过总线实现的。通常把CPU通过总线对微处理器外部(存贮器或 I/O接口)进行一次访问所需时间称为一个总线周期。
总结一下,时钟周期是最小单位,机器周期需要1个或多个时钟周期,指令周期需要1个或多个机器周期;机器周期指的是完成一个基本操作的时间,这个基本操作有时可能包含总线读写,因而包含总线周期,但是有时可能与总线读写无关,所以,并无明确的相互包含的关系。
指令周期:是CPU的关键指标,指取出并执行一条指令的时间。一般以机器周期为单位,分单指令执行周期、双指令执行周期等。现在的处理器的大部分指令(ARM、DSP)均采用单指令执行周期。机器周期:完成一个基本操作的时间单元,如取指周期、取数周期。时钟周期:CPU的晶振的工作频率的倒数。
例子:22.1184MHZ的晶振,它的晶振周期、时钟周期和机器周期分别是多少?
以51为例,晶振22.1184M,时钟周期(晶振周期)就是(1/22.1184)μs,一个机器周期包含12个时钟周期,一个机器周期就是 0.5425μs。一个机器周期一般是一条指令花费的时间,也有些是2个机器周期的指令,DJNZ,是双周期指令.
--------------------------------------------------------
红皮书118页说cpu的操作频率可达,这个频率是机器周期还是指令周期?ARM机器周期跟指令周期有什么对应关系?由于ARM采用的是三级流水线的技术,所有的指令执行都由相同的三个阶段取指,译码,执行,那么所有的指令的执行时间是不是都是相同的?
我的理解是:如果ARM不接pll(即ARM直接采用晶振的周期),ARM的机器周期就是晶振的振荡周期,这两个是等同的,所有的指令的执行时间都是相同的,且都等于晶振周期;如果ARM连接并使能pll,则1/Fcclk就是机器周期,指令的执行频率等于Fcclk。请教高手指点更正,多谢!!
没有机器周期的概念,只有主时钟的概念,它是OLL的输出。如果程序和数据均在片内RAM中,这样计算指令执行时间1、一般指令需1个主时钟时间2、每次跳转增加3个主时钟时间(也许是2个,需要确认)3、从RAM中取一个操作数多增加一个主时钟时间,以次类推4、保存一个结果到RAM中多增加一个主时钟时间,以次类推5、访问片内外设,增加一个外设时钟时间注意伪指令ldr rn,=x需要从ram中取一个操作数。
如果从中运行,启动MAM后,当指令不在MAM缓冲中,需用MAMTIM个周期进行MAM预取指。所以程序跳转的开销是相当大的。
--------------------------------------------------------
8051、ARM和DSP指令周期的测试与分析
本文对三种最具代表性的微控制器(AT89S51单片机、7TDMI核的LPC2114型单片机和TMS320F2812)的指令周期进行了分析和。为了能观察到指令周期,将三种控制器的GPIO口设置为数字输出口,并采用循环不断地置位和清零,通过观察GPIO口的波形变化得到整个循环的周期。为了将整个循环的周期与具体的每一条指令的指令周期对应起来,通过C语言源程序得到汇编语言指令来计算每一条汇编语言的指令周期。
1 AT89S51工作机制及指令周期的   AT89S51单片机的时钟采用内部方式,时钟发生器对振荡脉冲进行2分频。由于时钟周期为振荡周期的两倍(时钟周期=振荡周期P1+振荡周期P2),而1个机器周期含有6个时钟,因此1个机器周期包括12个晶振的振荡周期。取石英晶振的振荡频率为11.059 2 MHz,则单片机的机器周期为12/11.059 2=1.085 1 μs。51系列单片机的指令周期一般含1~4个机器周期,多数指令为单周期指令,有2周期和4周期指令。   为了观察指令周期,对单片机的P1口的最低位进行循环置位操作和清除操作。源程序如下:
main() {   while(1) {     P1=0x01;     P1=0x00;   }
}   采用KEIL uVISION2进行编译、链接,生成可执行文件。当调用该集成环境中的Debug时,可以得到上述源程序混合模式的反汇编代码:     2:main()     3: {     4:while(1)     5:{     6:P1=0x01;   0x000F759001MOVP1(0x90),#0x01     7:P1=0x00;   0x0012 E4CLRA   0xMOVP1(0x90),A     8:}   0x001580EDSJMPmain (C:0003)   其中斜体的代码为C源程序,正体的代码为斜体C源程序对应的汇编语言代码。每行汇编代码的第1列为该代码在器中的位置,第2列为机器码,后面是编译、链接后的汇编语言代码。所有指令共占用6个机器周期(其中“MOV P1(0x90),#0x01”占用2个机器周期,“CLR A”和“MOV P1(0x90),A”各占用1个机器周期,最后一个跳转指令占用2个机器周期),则总的循环周期为6×机器周期=6×1.085 1 μs=6.51 μs。
图1 P1口最低位的波形
  将编译、链接生成的可执行文件到AT89S51的Flash中执行可以得到P1口最低位的波形,如图1所示。整个循环周期为6.1 μs,与上面的分析完全一致。
2 LPC2114工作机制及指令周期的测试   LPC2114是基于ARM7TDMI核的可加密的单片机,具有零等待128 KB的片内Flash,16 KB的SRAM。时钟频率可达60 MHz(晶振的频率为11.059 2 MHz,时钟频率设置为11.059 2×4 =44.236 8 MHz,片内外设频率为时钟频率的1/4,即晶振的频率)。7TDMI核通过使用三级流水线和大量使用内部寄存器来提高指令流的执行速度,能提供0.9 MIPS/MHz的指令执行速度,即指令周期为1/(0.9×44.236 8)=0.025 12 μs,约为25 ns。   为了观察指令周期,将LPC2114中GPIO的P0.25脚设置为输出口,并对其进行循环的置位操作和清除操作。C源程序如下:   #include"config.h"   //P0.25引脚输出   #defineLEDCON0x   intmain(void)   {//设置所有引脚连接GPIO     PINSEL0 = 0x;     PINSEL1 = 0x;     //设置LED4控制口为输出     IO0DIR = LEDCON;     while(1)     {IO0SET = LEDCON;       IO0CLR = LEDCON;     }   return(0); }   采用ADS1.2进行编译、链接,生成可执行文件。当调用AXD Debugger时,可以得到上述源程序的反汇编代码:   main[0xe59f1020]ldrr1,0x   xe3a00000]movr0,#0   xe5810000]strr0,[r1,#0]   xe5810004]strr0,[r1,#4]   xe3a00780]movr0,#0x2000000   xe1c115c0]bicr1,r1,r0,asr #11   xe5810008]strr0,[r1,#8]   xe5810004]strr0,[r1,#4]   xe581000c]strr0,[r1,#0xc]   xeafffffc]b0x4000023c   xe002c000]dcd0xe002c000   每行汇编代码的第1列为该代码在器中的位置,第2列为机器码,后面是编译、链接后的汇编语言代码。循环部分的语句最关键的就是下面3句:   xe5810004]strr0,[r1,#4]   xe581000c]strr0,[r1,#0xc]   xeafffffc]b0x4000023c   在AXD Debugger中,将其调用到RAM中运行程序得到循环部分GPIO的P0.25的输出波形,如图2所示。 从图中可以看出,循环周期中保持为高电平的时间为1350 ns左右,低电平的时间为450 ns左右,即指令“str r0,[r1,#4]”和指令“str r0,[r1,#0xc]”均需350 ns左右,而跳转指令则需100 ns左右。这主要是由于以下原因造成的: ① ARM的大部分指令是单周期的,但是也有一些指令(如乘法指令)是多周期的;② 基于核的微控制器只有加载、存储和指令可以对存储器的数据进行访问,这样从存储器读数据或向存储器写数据要增加1个时钟周期;③ 访问片内外设要增加一个外设时钟周期。当然,每个指令还要有1个时钟周期,跳转时要清空流水线还要另加一定的时钟周期。
图2 GPIO的P0.25脚输出波形
  为了观察乘法指令,特地采用下述汇编语言进行了实验。
首先是没有乘法指令的汇编源程序:
INCLUDELPC2294.INC ;引入头文件
; P0.25引脚控制LED4,低电平点亮
LEDCONEQU0x
EXPORTMAIN
;声明程序代码块
AREALEDCONC,CODE,READONLY
;装载寄存器地址,PINSEL0
MAINLDRR0,=PINSEL0
;设置数据,即设置引脚连接GPIO
STRR1,[R0]; [R0] ← R1
LDRR0,=PINSEL1
STRR1,[R0]
LDRR0,=IO0DIR
LDRR1,=LEDCON
;设置LED控制口为输出
STRR1,[R0]
;设置GPIO控制参数
LOOPLDRR1,=LEDCON
LEDSETLDRR0,=IO0SET
; LED控制I/O置位,即LED4熄灭
STRR1,[R0]
LEDCLRLDRR0,=IO0CLR
; LED控制I/O复位,即LED4点亮
STRR1,[R0]
;无条件跳转到LOOP
  采用ADS1.2进行编译、链接后的汇编代码为: LOOP [0xe3a01780]movr1,#0x2000000 LEDSET[0xe59f0028] ldrr0,0x 400000fc[0xe5801000]strr1,[r0,#0] LEDCLR[0xe59f0024] ldrr0,0x4000012c xe5801000]strr1,[r0,#0] xeafffff9] bLOOP
  在AXD Debugger中,将其调用到RAM中运行程序得到循环部分的GPIO的P0.25脚输出波形,如图3所示。 从图中可以看出,循环周期中保持为高电平的时间为450 ns左右,低电平的时间为550 ns左右。 [资源来自"岁月联盟"]
本文来自"岁月联盟"
图3 GPIO的P0.25脚输出波形2
  在上例的LOOP循环部分中加入乘法指令,即将循环部分改为:
LOOP LDRR1,=LEDCON
LEDSETLDRR0,=IO0SET
STRR1,[R0]
MOVR2,#0x0234
MULR2,R1,R2
LEDCLRLDRR0,=IO0CLR
STRR1,[R0]
  采用ADS1.2进行编译、链接后的汇编代码为: LOOP[0xe3a01780]movr1,#0x2000000 LEDSET[0xe59f0030]ldrr0,0x 400000fc[0xe5801000]strr1,[r0,#0] xe3a02f8d]movr2,#0x234 xe0020291] mulr2,r1,r2 LEDCLR[0xe59f0024] ldrr0,0x xe5801000]strr1,[r0,#0] xeafffff7]bLOOP
  在AXD Debugger中,将其调用到RAM中运行程序得到循环部分的GPIO的P0.25脚输出波形,如图4所示。 从图中可以看出,循环周期中保持为高电平的时间为550 ns左右,低电平的时间为550 ns左右。与上例比较可知,多出的MUL乘法指令和MOV传送指令共占用100 ns。   综上所述,得出如下结论: 当指令放在RAM中运行时,指令“str r0,[r1,#4]”和指令“strr0,[r1,#0xc]”均需350 ns左右,相当于14个指令周期;指令“ldr r0,0x4000012c”的执行时间为100 ns,相当于4个指令周期;MUL乘法指令和MOV传送指令共占用100ns,相当于4个指令周期;跳转指令共占用100 ns,相当于4个指令周期。
3 TMS320F2812工作机制及指令周期测试   TMS320F2812是TI公司的一款用于控制的高性能和高性价比的32位定点DSP芯片。该芯片最高可在150 MHz主频下工作(本文将其设置到100 MHz),并带有18K×16位0等待周期片上SRAM和128K×16位片上Flash(存取时间为36 ns)。TMS320F2812采用哈佛总线结构,即在同一个时钟周期内可同时进行一次取指令、读数据和写数据的操作,同时TMS320F2812还通过采用8级流水线来提高系统指令的执行速度。   为了观察指令周期,对TMS320F2812的GPIOA0进行循环的置位操作和清除操作。C源程序如下: #include "DSP28_Device.h" void main(void) {   InitSysCtrl();/*初始化系统*/   DINT;/*关中断*/   IER = 0x0000;   IFR = 0x0000;   InitPieCtrl();/*初始化PIE控制寄存器*/   InitPieVectTable();/*初始化PIE矢量表*/   InitGpio();/*初始化EV*/   EINT;   ERTM;   for(;;) {     GpioDataRegs.GPADAT.all=0xFFFF;     GpioDataRegs.GPADAT.all=0xFFFF;     GpioDataRegs.GPADAT.all=0xFFFF;     GpioDataRegs.GPADAT.all=0x0000;     GpioDataRegs.GPADAT.all=0x0000;     GpioDataRegs.GPADAT.all=0x0000;   } }
图4 GPIO的P0.25脚输出波形3
  其中最重要的是要对通用输入/输出进行初始化和确定系统CPU时钟。其中系统的时钟通过PLL设定为100 MHz,而初始化 InitGpio() 的源程序为: #include "DSP28_Device.h" void InitGpio(void) { EALLOW;   //多路复用器选为数字I/O   GpioMuxRegs.GPAMUX.all=0x0000;   //GPIOAO为输出,其余为输入   GpioMuxRegs.GPADIR.all=0x0001;   GpioMuxRegs.GPAQUAL.all=0x0000;   EDIS; }
  通过在主程序for(;;)的地方加断点,可以很容易找到上面主程序中循环部分程序编译后的汇编指令:   3F8011 L1:   3F8011761FMOVWDP,#0x01C3   3F MOV@32,#0xFFFF   3F MOV@32,#0xFFFF   3F MOV@32,#0xFFFF   3F MOV@32,#0xFFFF   3F801B 2820 MOV@32,#0xFFFF   3F801D 2820 MOV@32,#0xFFFF   3F801F 2B20 MOV@32,#0   3F MOV@32,#0   3F MOV@32,#0   3F8022 6FEF SBL1,UNC
  其中第1列为程序在RAM中的位置,第2列为机器码,后面就是汇编语言程序。指令“MOV @32,#0xFFFF”使GPIO输出高电平,指令“MOV @32,#0”使GPIO输出低电平。其中含有6个使GPIOA0输出高电平的指令和3个使GPIOA0输出低电平的指令,系统的指令周期为10 ns,因此循环周期中保持高电平的时间为60 ns。通过将该程序放在H0 SARAM中进行调试,可得GPIOA0的波形,如图5所示。其中高电平时间正好为60 ns。注意,由于3个低电平之后要进行跳转,故清空流水线的周期要长一些。
["岁月联盟"提供]
图5 TMS320F2812中GPIOA0的波形1
  为了观察乘法指令的周期,将上述循环部分的C源程序修改为: for(;;) {Uint16 test1,test2,test3;   test1=0x1234; test2=0x2345;   GpioDataRegs.GPADAT.all=0xFFFF;   GpioDataRegs.GPADAT.all=0xFFFF;   GpioDataRegs.GPADAT.all=0xFFFF;   test3=test1*test2;   GpioDataRegs.GPADAT.all=0x0000;   GpioDataRegs.GPADAT.all=0x0000;   GpioDataRegs.GPADAT.all=0x0000; }
  上述程序经过编译、链接后的汇编指令如下:   3F8012L1:   3FMOV*-SP[1],#0x1234   3F MOV*-SP[2],#0x2345   3FF MOVWDP,#0x01C3   3F MOV@32,#0xFFFF   3F801A 2820 MOV@32,#0xFFFF   3F801C 2820 MOV@32,#0xFFFF   3F801E 2D42 MOVT,*-SP[2]   3F801F 1241 MPYACC,T,*-SP[1]   3F MOV*-SP[3],AL   3F MOV@32,#0   3F MOV@32,#0   3F MOV@32,#0   3F8024 6FEE SBL1,UNC
  其中使GPIOA0为高电平的指令仍然为6个指令周期(其中包括1个乘法指令),因为乘法指令也是单周期的,因此循环周期中保持高电平的时间为60 ns。通过将该程序放在H0 SARAM中进行调试可得GPIOA0的波形,如图6所示。其中高电平时间正好为60 ns,而由于3个低电平之后要进行跳转,
要清空流水线,而且还要为乘法做准备,因此保持低电平的时间比图5所需的时间要长。当采用数字式示波器观察时,如果探头采用×1档观察的波形不是很理想,则可以采用×10档,并配合调节探头的补偿旋钮。 [来源"岁月联盟"]
图6 TMS320F2812中GPIOA0的波形2
4 三种微处理器的比较   首先要强调的是,这几种微控制器都可以通过提高晶振的振荡频率来缩短指令周期,但是这些控制器的振荡频率是有一定限制的,例如单片机不超过40 MHz,而LPC2114的频率不超过60 MHz,TMS320F2812的最高频率为150 MHz。在同样的工作频率下,ARM指令运行的指令周期远远高于传统的单片机。 因为传统的单片机没有采用流水线机制,而ARM核和DSP都采用了流水线,但是由于访问外设和RAM等存储器要加一定的时钟周期,因此ARM不是真正可以实现单周期运行的,特别是不能实现单周期的乘法指令,而DSP可以实现真正的单周期乘法指令,速度要远远高于微控制器。
【上篇】【下篇】}

我要回帖

更多关于 多谐振荡器周期 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信