您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > 第三章CPU相关知识
嵌入式系统概论第三章CPU输入/输出机制管态,异常,陷阱存储管理和地址转换高速缓存CPU的性能和功耗1嵌入式系统概论3.1I/O编程I/O设备模拟元件或非电子元件数字逻辑——与CPU相关I/O设备与CPU的接口——一组寄存器CPUstatusregdataregmechanism2I/OI/O设备的寄存器数据寄存器:I/O与CPU交互的数据I/O设备读写的数据状态寄存器:提供设备运行的状态、信息只读方式,由设备完成对这些寄存器的操作,CPU只能读取它可读、可写方式,不仅设备可对这些寄存器操作,CPU也可以进行读、写操作3嵌入式系统概论I/O设备的分类计算机所管理的I/O设备按输入输出对象的不同可以分为以下3类:用户可读写设备,用于用户与计算机通信。如:显示器、键盘、鼠标、打印机等机器可读写设备,用于电子装置与计算机通信。如:硬盘、U盘、控制器通信设备,用于与远程设备通信。如:Modem、ISDN终端4嵌入式系统概论嵌入式系统概论应用:8251UART(Universalasynchronousreceiver/transmitter)串行通讯的基本设备UART功能被集成到ARM9有3组发送接收接口,通过通用的I/O接口复用获得的允许发送接收参数编程5嵌入式系统概论8251UART与CPU接口CPU串口68251串行数据通信系统模型DTE-DataTerminalEquipment,常常是计算机.DCE-DataCommunicationEquipment,常常是MODEM,也可以是计算机.串行接口–主要是8251A、16550、8250等,连接DTE和DCE。7嵌入式系统概论串行通讯数据以字符流的形式timebit0bit1bitn-1nocharstartstop...8嵌入式系统概论串行通讯的参数波特率(Baud(bit)rate)每个字符的位数是否有奇偶校验(Parity/noparity)奇、偶校验(Even/oddparity)结束位的长度(1,1.5,2位).9嵌入式系统概论I/O编程两种方法支持I/O编程特殊的I/O指令Intelx86提供in,out指令内存映射I/O大多数CPUs应用内存映射I/O支持I/O指令的CPU并不排除内存映射I/O10内存映射I/O为每一个I/O设备的寄存器提供地址程序使用普通的CPU读写指令来与设备通讯Definelocationfordevice:DEV1EQU0x1000Read/writecode:LDRr1,#DEV1LDRr0,[r1]LDRr0,#8STRr0,[r1]11嵌入式系统概论内存映射I/O——高级语言Peek和poke读操作intpeek(char*location){return*location;}写操作voidpoke(char*location,charnewval){(*location)=newval;}12I/O操作的方式13嵌入式系统概论忙等I/O方式轮询(polling):通过CPU读I/O设备状态寄存器来询问设备是否空闲14嵌入式系统概论忙等I/O方式-输出设备编程将一个字符串写到输出设备#defineOUT_CHAR0x1000#defineOUT_STATUS0x1001Char*mystring=“Hello,world.”;Char*current_char;current_char=mystring;while(*current_char!=‘\0’){poke(OUT_CHAR,*current_char);poke(OUT_STATUS,1);while(peek(OUT_STATUS)!=0);current_char++;}15嵌入式系统概论忙等I/O方式-输入/输出同步方式编程#definein_CHAR0x1000#definein_STATUS0x1001#defineOUT_CHAR0x1100#defineOUT_STATUS0x110116嵌入式系统概论忙等I/O方式-输入/输出同步方式编程(续)while(TRUE){/*read*/while(peek(IN_STATUS)==0);achar=(char)peek(IN_DATA);/*write*/poke(OUT_DATA,achar);poke(OUT_STATUS,1);while(peek(OUT_STATUS)!=0);}17I/O中断忙等I/O效率非常低I/O设备的速度远远小于CPU的速度除了测试,CPU不能做其它任何事情CPU的很多操作是可以与I/O事件并行执行中断机制:可以改变CPU的控制流顺序强制CPU执行一段特定代码——中断处理子例程18嵌入式系统概论I/O中断由I/O设备逻辑决定什么时候中断CPU响应中断——可能无法立即响应将程序计数器指向设备处理子例程前台程序:无中断情况下CPU运行的程序19嵌入式系统概论中断机制CPUstatusregdataregmechanismPCintrrequestintrackdata/addressLR20嵌入式系统概论中断的物理连接CPU和设备通过CPU总线连接CPU和设备通过握手协议进行通讯设备发出中断请求CPU准备处理I/O设备请求时,CPU发出中断响应21嵌入式系统概论中断行为基于调用中断子例程的形式(保护现场)中断强制下一条指令调用中断服务子例程执行中断子例程(恢复现场)返回前台程序22正在运行的程序中断点中断处理程序中断处理开始中断处理结束嵌入式系统概论例:应用基本中断将字符从输入设备复制到输出设备23CPUstatusregdataregoutputdevicestatusregdatareginputdevice嵌入式系统概论例:应用基本中断将字符从输入设备复制到输出设备中断子例程voidinput_handler()/*输入中断子例程*/{achar=peek(IN_DATA);gotchar=TRUE;}voidoutput_handler()/*输出中断子例程*/{}24嵌入式系统概论例:应用基本中断将字符从输入设备复制到输出设备(续)main(){while(TRUE){if(gotchar){poke(OUT_DATA,achar);poke(OUT_STATUS,1);gotchar=FALSE;}}}25例:具有缓冲区的中断I/O字符队列headtailheadtaila26#defineBUF_SIZE8chario_buf[BUF_SIZE];intbuf_head=0,buf_tail=0;interror=0;voidempty_buffer();voidfull_buffer();intnchars();voidadd_char(charachar);charremove_char();27基于缓冲区的输入中断子例程voidinput_handler(){charachar;if(full_buffer())error=1;else{achar=peek(IN_DATA);add_char(achar);}poke(IN_STATUS,0);if(nchars()==1){poke(OUT_DATA,remove_char());poke(OUT_STATUS,1);}}28基于缓冲区的输出中断子例程voidoutput_handler(){if(!empty_buffer()){poke(OUT_DATA,remove_char());poke(OUT_STATUS,1);}}29调试中断代码若忘记改变寄存器的内容前台程序会展示一些非常奇怪的错误错误很难重现---它依赖与中断的时间30如何发现中断在开始执行每条指令之前检查中断请求信号是否有中断请求一旦出现中断,PC将指向中断服务子例程注意:要保护和恢复现场31中断优先级和中断向量两种机制允许中断处理更多的设备优先级(Priorities):确定哪种中断首先获得CPU向量(Vectors):允许中断设备制定其中断服务子例程大多数CPU这两种方式都支持32具有优先级的中断---序号小的优先级高CPUdevice1device2devicenL1L2..Lninterruptacknowledge33使用轮询让几个设备共享一个中断34中断的优先级Masking(屏蔽):发生中断的优先级比正在中断的优先级低,CPU将不响应该优先级低的中断。Nonmaskableinterrupt(NMI,不可屏蔽中断):最高优先级,永不屏蔽电源故障35中断向量不同的设备有不同的中断服务子例程中断向量表handler0handler1handler2handler3Interruptvectortablehead36一般的中断机制intr?NY假设优先级的选择已经处理.NignoreYvector?YYNtimeout?Ybuserrorcalltable[vector]intrprioritycurrentpriority?continueexecutionN37ack中断开销中断服务子例程执行的时间中断机制的开销寄存器存储/恢复流水相关补偿Cache相关补偿38ARM中断ARM支持两类中断快速中断请求(FIQs).中断请求(IRQs).中断表开始地址:0.39ARM最坏延迟27个时钟周期2周期同步外部请求最多20周期完成当前指令3周期的数据异常终止2周期进入中断处理状态40管态通过SWI指令进入SWICODE_1在中断向量表中的地址:0x08.进入管理模式将CPSR存储到SPSR.41异常(Exception)内部检测到的错误与指令是同步的,但它是不可预料的通常是内部产生的有多种异常,处理的方法与中断类似,有优先级和向量表42Trap(陷阱)又叫软中断(softwareinterrupt):由指令产生的异常,然后进入管态ARM通过SWI指令进入软件中断43协处理器(Co-processor)增加一些功能单元,可以通过指令来调用浮点单元通过协处理器完成的ARM允许有16个协处理器浮点数处理是用协处理器编号为1和2的44Caches和CPUsCPUcachecontrollercachemainmemorydatadataaddressdataaddress45Cache操作主存被映射到cache中.Caches类型:指令caches;数据caches;指令caches+数据caches.主存的读取时间就是不确定的.46TermsCachehit:(高速缓存命中)位置就在cache中.Cachemiss:(高速缓存未命中)位置不在cache中.Workingset:(工作集)在一段时间内CPU访问的一小段存储单元,这个活动单元的集合就叫工作集.47未命中的类型Compulsory(cold):(强制性未命中)存贮单元第一次被访问.Capacity:(容量未命中)工作集过大.Conflict:(冲突未命中)多个地址映射到同一个cache单元上.48主存的性能h=cache命中率.tcache=cache访问时间,tmain=内存的访问时间.平均内存访问时间:tav=htcache+(1-h)tmain49多级cacheCPUL1cacheL2cache50mainmemory多级cache访问时间h1=L1cache命中率.h2=L1未命中,L2命中率.tL1和tL2–cache1和cache2访问时间平均内存访问时间:tav=h1tL1+(h2-h1)tL2+(1-h2-h1)tmain51替换策略(placementpolicy)Replacementpolicy:选择哪个cache单元的内容被淘汰,腾出空间存储新内存的内容两种策略:随机替换.最近最
本文标题:第三章CPU相关知识
链接地址:https://www.777doc.com/doc-4568259 .html