第三章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:DEV1EQU0x1000Read/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.主存的读取时间就是不确定的.46TermsCachehit:(高速缓存命中)位置就在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单元的内容被淘汰,腾出空间存储新内存的内容两种策略:随机替换.最近最

1 / 88
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功