总线周期的概念
- 格式:doc
- 大小:99.00 KB
- 文档页数:16
第一章微型计算机概述复习题一、填空题1、微机系统由(硬件系统)和(软件系统)两部分组成。
2、总线按传输的信息种类可分成(数据)、(地址)和(控制)三种。
3、模型机CPU主要由(运算器)、(控制器)和(寄存器)三部分组成。
4、指令格式通常由(操作码)和(操作数)组成。
5、指令的执行分(取指)和(执指)两个阶段。
6、8086有(20 )位地址线,存储器容量为(1M )B。
二、名字解释1、PC :程序计数器2、CACHE:高速缓冲存储器2、FLAGS :标志寄存器3、ALU :算术逻辑运算单元4、ID:指令译码器三、问答题1、微机中各部件的连接采用什么技术?为什么?解答:现代微机中广泛采用总线将各大部件连接起来。
有两个优点:一是各部件可通过总线交换信息,相互之间不必直接连线,减少了传输线的根数,从而提高了微机的可靠性;二是在扩展计算机功能时,只须把要扩展的部件接到总线上即可,十分方便。
2、微机系统的总线结构分哪三种?解答:单总线、双总线、双重总线3、微机系统的主要性能指标(四种)?解答:字长、主频、内存容量、指令系统4、模型机有哪些寄存器,以及作用?解答:通用寄存器组:可由用户灵活支配,用来存放参与运算的数据或地址信息。
地址寄存器:专门用来存放地址信息的寄存器。
程序计数器:它的作用是指明下一条指令在存储器中的地址。
指令寄存器:用来存放当前正在执行的指令代码指令译码器:用来对指令代码进行分析、译码,根据指令译码的结果,输出相应的控制信号5、请举例8、16、准16、32、准32位CPU芯片型号。
解答:8085:8位;8086:16位;8088准16位;80386DX:32位;80386SX:准32位第二章典型微处理器一、填空题1、8086CPU 内部组成结构从功能上讲,可分为__BIU_____和___EU______两部分。
2、8086/8088的四个段寄存器为___DS_____、___ES_____、___SS____、__CS_______3、用来存放CPU状态信息的寄存器是_____FLAGS______。
1.时钟周期:(晶振频率倒数、控制计算机节奏)时钟周期也称为振荡周期,定义为时钟脉冲的倒数(可以这样来理解,时钟周期就是单片机外接晶振的倒数,例如12M的晶振,它的时间周期就是1/12us),是计算机中最基本的、最小的时间单位。
在一个时钟周期内,CPU仅完成一个最基本的动作。
对于某种单片机,若采用了1MHZ 的时钟频率,则时钟周期为1us;若采用4MHZ的时钟频率,则时钟周期为250us。
由于时钟脉冲是计算机的基本工作脉冲,它控制着计算机的工作节奏(使计算机的每一步都统一到它的步调上来)。
显然,对同一种机型的计算机,时钟频率越高,计算机的工作速度就越快。
8051单片机把一个时钟周期定义为一个节拍(用P表示),二个节拍定义为一个状态周期(用S表示)。
2.机器周期:(指令中单个阶段的执行周期)在计算机中,为了便于管理,常把一条指令的执行过程划分为若干个阶段,每一阶段完成一项工作。
例如,取指令、存储器读、存储器写等,这每一项工作称为一个基本操作。
完成一个基本操作所需要的时间称为机器周期。
一般情况下,一个机器周期由若干个S周期(状态周期)组成。
8051系列单片机的一个机器周期由6个S周期(状态周期)组成。
前面已说过一个时钟周期定义为一个节拍(用P表示),二个节拍定义为一个状态周期(用S表示),8051单片机的机器周期由6个状态周期组成,也就是说一个机器周期=6个状态周期=12个时钟周期。
(例如外接24M晶振的单片机,他的一个机器周期=12/24M秒)3.指令周期:执行一条指令所需要的时间,一般由若干个机器周期组成。
指令不同,所需的机器周期也不同。
对于一些简单的的单字节指令,在取指令周期中,指令取出到指令寄存器后,立即译码执行,不再需要其它的机器周期。
对于一些比较复杂的指令,例如转移指令、乘法指令,则需要两个或者两个以上的机器周期。
通常含一个机器周期的指令称为单周期指令,包含两个机器周期的指令称为双周期指令。
习题解答:1、8086CPU从功能上看可分为哪两大部分?它们的主要作用是什么?答:8086CPU功能结构可分为两大部分,即总线接口单元BIU(BUS INTERFASE UNIT)和执行单元EU(Execution Unit)构成。
BIU负责与存储器和外设传递数据,具体地说,BIU从内存指定部分取出指令,送到指令队列排队;在执行指令时所需的操作数也是由BIU从内存的指定区域取出传送到EU去执行或者把EU的执行结果传送到指定的内存单元或外设中。
EU 负责指令的执行,它从指令队列中取出指令,译码并执行,完成指令所规定的操作后将指令执行的结果提供给BIU。
2、8086CPU中有哪些通用寄存器?各有什么用途?答:8086/8088CPU的通用寄存器包括4个数据寄存器AX、BX、CX、DX,2个地址指针寄存器SP和BP,2个变址寄存器SI和DI。
通用寄存器都能用来存放运算操作数和运算结果,这是它们的通用功能,除此之外在不同的场合它们还有各自的专门用途。
(1)数据寄存器数据寄存器包括4个寄存器AX、BX、CX、DX,用于暂时保存运算数据和运算结果,由于每个16位数据寄存器可分为2个8位数据寄存器,这4个数据寄存器既可以保存16位数据,也可保存8位数据。
AX(accumulator)称为累加器,常用于存放算术逻辑运算的操作数,所有输入输出指令也都通过AX与外设进行信息传输。
BX(base)称为基址寄存器,常用于存放访问内存时的基地址。
CX(count)称为计数器,在循环和串操作指令中用来存放计数值。
DX(data)称为数据寄存器,在双字长(32位)乘除运算中将DX与AX两个寄存器组合成一个双字长的数据,其中DX存放高16位数据,AX存放低16位数据,另外在间接寻址的输入输出指令中把要访问的输入输出端口地址存放在DX中。
(2)指针寄存器指针寄存器包括堆栈指针寄存器SP(stack pointer)和基址指针寄存器BP(base pointer)。
微型计算机原理及应⽤知识点总结第⼀章计算机基础知识⼀、微机系统的基本组成1.微型计算机系统由硬件和软件两个部分组成。
(1)硬件:①冯●诺依曼计算机体系结构的五个组成部分:运算器,控制器,存储器,输⼊设备,输⼊设备。
其特点是以运算器为中⼼。
②现代主流的微机是由冯●诺依曼型改进的,以存储器为中⼼。
③冯●诺依曼计算机基本特点:核⼼思想:存储程序;基本部件:五⼤部件;信息存储⽅式:⼆进制;命令⽅式:操作码(功能)+地址码(地址),统称机器指令;⼯作⽅式:按地址顺序⾃动执⾏指令。
(2)软件:系统软件:操作系统、数据库、编译软件应⽤软件:⽂字处理、信息管理(MIS)、控制软件⼆、微型计算机的系统结构⼤部分微机系统总线可分为3类:数据总线DB(Data Bus),地址总线AB(Address Bus),控制总线CB(Control Bus)。
总线特点:连接或扩展⾮常灵活,有更⼤的灵活性和更好的可扩展性。
三、⼯作过程微机的⼯作过程就是程序的执⾏过程,即不断地从存储器中取出指令,然后执⾏指令的过程。
★例:让计算机实现以下任务:计算计算7+10=?程序:mov al,7Add al,10hlt指令的机器码:10110000(OP)0000011100000100(OP)0000101011110100(OP)基本概念:1.微处理器、微型计算机、微型计算机系统2.常⽤的名词术语和⼆进制编码(1)位、字节、字及字长(2)数字编码(3)字符编码(4)汉字编码3.指令、程序和指令系统习题:1.1,1.2,1.3,1.4,1.5第⼆章8086/8088微处理器⼀、8086/8088微处理器8086微处理器的内部结构:从功能上讲,由两个独⽴逻辑单元组成,即执⾏单元EU和总线接⼝单元BIU。
执⾏单元EU包括:4个通⽤寄存器(AX,BX,CX,DX,每个都是16位,⼜可拆位,拆成2个8位)、4个16位指针与变址寄存器(BP,SP,SI,DI)、16位标志寄存器FLAG(6个状态标志和3个控制标志)、16位算术逻辑单元(ALU)、数据暂存寄存器;EU功能:从BIU取指令并执⾏指令;计算偏移量。
第一章1.辨析三个概念:微处理器、微型计算机、微型计算机系统微处理器:简称μP或MP(Microprocessor)是指由一片或几片大规模集成电路组成的具有运算器和控制器功能的中央处理器部件,又称为微处理机。
微型计算机: 简称μC或MC,是指以微处理器为核心,配上存储器、输入/输出接口电路及系统总线所组成的计算机(又称主机或微电脑)。
微型计算机系统(主机+外设+软件配置)(Microcomputer system) 简称μCS或MCS,是指以微型计算机为中心, 以相应的外围设备、电源和辅助电路(统称硬件)以及指挥微型计算机工作的系统软件所构成的系统。
2.微机系统结构(三种总线结构):数据总线,地址总线,控制总线第三章内部结构,由两部分组成:总线接口单元BIU(Bus Interface Unit); 执行单元EU(Execution Unit). (1).总线接口单元BIU组成:4个16位的段寄存器(CS、DS、ES、SS);1个16位的指令指针寄存器IP;1个20位的地址加法器;1个指令队列(长度为6个字节);I/O控制电路(总线控制逻辑);]内部暂存器。
BIU的功能:根据EU的请求负责CPU与内存或I/O端口传送指令或数据。
①BIU从内存取指令送到指令队列②当EU执行指令时,BIU要配合EU从指定的内存单元或I/O端口中读取数据,或者把EU的操作结果送到指定的内存单元或I/O端口去。
(2)执行单元EU(Execution Unit)组成:①ALU(算术逻辑单元);②通用寄存器组AX,BX,CX,DX(4个数据寄存器)'BP(基址指针寄存器)SP(堆栈指针寄存器)SI(源变址寄存器)DI(目的变址寄存器)③数据暂存寄存器④标志寄存器FR⑤EU控制电路~作用:负责执行指令,执行的指令从BIU的指令队列中取得;运算结果和所需数据,则由EU向BIU发出请求,经总线访问内存或I/O端口进行存取。
指令周期、时钟周期、总线周期概念辨析在计算机中,为了便于管理,常把一条指令的执行过程划分为若干个阶段,每一阶段完成一项工作。
例如,取指令、存储器读、存储器写等,这每一项工作称为一个基本操作。
完成一个基本操作所需要的时间称为机器周期。
一般情况下,一个机器周期由若干个S周期(状态周期)组成。
通常用内存中读取一个指令字的最短时间来规定CPU周期,(也就是计算机通过内部或外部总线进行一次信息传输从而完成一个或几个微操作所需要的时间)),它一般由12个时钟周期组成。
而时钟周期=1秒/晶振频率,因此单片机的机器周期=12秒/晶振频率 .指令周期(Instruction Cycle):取出并执行一条指令的时间。
总线周期(BUS Cycle):也就是一个访存储器或I/O端口操作所用的时间。
时钟周期(Clock Cycle):又称节拍周期,是处理操作的最基本单位。
(晶振频率的倒数,也称T状态)指令周期、总线周期和时钟周期之间的关系:一个指令周期由若干个总线周期组成,而一个总线周期时间又包含有若干个时钟周期。
指令周期CPU每取出一条指令并执行这条指令,都要完成一系列的操作,这一系列操作所需要的时间通常叫做一个指令周期。
换言之指令周期是取出一条指令并执行这条指令的时间。
由于各条指令的操作功能不同,因此各种指令的指令周期是不尽相同的。
例如一条加法指令的指令周期同一条乘法指令的指令周期是不相同的。
指令周期常常用若干个CPU周期数来表示,CPU周期也称机器周期。
指令不同,所需的机器周期数也不同。
对于一些简单的单字节指令,在取指令周期中,指令取出到指令寄存器后,立即译码执行,不再需要其它的机器周期。
对于一些比较复杂的指令,例如转移指令、乘法指令,则需要两个或者两个以上的机器周期。
通常含一个机器周期的指令称为单周期指令,包含两个机器周期的指令称为双周期指令。
总线周期1.微处理器是在时钟信号CLK控制下按节拍工作的。
8086/8088系统的时钟频率为4.77MHz,每个时钟周期约为200ns。
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。
在同等程度的CPU负担下,DMA是一种快速的数据传送方式。
它允许不同速度的硬件装置来沟通,而不需要依于 CPU的大量中断请求。
【摘自Wikipedia】现在越来越多的单片机采用DMA技术,提供外设和存储器之间或者存储器之间的高速数据传输。
当 CPU 初始化这个传输动作,传输动作本身是由DMA 控制器来实行和完成。
STM32就有一个DMA控制器,它有7个通道,每个通道专门用来管理一个或多个外设对存储器访问的请求,还有一个仲裁器来协调各个DMA请求的优先权。
DMA 控制器和Cortex-M3核共享系统数据总线执行直接存储器数据传输。
当CPU和DMA同时访问相同的目标(RAM或外设)时,DMA请求可能会停止 CPU访问系统总线达若干个周期,总线仲裁器执行循环调度,以保证CPU至少可以得到一半的系统总线(存储器或外设)带宽。
在发生一个事件后,外设发送一个请求信号到DMA控制器。
DMA控制器根据通道的优先权处理请求。
当DMA控制器开始访问外设的时候,DMA控制器立即发送给外设一个应答信号。
当从DMA控制器得到应答信号时,外设立即释放它的请求。
一旦外设释放了这个请求,DMA控制器同时撤销应答信号。
如果发生更多的请求时,外设可以启动下次处理。
总之,每个DMA传送由3个操作组成:1. 从外设数据寄存器或者从DMA_CMARx寄存器指定地址的存储器单元执行加载操作。
2. 存数据到外设数据寄存器或者存数据到DMA_CMARx寄存器指定地址的存储器单元。
3. 执行一次DMA_CNDTRx寄存器的递减操作。
该寄存器包含未完成的操作数目。
仲裁器根据通道请求的优先级来启动外设/存储器的访问。
优先级分为两个等级:软件(4个等级:最高、高、中等、低)、硬件(有较低编号的通道比拥有较高编号的通道有较高的优先权)。
可以在DMA传输过半、传输完成和传输错误时产生中断。
STM32中DMA的不同中断(传输完成、半传输、传输完成)通过“线或”方式连接至NVIC,需要在中断例程中进行判断。
进行DMA配置前,不要忘了在RCC设置中使能DMA时钟。
STM32的DMA 控制器挂在AHB总线上。
DMA总共有7个通道,各个通道的DMA映射关系如下:外设的事件连接至相应DMA通道,每个通道均可以通过软件触发实现存储器内部的DMA数据传输(M2M模式)Tips:库2.0中函数RCC_AHBPeriphClockCmd的参数由“RCC_AHBPeriph_DMA”改成“RCC_AHBPeriph_DMA1”(如果是DMA1控制器的话)。
DMA的传输标志位(CHTIFx、CTCIFx、CGIFx)由硬件设置为“1”,但需要软件清零,在中断服务程序中清除。
当CGIFx(全局中断标志位)清零后,CHTIFx 和 CTCIFx均清零。
过程:怎样启用DMA?首先,众所周知的是初始化,任何设备启用前都要对其进行初始化,要对模块初始化,还要先了解该模块相应的结构及其函数,以便正确的设置;由于DMA较为复杂,我就只谈谈DMA 的基本结构和和常用函数,这些都是ST公司提供在库函数中的。
1、下面代码是一个标准DMA设置,当然实际应用中可根据实际情况进行裁减:DMA_DeInit(DMA_Channel1);上面这句是给DMA配置通道,根据ST提供的资料,STM3210Fx中DMA 包含7个通道(CH1~CH7),也就是说可以为外设或memory提供7座“桥梁”(请允许我使用桥梁一词,我觉得更容易理解,哈哈,别“拍砖”呀!);DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address;上面语句中的DMA_InitStructure是一个DMA结构体,在库中有声明了,当然使用时就要先定义了;DMA_PeripheralBaseAddr是该结构体中一个数据成员,给DMA一个起始地址,好比是一个buffer起始地址,数据流程是:外设寄存器à DMA_PeripheralBaseAddàmemory 中变量空间(或flash中数据空间等),ADC1_DR_Address是我定义的一个地址变量;DMA_InitStructure.DMA_MemoryBaseAddr =(u32)ADC_ConvertedValue;上面这句很显然是DMA要连接在Memory中变量的地址,ADC_ConvertedValue是我自己在memory中定义的一个变量;DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;上面的这句是设置DMA的传输方向,就如前面我所说的,DMA可以双向传输,也可以单向传输,这里设置的是单向传输,如果需要双向传输:把DMA_DIR_PeripheralSRC改成DMA_DIR_PeripheralDST即可。
DMA_InitStructure.DMA_BufferSize = 2;上面的这句是设置DMA在传输时缓冲区的长度,前面有定义过了buffer的起始地址:ADC1_DR_Address ,为了安全性和可靠性,一般需要给buffer定义一个储存片区,这个参数的单位有三种类型:Byte、HalfWord、word,我设置的2个 half-word(见下面的设置);32位的MCU中1个half-word占16 bits。
DMA_InitStructure.DMA_PeripheralInc =DMA_PeripheralInc_Disable;上面的这句是设置DMA的外设递增模式,如果DMA选用的通道(CHx)有多个外设连接,需要使用外设递增模式:DMA_PeripheralInc_Enable;我的例子里DMA只与ADC1建立了联系,所以选用DMA_PeripheralInc_DisableDMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;上面的这句是设置DMA的内存递增模式,DMA访问多个内存参数时,需要使用DMA_MemoryInc_Enable,当DMA只访问一个内存参数时,可设置成:DMA_MemoryInc_Disable。
DMA_InitStructure.DMA_PeripheralDataSize =DMA_PeripheralDataSize_HalfWord;上面的这句是设置DMA在访问时每次操作的数据长度。
有三种数据长度类型,前面已经讲过了,这里不在叙述。
DMA_InitStructure.DMA_MemoryDataSize =DMA_MemoryDataSize_HalfWord;与上面雷同。
在此不再说明。
DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;上面的这句是设置DMA的传输模式:连续不断的循环模式,若只想访问一次后就不要访问了(或按指令操作来反问,也就是想要它访问的时候就访问,不要它访问的时候就停止),可以设置成通用模式:DMA_Mode_NormalDMA_InitStructure.DMA_Priority = DMA_Priority_High;上面的这句是设置DMA的优先级别:可以分为4级:VeryHigh,High,Medium,Low.DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;上面的这句是设置DMA的2个memory中的变量互相访问的DMA_Init(DMA_Channel1,&DMA_InitStructure);前面那些都是对DMA结构体成员的设置,在次再统一对DMA整个模块做一次初始化,使得DMA各成员与上面的参数一致。
/*DMA Enable*/DMA_Cmd(DMA_Channel1,ENABLE);哈哈哈!这一句我想我就不罗嗦了,大家一看就明白。
至此,整个DMA总算设置好了,但是,DMA通道又是怎样与外设联系在一起的呢?哈哈,这也是我当初最想知道的一个事情,别急!容我想喝口茶~~~~~~哈哈哈!要使DMA与外设建立有效连接,这不是DMA自身的事情,是各个外设的事情,每个外设都有一个xxx_DMACmd(XXXx,Enable )函数,如果使DMA与ADC建立有效联系,就使用ADC_DMACmd(ADC1,Enable); (这里我启用了ADC中的ADC1模块)。
一个简单的例子 transfer a word data buffer from FLASH memory to embedded SRAM memory.在V3.1.2库的位置STM32F10x_StdPeriph_Lib_V3.1.2\Project\STM32F10x_StdPeriph_ Examples\DMA\FLASH_RAM/* DMA1 channel6 configuration */DMA_DeInit(DMA1_Channel6);//peripheral base addressDMA_InitStructure.DMA_PeripheralBaseAddr =(uint32_t)SRC_Const_Buffer;//memory base addressDMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)DST_Buffer; //数据传输方向 Peripheral issourceDMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;//缓冲区大小 Number of data to be transferred (0 up to 65535).数据传输数目DMA_InitStructure.DMA_BufferSize = BufferSize;// the Peripheral address register isincrementedDMA_InitStructure.DMA_PeripheralInc =DMA_PeripheralInc_Enable;//the memory address register is incrementedDMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;//the Peripheral data widthDMA_InitStructure.DMA_PeripheralDataSize =DMA_PeripheralDataSize_Word;DMA_InitStructure.DMA_MemoryDataSize =DMA_MemoryDataSize_Word;DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;DMA_InitStructure.DMA_Priority = DMA_Priority_High;//the DMAy Channelx will be used in memory-to-memory transfer //DMA通道的操作可以在没有外设请求的情况下进行,这种操作就是存储器到存储器模式。