时钟周期、总线周期详细说明
- 格式:pdf
- 大小:297.05 KB
- 文档页数:10
DMA总线周期的概念1.微处理器是在时钟信号CLK控制下按节拍工作的。
8086/8088系统的时钟频率为4.77MHz,每个时钟周期约为200ns。
2.由于存贮器和I/O端口是挂接在总线上的,CPU对存贮器和I/O 接口的访问,是通过总线实现的。
通常把CPU通过总线对微处理器外部(存贮器或I/O接口)进行一次访问所需时间称为一个总线周期。
一个总线周期一般包含4个时钟周期,这4个时钟周期分别称4个状态即T1状态、T2状态、T3状态和T4状态。
1.DMA的通道选择不是随便的,要根据映像来。
2.外设地址的自增,可能会曾到下一个外设,比如:0X40012400为ADC1的起始地址0X40012800就是ADC2的起始地址了所以在设置此元素是否要递增时要注意了。
STM32 DMA使用详解DMA部分我用到的相对简单,当然,可能这是新东西,我暂时还用不到它的复杂功能吧。
下面用问答的形式表达我的思路。
DMA有什么用?直接存储器存取用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。
无须CPU的干预,通过DMA数据可以快速地移动。
这就节省了CPU的资源来做其他操作。
有多少个DMA资源?有两个DMA控制器,DMA1有7个通道,DMA2有5个通道。
数据从什么地方送到什么地方?外设到SRAM(I2C/UART等获取数据并送入SRAM);SRAM的两个区域之间;外设到外设(ADC读取数据后送到TIM1控制其产生不同的PWM占空比);SRAM到外设(SRAM中预先保存的数据送入DAC产生各种波形);……还有一些目前还搞不清楚的。
DMA可以传递多少数据?传统的DMA的概念是用于大批量数据的传输,但是我理解,在STM32中,它的概念被扩展了,也许更多的时候快速是其应用的重点。
数据可以从1~65535个。
直接存储器存取(Direct Memory Access,DMA)是计算机科学中的一种内存访问技术。
它允许某些电脑内部的硬体子系统(电脑外设),可以独立地直接读写系统存储器,而不需绕道 CPU。
微机原理复习1.微型计算机结构(3总线结构:地址总线、数据总线、控制总线)有16根数据线和20根地址,8086可寻址的内存地址空间达220,即1MB; 8086可寻址的I/O地址空间达216,即64KB;2.8086内部组成,BIU和EU的功能及各自的组成,熟知相应寄存器、功能部件在哪个接口部件中。
EU负责指令的执行;算术逻辑单元(ALU),可完成8位或16位操作数进行算术或逻辑运算; 8个16位通用寄存器(AX、BX、CX、DX、SI、DI、SP和BP);标志寄存器;BIU负责CPU与存储器、I/O设备之间的数据传送。
◆4个16位段寄存器(DS、CS、ES、SS); 8086中有4个16位段寄存器,它们是:CS(代码段寄存器)、DS(数据段寄存器)、SS(堆栈段寄存器)和ES(附加段寄存器)◆指令指针寄存器(IP);指令指针寄存器IP提供下一条要取出的指令所在存储单元的16位偏移地址。
◆20位的地址加法器;8086CPU采用段地址、段内偏移地址两级存储器寻址方式,由一个20位地址加法器根据16位段地址和16位段内偏移地址计算出20位的物理地址PA(Physical Address)。
其计算方法是:将CPU中的16位段寄存器内容左移4位(×16)与16位的逻辑地址(又称偏移地址)在地址加法器内相加,得到所寻址单元的20位物理地址。
▪物理地址 = 段地址×10H+偏移地址假设(CS)=FE00H,(IP)=0400H,那么下一条要取出的指令所在内存单元的20位物理地址PA=FE00H×10H+0400H=FE400H。
3.8086的寄存器结构寄存器是CPU内部用来存放地址、数据和状态标志的部件,8086有14个16位寄存器和8个8位寄存器数据寄存器AX、BX、CX、DX指针和变址寄存器SP、BP、SI、DI标志寄存器FRFR是一个16位的寄存器。
9个位用作标志位:◆状态标志位有6个,控制标志位有3个CF:进位标志:指令执行后,如果运算结果在最高位上产生了一个进位或借位,则CF=1;否则,CF=0。
时钟周期(Clock Cycle):又称节拍周期,是处理操作的最基本单位。
(晶振频率的倒数,也称T状态) 时钟周期也称为振荡周期,定义为时钟脉冲的倒数(可以这样来理解,时钟周期就是单片机外接晶振的倒数,例如12M的晶振,它的时间周期就是1/12 us),是计算机中最基本的、最小的时间单位。
在一个时钟周期内,CPU仅完成一个最基本的动作。
对于某种单片机,若采用了1MHZ的时钟频率,则时钟周期为1us;若采用4MHZ的时钟频率,则时钟周期为250us。
由于时钟脉冲是计算机的基本工作脉冲,它控制着计算机的工作节奏(使计算机的每一步都统一到它的步调上来)。
显然,对同一种机型的计算机,时钟频率越高,计算机的工作速度就越快。
但是,由于不同的计算机硬件电路和器件的不完全相同,所以其所需要的时钟周频率范围也不一定相同。
我们学习的8051单片机的时钟范围是1.2MHz-12MHz。
在8051单片机中把一个时钟周期定义为一个节拍(用P表示),二个节拍定义为一个状态周期(用S表示)。
机器周期在计算机中,为了便于管理,常把一条指令的执行过程划分为若干个阶段,每一阶段完成一项工作。
例如,取指令、存储器读、存储器写等,这每一项工作称为一个基本操作。
完成一个基本操作所需要的时间称为机器周期。
一般情况下,一个机器周期由若干个S周期(状态周期)组成。
8051系列单片机的一个机器周期同6个S 周期(状态周期)组成。
前面已说过一个时钟周期定义为一个节拍(用P表示),二个节拍定义为一个状态周期(用S表示),8051单片机的机器周期由6个状态周期组成,也就是说一个机器周期=6个状态周期=12个时钟周期。
指令周期(Instruction Cycle):取出并执行一条指令的时间。
指令周期是执行一条指令所需要的时间,一般由若干个机器周期组成。
指令不同,所需的机器周期数也不同。
对于一些简单的的单字节指令,在取指令周期中,指令取出到指令寄存器后,立即译码执行,不再需要其它的机器周期。
总线周期的名词解释是什么总线周期,又称总线时钟周期,是指计算机系统中各个设备进行数据传输和通信所需要的时间间隔。
在计算机系统中,总线相当于一条电子通路,用于连接各个设备,让它们能够相互传递数据和指令。
不同设备之间的数据传输需要通过总线进行,而总线周期则是用来衡量这个传输过程的时间。
总线周期的长度是由计算机系统的时钟频率决定的。
时钟频率通常以赫兹(Hz)作为单位,表示每秒钟发生的时钟脉冲的次数。
比如,如果计算机系统的时钟频率为1 GHz(即10^9 Hz),那么每秒钟会有10亿个时钟脉冲产生。
总线周期则是时钟周期的倒数,可以用来衡量一个总线操作所需要的时间。
在计算机系统中,各个设备之间的通信需要进行诸如读取、写入、传输等操作。
这些操作会涉及到数据的传输和处理,而总线周期则是用来计算这些传输和处理所需时间的基本单位。
在每个总线周期内,数据会以特定的方式在总线上传输,设备之间要进行的操作会按照时序进行。
当一个总线周期结束后,下一个总线周期即开始,设备之间的下一个操作也会相继执行。
总线周期可以进一步细分为读周期和写周期。
读周期即设备从总线上读取数据的时间段,写周期则是设备向总线上写入数据的时间段。
读周期和写周期的长度取决于设备的特性和总线的带宽。
通常情况下,读周期比写周期短,因为读取数据的操作要比写入数据的操作简单。
在一个总线周期内,可能会有多个设备进行读操作,但一次只能有一个设备进行写操作,以避免数据冲突和干扰。
总线周期对于计算机系统的性能和效率有着重要的影响。
如果总线周期过长,会导致设备之间的数据传输速度变慢,影响计算机系统的响应速度和运行效率。
相反,如果总线周期过短,设备之间的数据传输可能会出现错误和冲突,导致系统不稳定。
因此,合理设置总线周期是计算机系统设计中需要考虑的关键因素之一。
总线周期的名词解释就是上述所述,它是计算机系统中用来衡量设备之间数据传输所需要的时间间隔。
它是由计算机系统的时钟频率决定的,用来标记一个总线操作的开始和结束。
单片机时钟周期、机器周期、指令周期与总线周期时钟周期:时钟周期也称为振荡周期,定义为时钟脉冲的倒数(可以这样来理解,时钟周期就是单片机外接晶振的倒数,例如12M的晶振,它的时间周期就是1/12us),是计算机中最基本的、最小的时间单位。
在一个时钟周期内,CPU仅完成一个最基本的动作。
对于某种单片机,若采用了1MHZ的时钟频率,则时钟周期为1us;若采用4MHZ的时钟频率,则时钟周期为250us。
由于时钟脉冲是计算机的基本工作脉冲,它控制着计算机的工作节奏(使计算机的每一步都统一到它的步调上来)。
显然,对同一种机型的计算机,时钟频率越高,计算机的工作速度就越快。
具体计算就是1/fosc。
也就是说如果晶振为1MHz,那么时钟周期就为1us;6MHz的话,就是1/6us。
8051单片机把一个时钟周期定义为一个节拍(用P表示),二个节拍定义为一个状态周期(用S表示)。
机器周期:在计算机中,为了便于管理,常把一条指令的执行过程划分为若干个阶段,每一阶段完成一项工作。
例如,取指令、存储器读、存储器写等,这每一项工作称为一个基本操作。
完成一个基本操作所需要的时间称为机器周期。
一般情况下,一个机器周期由若干个S周期(状态周期)组成。
8051系列单片机的一个机器周期同6个S周期(状态周期)组成。
前面已说过一个时钟周期定义为一个节拍(用P表示),二个节拍定义为一个状态周期(用S表示),8051单片机的机器周期由6个状态周期组成,也就是说一个机器周期=6个状态周期=12个时钟周期。
具体计算为:时钟周期Xcycles。
如果单片机是12周期的话,那么机器周期就是T×12。
假设晶振频率为12M,单片机为12周期的话,那么机器周期就是1us。
例如外接24M晶振的单片机,他的一个机器周期=12/24M秒;52系列单片机一个机器周期等于12个时钟周期。
设晶振频率为12MHz时,52单片机是12T的单片机,即频率要12分频。
第二章1、8086最大模式和最小模式的区别是什么?答:当8086MN/MX信号线接+5V是,系统处于最小工作模式,它适用于较小规模的应用。
当MN/MX线接地时,则系统工作于最大模式。
最大模式和最小模式的主要区别是外加有8288总线控制器。
最小模式下,控制总线直接从8086得到;最大模式下,通过8288对CPU 发出的控制信号进行变换和组合,以得到对存储器和I/O端口的读写信号和对锁存器8282及对数据总线收发器8286的控制信号,最大模式是多处理机模式,需要协调主处理器和协处理器的工作问题及对总线的共享控制问题。
最小模式是单处理机模式。
在最小模式下,控制信号是直接从第24~29脚送出的;最大模式下,状态信号S2、S1、S0隐含了一些控制信息,使用8288后,就可以从S2、S1、S0状态信息的组合中的到与这些控制信号相同的信息。
2、什么是总线周期、时钟周期、指令周期,总线周期和时钟周期的关系是什么?答:CPU要从存储器或输入/输出端口存取一个字节(或一个字)所需要的时间成为总线周期。
时钟周期是CPU的基本事件计量单位,它由计算机的主频决定。
从取指令到执行完毕指令所需要的时间成为指令周期。
一个基本的总线周期有4个时钟周期组成。
3、8086物理地址、偏移地址、段地址三者的关系是什么?答;物理地址等于段地址左移四位加上偏移地址。
4、8086总线接口单元有那些基本组成,执行单元有那些组成?答:总线接口由4个段地址寄存器、IP(16位的指令指针寄存器)、20位物理地址加法器和总线控制电路和6个字节的指令队列缓冲器组成。
执行单元由16位算术逻辑单元(ALU)、16位标志寄存器(FLAGS)、通用寄存器组、数据暂存寄存器和EU控制电路组成。
5、8086和8088的区别有哪些?引脚、数据线地址线、存储模式。
答:引脚:第28脚8088为IO/M,而8086为M/IO。
第34脚8088为SSO,而8086为BHE/S7。
时钟周期:时钟周期也称为振荡周期,定义为时钟脉冲的倒数(可以这样来理解,时钟周期就是单片机外接晶振的倒数,例如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的操作频率可达60MHZ,这个频率是机器周期还是指令周期?ARM机器周期跟指令周期有什么对应关系?由于ARM采用的是三级流水线的技术,所有的指令执行都由相同的三个阶段取指,译码,执行,那么所有的指令的执行时间是不是都是相同的?我的理解是:如果ARM不接pll(即ARM直接采用晶振的周期),ARM的机器周期就是晶振的振荡周期,这两个是等同的,所有的指令的执行时间都是相同的,且都等于晶振周期;如果ARM连接并使能pll,则1/Fcclk就是机器周期,指令的执行频率等于Fcclk。
请教高手指点更正,多谢!!zlgarm :没有机器周期的概念,只有主时钟的概念,它是OLL的输出。
如果程序和数据均在片内RAM中,这样计算指令执行时间1、一般指令需1个主时钟时间2、每次跳转增加3个主时钟时间(也许是2个,需要确认)3、从RAM中取一个操作数多增加一个主时钟时间,以次类推4、保存一个结果到RAM中多增加一个主时钟时间,以次类推5、访问片内外设,增加一个外设时钟时间注意伪指令ldr rn,=x需要从ram中取一个操作数。
slump:如果从FLASH中运行,启动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口的最低位进行循环置位操作和清除操作。
源程序如下:#includemain() {while(1) {P1=0x01;P1=0x00;}}采用KEIL uVISION2进行编译、链接,生成可执行文件。
当调用该集成环境中的Debug时,可以得到上述源程序混合模式的反汇编代码:2:main()3: {4:while(1)5:{6:P1=0x01;0x000F759001MOVP1(0x90),#0x017:P1=0x00;0x0012 E4CLRA0x0013 F590MOVP1(0x90),A8:}0x001580EDSJMPmain (C:0003)其中斜体的代码为C源程序,正体的代码为斜体C源程序对应的汇编语言代码。
每行汇编代码的第1列为该代码在器中的位置,第2列为机器码,后面是编译、链接后的汇编语言代码。
所有指令共占用6个机器周期(其中“MOVP1(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引脚输出#defineLEDCON0x02000000intmain(void){//设置所有引脚连接GPIOPINSEL0 = 0x00000000;PINSEL1 = 0x00000000;//设置LED4控制口为输出IO0DIR = LEDCON;while(1){IO0SET = LEDCON;IO0CLR = LEDCON;}return(0);}采用ADS1.2进行编译、链接,生成可执行文件。
当调用AXD Debugger时,可以得到上述源程序的反汇编代码:main[0xe59f1020]ldrr1,0x4000024840000224[0xe3a00000]movr0,#040000228[0xe5810000]strr0,[r1,#0]4000022c[0xe5810004]strr0,[r1,#4]40000230[0xe3a00780]movr0,#0x200000040000234[0xe1c115c0]bicr1,r1,r0,asr #1140000238[0xe5810008]strr0,[r1,#8]4000023c[0xe5810004]strr0,[r1,#4]40000240[0xe581000c]strr0,[r1,#0xc]40000244[0xeafffffc]b0x4000023c40000248[0xe002c000]dcd0xe002c000每行汇编代码的第1列为该代码在器中的位置,第2列为机器码,后面是编译、链接后的汇编语言代码。
循环部分的语句最关键的就是下面3句:4000023c[0xe5810004]strr0,[r1,#4]40000240[0xe581000c]strr0,[r1,#0xc]40000244[0xeafffffc]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个时钟周期;③访问片内外设要增加一个外设时钟周期。