Chapter12嵌入式系统驱动软件开发.ppt

上传人:sccc 文档编号:5152056 上传时间:2023-06-09 格式:PPT 页数:126 大小:1.17MB
返回 下载 相关 举报
Chapter12嵌入式系统驱动软件开发.ppt_第1页
第1页 / 共126页
Chapter12嵌入式系统驱动软件开发.ppt_第2页
第2页 / 共126页
Chapter12嵌入式系统驱动软件开发.ppt_第3页
第3页 / 共126页
Chapter12嵌入式系统驱动软件开发.ppt_第4页
第4页 / 共126页
Chapter12嵌入式系统驱动软件开发.ppt_第5页
第5页 / 共126页
点击查看更多>>
资源描述

《Chapter12嵌入式系统驱动软件开发.ppt》由会员分享,可在线阅读,更多相关《Chapter12嵌入式系统驱动软件开发.ppt(126页珍藏版)》请在三一办公上搜索。

1、嵌入式微处理器系统及应用,第十二章 嵌入式系统驱动软件开发,轿希齿抖席以狈庞明荣溢妈摹企拉花葛浸挟底肾勿壁讼悍辙容妥阿猫臣艳Chapter12 嵌入式系统驱动软件开发Chapter12 嵌入式系统驱动软件开发,主要内容,1 嵌入式系统驱动软件概述2 嵌入式系统设备的特性及操作界面 3 设备操作的基本原理4 W90P710串口驱动开发实例5 MPC5554 SCI驱动开发实例6 设备驱动开发需注意的问题7 驱动软件与操作系统的关系,议讲杂搪悉助鬃迢涧劝港抡崇朱搔寐倡坠合清闹易遂乔回汀诉赂茧嘲器体Chapter12 嵌入式系统驱动软件开发Chapter12 嵌入式系统驱动软件开发,12.1嵌入式系

2、统驱动软件概述,驱动软件是直接与硬件打交道的一层,它对操作系统和应用提供所需的驱动的支持。该层主要包括三种类型的程序,即板级初始化程序、与系统软件相关的驱动和与应用软件相关的驱动。板级初始化程序:这些程序在嵌入式系统上电后初始化系统的硬件环境,包括嵌入式微处理器、存储器、中断控制器、DMA、定时器等的初始化。,刨音伤绅皿绍昔壹墩摩枷巳叔滞廊敦耶报这勿睁碾绊们噪啊肋昆帐滚冒哩Chapter12 嵌入式系统驱动软件开发Chapter12 嵌入式系统驱动软件开发,12.1嵌入式系统驱动软件概述,与系统软件相关的驱动:这类驱动是操作系统和中间件(包括各种通信协议)等系统软件所需的驱动程序,它们的开发要

3、按照系统软件的要求进行。目前操作系统内核所需的硬件支持一般都已集成在嵌入式微处理器中了,因此操作系统厂商提供的内核驱动一般不用修改,开发人员主要需要编写的相关驱动如网络、键盘、显示、外存等的驱动程序。与应用软件相关的驱动:与应用软件相关的驱动不一定是需要与操作系统连接的,这些驱动的设计和开发由应用决定。,胎腺殃咎线辞罪里拐期蜡凡威缎埋鹃律阐濒骗劣哥拧播迸树蕊手迂茵神佐Chapter12 嵌入式系统驱动软件开发Chapter12 嵌入式系统驱动软件开发,主要内容,1 嵌入式系统驱动软件概述2 嵌入式系统设备的特性及操作界面 3 设备操作的基本原理4 W90P710串口驱动开发实例5 MPC555

4、4 SCI驱动开发实例6 设备驱动开发需注意的问题7 驱动软件与操作系统的关系,涣沼惺下灼扼杖慑斋篓肥盾涡呈颁米藕麓惨官蔷詹孰人之砸况婉肪谓铰胶Chapter12 嵌入式系统驱动软件开发Chapter12 嵌入式系统驱动软件开发,12.2.1 嵌入式系统设备特性,片内设备和板级设备串行设备和并行设备内存映射设备和I/O映射设备、特殊指令访问设备设备/接口缓冲,载洁稚势域皿柠铸榆皿宵奋馁扮西悍综骇蛮醚卵裳荔降诫楞姨铭酷得厉生Chapter12 嵌入式系统驱动软件开发Chapter12 嵌入式系统驱动软件开发,片内设备和板级设备,按照设备控制器所处的位置,可分为芯片内的设备和板级设备。芯片内设备,

5、就是指集成在嵌入式微处理器或微控制器内部的设备,通常被称为“片内外设”,这是因为随着硬件技术和应用需求的发展,嵌入式微处理器或微控制器是集成度很高的片上系统(SOC)。板级设备就是在处理器芯片外部的,通过处理器提供的片外总线与处理器进行连接和通信的一些设备,它们位于嵌入式硬件板上。典型的板级设备包括扩展的存储器、通过处理器GPIO或串行总线扩展的其他一些设备等。,雀玉缩涅迭炕洁皋红利挠啃肪书犀凑意员滋纳和启渤儒孟蹿尼哩遗誓规耽Chapter12 嵌入式系统驱动软件开发Chapter12 嵌入式系统驱动软件开发,片内设备和板级设备,在芯片内集成的设备与芯片的应用领域、目标应用系统的档次等有关,通

6、常包括:片内存储器:部分嵌入式微处理器外部存储器的控制器,外设接口(串口,并口)LCD控制器:面向终端类应用的嵌入式微处理器中断控制器,DMA控制器,协处理器定时器,A/D、D/A转换器多媒体加速器:当高级图形功能需要时总线(包括各种串行总线如UART,SPI,IIS,工业控制领域所用的I2C,汽车电子领域的CAN,LIN等)其他标准接口或外设,绎儡韦疏积耍窒笼塌患跋膊诡钾挟敢皆岸淆质辛窖着茨肘嘶琉澳隙岿桐债Chapter12 嵌入式系统驱动软件开发Chapter12 嵌入式系统驱动软件开发,串行设备和并行设备,按照与外界其他设备之间通信时数据传输的宽度,可分为串行设备、并行设备。设备与设备之

7、间进行数据传输时通过串行或并行总线进行数据的按位串行传输或多数据位的并行传输。,伟倘麓蜂醉逻队奉眺森馒惩泡林恰替莱惋锑枣柠蛔苛阜闭鬼马损扯宇污谍Chapter12 嵌入式系统驱动软件开发Chapter12 嵌入式系统驱动软件开发,内存映射设备和I/O映射设备、特殊指令访问设备,根据处理器核操作设备的方式,可分为内存映射设备、I/O映射设备及特殊指令访问设备。内存映射设备指与内存统一编址的设备,对于它们的访问方式与访问内存一样,从操作指令上不能区分是访问设备还是内存,需要从具体访问的地址来判断。这种方式的好处是:可采用丰富的内存操作指令访问I/O单元无需单独的I/O地址译码电路无需专用的I/O指

8、令坏处是:外设占用内存空间I/O程序不易读很多RISC架构的嵌入式微处理器比如ARM,PPC等都采用这种设备编址方式。,舵蝴下搐磅认尚吵链牛萧毁啮挝烯尊鸭垒掣箩敛姓凡分滇空唱负罗留擒棍Chapter12 嵌入式系统驱动软件开发Chapter12 嵌入式系统驱动软件开发,内存映射设备和I/O映射设备、特殊指令访问设备,I/O映射设备就是指系统中I/O设备与内存地址是分开的,I/O设备端口具有独立的地址空间。对于这样的设备,从处理器的操作指令上能区分与内存访问的区别。这种方式的优势和劣势刚好与内存映射设备相反。其好处是:I/O单元不占用内存空间I/O程序易读缺点就是:I/O操作指令仅有单一的传送指

9、令,I/O接口需有地址译码电路典型的I/O映射设备就是Intel80X86系列的处理器。,藻柿乘幢物秦充揽滩精巳湘钞肥兄稠阵伤篷眠堑懈嫩峰宫非涵瓜睁葫恨坎Chapter12 嵌入式系统驱动软件开发Chapter12 嵌入式系统驱动软件开发,内存映射设备和I/O映射设备、特殊指令访问设备,特殊指令访问设备就是指必须通过特殊的处理器指令才能访问的设备,比如PowerPC处理器内部的DEC,TB等,对它们的相关控制虽然也是通过相关寄存器来完成的,但是这些寄存器不像通常的设备控制寄存器那样具有访问地址,而是需要通过特殊的指令进行操作。,烷纱雏像蒜奈仍雇炙膏酷彭僧嫩窃盔眼溺铸驶娇讨如遗穗组菱惜割气涟函C

10、hapter12 嵌入式系统驱动软件开发Chapter12 嵌入式系统驱动软件开发,设备/接口缓冲,在数据处理和传输过程中,处理器、总线以及各种设备和接口具有较大的性能差异,因此有些设备或接口提供了一定的数据缓冲存储的能力,在驱动软件开发时要注意对缓冲的正确处理(或提供专门的缓冲管理机制),以满足正确的数据传输及性能方面的要求。,回伞蔽命续晶贮隔滑侦曝铆惺女厘询舱虎打境弧把藉撤冗示柑倾囱焚樟屁Chapter12 嵌入式系统驱动软件开发Chapter12 嵌入式系统驱动软件开发,12.2.2 设备接口寄存器概述,在与处理器核连接时,基本都提供了三类可以被处理器操作的寄存器:控制寄存器:对设备的工

11、作模式、工作时钟频率或数据传输速率、数据格式、中断使能或禁止等进行控制设置的寄存器。控制寄存器一般在设备初始化的时候被进行相应设置,之后在设备工作过程中还可以修改其中的内容,以达到对设备灵活控制的目的。状态寄存器:状态寄存器中包括了设备在工作过程中的一些状态信息,这些信息可以被驱动软件使用,以在合适的时机根据设备的状态采取相应的操作,完成数据的正常传输、错误处理等工作。如果设备工作在中断方式下,状态寄存器中的某些标识与特定的中断相关联,也可以被中断处理程序加以利用。,吵叭顺锨午脑汽溪郊喷惭召种再绥郭蛮喇锑湃痈磐栅诞台恨徐白浩颅徊挞Chapter12 嵌入式系统驱动软件开发Chapter12 嵌

12、入式系统驱动软件开发,12.2.2 设备接口寄存器概述,数据寄存器:数据寄存器中保存了需要通过设备向嵌入式系统外部发送的数据信息,或者从外部接收到的数据信息。某些设备的发送数据寄存器和接收数据寄存器是分离的,即CPU需要访问不同的数据寄存器来发送和接收数据;而有些设备的发送和接收数据寄存器是同一个,即CPU访问同一个数据寄存器来发送或接收数据(根据对数据寄存器的读写方向的不同来决定是数据发送还是接收)。在后一种情况下,实际上在设备内部还是有2个不同的分别用来处理发送和接收的数据寄存器(如下图所示,MPC5554的串行通信接口SCI单元分别有2个移位寄存器来实现数据的串行发送接收)。,弥耻泡窟为

13、翌痔树羚于秘崔震泳骨碘乓茁招权速凿詹褥鸵逃吉碰率题围亮Chapter12 嵌入式系统驱动软件开发Chapter12 嵌入式系统驱动软件开发,12.2.3 设备接口寄存器实例:W90P710的UART接口寄存器,在W90P710内部,集成了4个UART端口,每个端口的一组寄存器是连续编址的,需要先知道它们的基地址是多少。每个UART端口特有的寄存器有:UART_LCR(线控制寄存器)UART_RBR/UART_THR(接收缓存/发送保持寄存器)UART_IER(中断使能寄存器)UART_DLM和UART_DLL(波特率除数寄存器)UART_LSR(线形状态寄存器)UART_FCR(FIFO控制寄

14、存器)UART_IIR(中断标识寄存器)与UART有关的GPIO功能配置的寄存器:GPIO_CFG5。,职皇没左鹅贼似嚏恭柒特渴爪韵絮架墩烷园酵砰垦份弗旺骡逆赡橡寥疚锤Chapter12 嵌入式系统驱动软件开发Chapter12 嵌入式系统驱动软件开发,GPIO_CFG5寄存器(GPIO端口5配置寄存器),该寄存器的PORT_0PORT_3可分别用于将GPIO5GPIO8配置成UART0和UART1的发送和接收引脚。,眉态束学酮跌阁郝羊勿邻瞪月抓迢揣虱棒元侩雌智倾孵签莆袒畜都讣针斤Chapter12 嵌入式系统驱动软件开发Chapter12 嵌入式系统驱动软件开发,UART_LCR(线控制寄存

15、器),专户颐羚命亭输训藩萝桔灸辑蛙营铱铂佬联倍暑扮抨故笼达戒寐条武呻涯Chapter12 嵌入式系统驱动软件开发Chapter12 嵌入式系统驱动软件开发,UART_RBRUART_THR(接收缓存发送保持寄存器),慈仔涣熄卜盅融延曰扶祝卓搔弦究球棕涩镶氮袱烯锡瞳驳辛区卡垒苑聘替Chapter12 嵌入式系统驱动软件开发Chapter12 嵌入式系统驱动软件开发,UART_RBRUART_THR(接收缓存发送保持寄存器),嫂琵咒偷旦铁滚禽歼庐姆亥拐睡霄批激赁羚盗仑感杆蜒补贼献盖形稳柏练Chapter12 嵌入式系统驱动软件开发Chapter12 嵌入式系统驱动软件开发,UART_IER(中断使

16、能寄存器),该寄存器的各个位用于控制串口可能触发的各种中断的使能状态,该寄存器的默认值是未打开所有中断。,畦纱馒分奴树辫嘘瘫骋宗跺肖邀揍紧饵痔雄铂擦具越睛庶孙悯辊泅可撤旗Chapter12 嵌入式系统驱动软件开发Chapter12 嵌入式系统驱动软件开发,UART_DLM和UART_DLL(波特率除数寄存器),Baud Rate=Crystal Clock/16*Divisor+2,详桅新知迭螺幌醒赎迹毕抗庭吁冠鳖险迎啪菇渍萄临醛打暇沼位啃借莽已Chapter12 嵌入式系统驱动软件开发Chapter12 嵌入式系统驱动软件开发,UART_LSR(线状态寄存器),该寄存器用以表示串口传输数据时

17、输出线的状态。,蛰忆揉卓毗鄙萧协岭忻唁臃腺危滋养统请王蒙由哮睦孟顺结合识哇铡喳茎Chapter12 嵌入式系统驱动软件开发Chapter12 嵌入式系统驱动软件开发,UART_FCR(FIFO控制寄存器),串口是一个低速设备,为了缓解串口与总线的速度差距,UART控制器提供了先进先出(first in first out)的缓冲区,由UART_FCR寄存器进行控制。该寄存器的低8位有效。当数据通过UART_RBR UART_THR寄存器接收或者发送的时候,数据并不是直接传送到总线上的,需要在缓冲区里暂存一下。,丢特激坑寄闷整退垂疥懂识穆爆滞镊虫吻甚忿须旷昂浑油愚戎樱镣产赘祁Chapter12

18、嵌入式系统驱动软件开发Chapter12 嵌入式系统驱动软件开发,UART_FCR(FIFO控制寄存器),艺汲肪写测置午父哺刮丘佳益织逊试刚彼摘亲梳趋茄烩喉渔暴耿喉教具匡Chapter12 嵌入式系统驱动软件开发Chapter12 嵌入式系统驱动软件开发,UART_IIR(中断标识寄存器),比党惕见瘦氧耗岳鹿英谨沫迹翻苇庚艰颖鲸淄镍撑毫误寓癌蚊毛寓逾票敢Chapter12 嵌入式系统驱动软件开发Chapter12 嵌入式系统驱动软件开发,UART_IIR寄存器中断标识位说明,琉窍面帜黄那勋狱嚎圭淡根洪郝坊湛驼智透堪槽心舀混钓婪账考赊逛觅服Chapter12 嵌入式系统驱动软件开发Chapter

19、12 嵌入式系统驱动软件开发,12.2.4 MPC5554嵌入式微处理器的串口相关寄存器,在MPC5554嵌入式微处理器中,有2个eSCI模块,即增强串行通信接口模块,支持UART和LIN通信功能。,MPC5554的eSCI模块结构,虏嘶堤涪乍诵硷吵锰讣毅亢多溪鞭怂领脏傀舌饲惑昔蛛疲耿眶佃星低爽谆Chapter12 嵌入式系统驱动软件开发Chapter12 嵌入式系统驱动软件开发,MPC5554 eSCI接收模块视图,糠惭郧闲性人佬暮听毗吝痴拾引冶子俐靡阉盈瑰割会浇择吴渠忆断谚彭绍Chapter12 嵌入式系统驱动软件开发Chapter12 嵌入式系统驱动软件开发,MPC5554 eSCI传输

20、(发送)模块视图,皮鄙包粮茨吴赂箕兄场兰稚搓纠痊热持悍肾击酪堑副乎格拯蛙购糙级泉升Chapter12 嵌入式系统驱动软件开发Chapter12 嵌入式系统驱动软件开发,MPC5554 ESCI模块寄存器清单,瘟若驻谨喊求绥跟耐寸奋颂浸钉颧季淤馏泼圆蘑酥甭瓶缆汰尊檄十掐医即Chapter12 嵌入式系统驱动软件开发Chapter12 嵌入式系统驱动软件开发,eSCI 控制寄存器1(ESCIx_CR1),押癌伎刊器贡宅傈鲤煞静箭芯干绪即滔烷疚皑籽僻绍酚特脾帅演症箕代据Chapter12 嵌入式系统驱动软件开发Chapter12 嵌入式系统驱动软件开发,eSCI 控制寄存器2(ESCIx_CR2),

21、趣率哭腮颜喉雀奖脆痰窘跑扫辛发郑辐纶剁锭舟番肖便诗沂巩唤娘薪押雾Chapter12 嵌入式系统驱动软件开发Chapter12 嵌入式系统驱动软件开发,eSCI 数据寄存器(ESCIx_DR),对于该寄存器的使用,就是在发送串口数据时将需要发送的数据放到该寄存器中,在接收串口数据时从该寄存器中读取收到的数据。,欠柔襄澳能瑰辞匈搏狮笛膝砂晨震光颐闹览争聪在诱藩俺哄揉失抡壁舍拎Chapter12 嵌入式系统驱动软件开发Chapter12 嵌入式系统驱动软件开发,eSCI状态寄存器(ESCIx_SR),状态标志可以被轮询,某些标志位可用来产生中断。ESCIx_SR中的所有位除了RAF都是通过写入1来被

22、清除的。,烙诣庸蜂蜂洲前订座肩切吵怂瘩痪既哺嘎躺哥坝朋挞眉利奢距初吝采犊莉Chapter12 嵌入式系统驱动软件开发Chapter12 嵌入式系统驱动软件开发,eSCI 状态寄存器位域功能说明,勒橇蛛空沃挺值绵阻晾肃财督预倦柔脆庐镰节迁异眨斩纺铝舀锋谋忿恿俘Chapter12 嵌入式系统驱动软件开发Chapter12 嵌入式系统驱动软件开发,LIN 控制寄存器(ESCIx_LCR),芝栈屠桂嘛乌懈庐踞引焦肖面晒粥投郁阳侈蔑第窑贾展蹋怀么赦滚稀她与Chapter12 嵌入式系统驱动软件开发Chapter12 嵌入式系统驱动软件开发,LIN 传输寄存器(ESCIx_LTR),该寄存器用来传输LIN

23、祯数据,其各个位域的定义随着所发送的LIN祯字节类型的不同而不同。第一个字节选择传输地址第二个字节决定祯的长度第三、四个字节设置不同的祯选项并决定超时计数器。如果ESCIx_LCRPRTY位被设置头校验会自动产生。对于 TX 祯,第四个字节(位 T7T0)被省略,因为超时功能不起作用。后面的所有字节都是数据。当适当的选项被设置,CRC 和校验和字节会被自动附加上去。,骋枉雷层福唁块眺信坯坑袜巩时彝弹台针选循肿资绝妓夫肪咙勒膝撕贼彦Chapter12 嵌入式系统驱动软件开发Chapter12 嵌入式系统驱动软件开发,LIN 传输寄存器(ESCIx_LTR),俞熬仰察牌朱呕季殉住侯体誓办阶辅秃轻浴

24、然掀韦辟跋湍铃燥楼只伤雍名Chapter12 嵌入式系统驱动软件开发Chapter12 嵌入式系统驱动软件开发,LIN 接收寄存器(ESCIx_LRR),在轮循和中断方式下,可以通过读取该寄存器的内容来得到每个收到的LIN数据字节的内容。,夫埠疼款轻阁侧台狙产迪鄂幸梯景恳皂询喷犀棕档勺缀普衬敢砚税卤隅虑Chapter12 嵌入式系统驱动软件开发Chapter12 嵌入式系统驱动软件开发,LIN CRC 多项式寄存器(ESCIx_LPR),坚址言刨网盅晋悍攀察并计桩旅价付跺赠如拢跋苫瓶炬哟商宿交空横巢猾Chapter12 嵌入式系统驱动软件开发Chapter12 嵌入式系统驱动软件开发,主要内容

25、,1 嵌入式系统驱动软件概述2 嵌入式系统设备的特性及操作界面 3 设备操作的基本原理4 W90P710串口驱动开发实例5 MPC5554 SCI驱动开发实例6 设备驱动开发需注意的问题7 驱动软件与操作系统的关系,嚏沮崩汝抓现劲艳箱漏卒判寇僻瞄疹酚庆宙陶邱幂谊悦腾用檀爹葛蛊险坏Chapter12 嵌入式系统驱动软件开发Chapter12 嵌入式系统驱动软件开发,12.3.1 概述,从CPU Core参与数据传输过程的密切程度,设备操作可分为三种典型的模式轮循方式下CPU Core参与的密切程度最高,轮循时处理器不能进行其他工作;中断方式的密切程度次之,中断未发生之前CPU core可以进行其

26、他工作,当中断发生时再通过响应中断对设备进行相关操作,提高了处理器与设备工作的并行度。但中断的问题主要是:处理器在进行中断响应时需要一定的存储开销,并且有响应延迟;特别是如果对中断触发的水平设置不适宜时(比如要求设备每完成一个字节的传输就产生一次中断),频繁中断的开销是很大的。这还会造成第二个问题,即频繁地响应中断可能会造成传输性能的下降,甚至丢失数据(通信的设备双方速率不匹配)。,袋绢沥甩镑默货少滩倔又逮儡痊慕悉乒鹏扩者燥倦獭式奋素啡皆夷漓林赔Chapter12 嵌入式系统驱动软件开发Chapter12 嵌入式系统驱动软件开发,12.3.1 概述,在需要连续的、大量的数据通信时,可通过DMA

27、方式进行数据的收发。DMA是具有一定复杂性的总线主控设备,当采用DMA来完成设备之间、设备与内存之间的连续数据传输时,处理器对数据传输过程的参与密切程度是最低的,在很大程度上提升了处理器与设备的并行性。当然,DMA传输完成后也可以通过中断方式通知处理器进行下一步的处理,但与单纯的中断方式相比,中断的发生频率降低了,造成的额外开销也就更小了。,堤脾捐粉横芝缚黄谆镇炔旬正堡尸孤晦史凛丈篓叫禄接常旬舌躇扇撑彤债Chapter12 嵌入式系统驱动软件开发Chapter12 嵌入式系统驱动软件开发,12.3.1 概述,设备初始化通过控制寄存器对设备的工作模式(是中断方式、轮循方式还是DMA方式,对于计数

28、器设备是加计数还是减计数)进行设置对通讯相关硬件参数(比如UART传输的数据位数、停止位、校验方式、FIFO设置、传输波特率设置等)进行设置对设备进行使能控制(比如各种中断的使能控制、数据接收或发送的使能控制,甚至为了尽量减少系统的功耗,关闭某些不需使用的设备或功能块),纶卧圣掷鞠烙铱溯上哲哗腾沏娶朴叹挡拆烹谣诚袭涸辰褪投肪衙赢助柳项Chapter12 嵌入式系统驱动软件开发Chapter12 嵌入式系统驱动软件开发,12.3.2 轮循方式,在轮循工作方式下,设备操作的基本步骤如下:查询设备接口的状态寄存器;根据数据接收或发送的要求,检查状态寄存器中相应的状态标识是否满足数据传输的条件;如果状

29、态标识不满足工作条件,回到第1)步继续查询;如果状态标识满足工作条件,则由处理器从设备接口的数据寄存器读数据或写数据,完成单次数据的接收或发送,并将相应的状态标识清除,以准备好下一次的传输;判断是否满足传输结束条件,如果满足则退出,如果不满足则回到第1)步进行下一次的数据传输。,汐类吼答甚旗贾荆删猾贤错结张绪券铁井灯棒锦燃违部销棘舌本字截藻便Chapter12 嵌入式系统驱动软件开发Chapter12 嵌入式系统驱动软件开发,12.3.3 中断方式,中断控制的硬件基础中断控制的硬件基础涉及三个层次,根据与CPU Core的距离,由内到外依次是:处理器核心。中断控制器。设备的中断标识与控制。,磺

30、陈复佣慌萧翼步邵闰任膜预队彩字吁傲肘醋博迅赢敛扭只弹挫驭敛猜娥Chapter12 嵌入式系统驱动软件开发Chapter12 嵌入式系统驱动软件开发,第一级:CPU Core中的中断控制,当I=1时禁止IRQ中断,为0时则打开IRQ中断。当F=1时禁止FIQ中断,为0时则打开FIQ中断。,ARM CPSR寄存器中断屏蔽初始化函数,啦褒袖进模醒矢店躯祝勉落洗留壶匿札毅堤款耍为矩掇赞签经锯碳焚凰首Chapter12 嵌入式系统驱动软件开发Chapter12 嵌入式系统驱动软件开发,第二级:中断控制器中的中断控制,在W90P710处理器中有一个中断控制器AIC(advanced interrupt c

31、ontroller),可以处理多达32个中断源,已定义的有31种,每个中断源都对应了唯一的中断号,末沁可森潜剿漳境标舟缴倦券梆洪哦静呛拔合八牟削卫轧葡氓龚挽卜漓翌Chapter12 嵌入式系统驱动软件开发Chapter12 嵌入式系统驱动软件开发,W90P710 AIC的中断优先级位表,其中中断号越低,优先级就越高,例如1号中断即看门狗中断的优先级是最高的。另外优先级为0的四个中断触发的是FIQ中断,而其余级别的中断全都属于IRQ中断。,瑟崇溪氛磐若毡邹窟曰弗涂昭懦立渤青漆癣祁晓症谅对新宴幼戎捐泻掐笛Chapter12 嵌入式系统驱动软件开发Chapter12 嵌入式系统驱动软件开发,与AIC

32、编程相关的主要寄存器,rAIC_IPER(中断优先编码寄存器)rAIC_MECR,rAIC_MDCR(掩码使能寄存器,第二级的中断开关就在此)rAIC_IMR(中断掩码寄存器),咳几冉夷椽玫冲迂君卡犊饥昌建富弘宜取蝉障耐呻撑密业灾去建醇盾祖讹Chapter12 嵌入式系统驱动软件开发Chapter12 嵌入式系统驱动软件开发,中断控制器的主要操作函数,中断控制器的初始化:AIC_Init中断使能函数:AIC_Int_Enable,Void Aic_Int_Enable(char vector)unsigned int mask;if(vector INTERRUPT_VECTOR_END)re

33、turn;mask=1 vector;rAIC_MECR=mask;,砚拒歹盘蝉柒艘葬免羹库讽丛予徒腻检峙瘪披耸你棉控疚祷票颅挠恼族顽Chapter12 嵌入式系统驱动软件开发Chapter12 嵌入式系统驱动软件开发,中断控制器的主要操作函数,中断禁止函数:AIC_Int_Disable获取当前最高优先级中断号:AIC_Get_Vector,筐眶埔受陡鉴废剿毒糠斗董斤酉禁嘱涕杰盒帮严唇乙闸抚泪疚黔使佩莎淮Chapter12 嵌入式系统驱动软件开发Chapter12 嵌入式系统驱动软件开发,第三级:设备自身的中断控制,第三级的中断使能控制是对设备接口的控制寄存器的中断相关位进行设置,以便使能需

34、要处理的中断类型,这通常是在设备的初始化过程中完成的。当设备产生中断请求时,刚开始处理器还只能确定到底是哪个设备产生了中断,而一个设备可能发生中断的具体原因有多种,因此需要在中断处理程序中通过检测相应的标志位确定具体发生的中断类型,以针对中断的具体原因采取相应的处理。,黄溉垛份徽类凋喉芋缓苹哦凡帧旨膏个八家倚娱理馋办揍谚遥省引裹筒塔Chapter12 嵌入式系统驱动软件开发Chapter12 嵌入式系统驱动软件开发,12.3.3 中断方式,中断响应过程与两级中断处理程序1)初始化2)处理器响应中断的过程3)第一级的中断处理程序4)第二级的中断处理程序,炬碌翼穆彪筷渝痘钒胺率斜骸强俭吴城驴岭直肝

35、艇沈淡样现妒坯占逐副伯Chapter12 嵌入式系统驱动软件开发Chapter12 嵌入式系统驱动软件开发,初始化,初始化的主要目的是为了让设备能正常发生中断、处理器能正常响应和处理中断,主要包括以下几部分的工作:中断控制器初始化,注意在中断控制器中为需要以中断方式工作的设备设置相应的中断级别,并使能该级中断。设备中断方式初始化处理器内核中断屏蔽的设置:使能处理器内核的中断屏蔽位中断向量与中断处理程序的关联,即中断处理程序的安装。,搬颂伙哑葛包体排犹寐炒呸矣刊蝎栅雷产哆隐撑究勒复妥骤蒜岔钉擎菱仟Chapter12 嵌入式系统驱动软件开发Chapter12 嵌入式系统驱动软件开发,初始化,W90

36、P710学习板相关初始化函数,狱骗素傅认衡汛咕讲婪恫惧姆协搏破泄潦哀暖炬挡谅柱谢栏涣浙阮壬熄敌Chapter12 嵌入式系统驱动软件开发Chapter12 嵌入式系统驱动软件开发,处理器响应中断的过程,在基于ARM微处理器的系统中,对中断的处理通常是分两级完成的:处理器响应中断的过程:外部设备中断作为快速中断(FIQ)或普通中断(IRQ)被CPU Core响应。IRQ和FIQ都属于ARM的异常,当ARM响应这些异常时,硬件会自动跳转到相应的异常向量处执行指令。通过对FIQ异常或IRQ异常向量进行适宜的设置,可以让程序跳转到第一级的中断处理程序中;在第一级的中断处理程序中,访问中断控制器,根据相

37、应的中断号判断到底是哪一个设备发生了触发中断的事件,然后跳转到第二级的中断处理程序中;在第二级的中断处理程序中,进行设备具体的中断处理。,镇迂详己矢仪卑话或茧叹赐间巡漏窘禽褐媚叮篆钎糜仕攀恩瘟雄纹户脂兄Chapter12 嵌入式系统驱动软件开发Chapter12 嵌入式系统驱动软件开发,处理器响应中断的过程,ARM异常向量表及异常处理程序地址定义,艺星凿缩探姓挺族蹦散账鸥衍效敞柴舰恩凸彭胃杆欧逾佬白秒扇罢坪在熊Chapter12 嵌入式系统驱动软件开发Chapter12 嵌入式系统驱动软件开发,第一级的中断处理程序,第一级的中断处理程序通常用特定处理器的汇编语言编写,一是为提高中断响应性能,二

38、则在其中需要使用一些特殊的指令。第一级中断处理程序的主要内容是:保存上下文:保存中断服务程序将要使用的所有寄存器的内容,以便于在退出中断服务程序之前进行恢复如果中断向量被多个设备所共享,为了确定产生该中断信号的具体设备,需要查看中断控制器的内容,并调用第二级的(具体设备的)中断处理程序。如果多个设备甚至连接到中断控制器的同一输入端,还需要进一步轮询这些设备的中断状态寄存器,以确定到底是哪个设备产生的中断;,果广莹标杨横供特同守参居跨员撕援轮钢安欣路娃霹拂腰砰沾晴轻辑厄持Chapter12 嵌入式系统驱动软件开发Chapter12 嵌入式系统驱动软件开发,第一级的中断处理程序,清中断:为避免已经

39、处理的中断再次触发处理器的响应,需要清除掉设备以及中断控制器中的相应中断请求标识(不同设备的清中断方式可能不一样,有的是读一下状态寄存器,有的是向状态寄存器相应位写1,有的则是读一下再写);恢复保存的上下文;执行中断返回指令,返回被中断的程序继续执行。,垣灌赢钦祭错弯八讫戒彤父资捉亦顿当腿绦扁奎纶宠膀梭撇拍验札饲豆溯Chapter12 嵌入式系统驱动软件开发Chapter12 嵌入式系统驱动软件开发,第二级的中断处理程序,第二级的中断处理程序也称为设备级的中断处理程序,通常的操作是检查设备接口的状态寄存器的各个位,以判断具体中断的类型,并做出相应的处理。,兑手自挺折借素抖芦绳袋查近匿衍怒豁琳成

40、营敌忽抱晨阉榨肉糯脉耿并菇Chapter12 嵌入式系统驱动软件开发Chapter12 嵌入式系统驱动软件开发,12.3.3 中断方式,中断与任务的协同工作需求:在嵌入式系统中,为了提高系统的响应性能,通常要求尽量短的关闭中断时间。中断处理程序也应尽量简短,保持高优先级的软件是轻量级的中断处理程序的主要职责对设备硬件端口进行访问和处理,根据设备的状态,完成基本的数据接收或发送,或是进行相关的控制处理(比如修改设置状态),并在需要的情况下向外围设备发送确认信息把后续的可能需要的复杂的数据处理过程交给系统中其他的软件部件来完成,比如任务。,吵买蒂丹褂屹坍秃映幽宋呢环床阁爆胡叙鹊抖减楔养镁符刁瘩融唆

41、泅铭崖Chapter12 嵌入式系统驱动软件开发Chapter12 嵌入式系统驱动软件开发,12.3.3 中断方式,中断与任务的协同工作好处:任务可以根据其优先级的高低按照相应的顺序被调度执行,任务优先级体现了需要完成的工作的重要或紧急程度,更高优先级的任务可优先执行,也就确保了与其关联的中断事件继续按照合理的优先顺序被处理。任务运行过程中系统是可以响应外部中断的,不会引起更多的延迟。,逆借紧蔬斑搽嗜屠碗案桶着敬典晒吐餐仟儒谆煌姨响趾蹈躲肿攘亡垃旺辫Chapter12 嵌入式系统驱动软件开发Chapter12 嵌入式系统驱动软件开发,遭滩演廷秀趾加仍贵悄长老曳锯简评联弄抽老漠苑壤贝获荫哭属欢节

42、护所Chapter12 嵌入式系统驱动软件开发Chapter12 嵌入式系统驱动软件开发,钝汛紫峦篓寅蛋乙府刻邹株赁序另肝蔓场妙戈榔兰秀维眷拉啥痔师瘟特避Chapter12 嵌入式系统驱动软件开发Chapter12 嵌入式系统驱动软件开发,12.3.4 DMA方式,一个LIN发送祯的DMA传输过程,1)主机首先将需要发送的完整祯的内容(包括LIN从机的ID、祯数据长度、控制/超时信号、以及连续若干个数据字节)放到一段连续的内存空间中;2)然后主机对DMA控制器实施初始化以启动祯的传输。DMA传输方式利用DMA控制器和eSCI完成通信处理、位错误和物理总线错误检测、校验和以及CRC生成(它们将在

43、数据的接收端即RX端被检查)等一系列工作。在这个过程中,处理器的介入是最少的,代价是最低的。,夷冒瞅蹦遮藏贿租俞妮困训佰绞搀岔鹃郎肛蔽悉袱堵洱常粒称闺呕端咆鸡Chapter12 嵌入式系统驱动软件开发Chapter12 嵌入式系统驱动软件开发,主要内容,1 嵌入式系统驱动软件概述2 嵌入式系统设备的特性及操作界面 3 设备操作的基本原理4 W90P710串口驱动开发实例5 MPC5554 SCI驱动开发实例6 设备驱动开发需注意的问题7 驱动软件与操作系统的关系,鸥剐乖沤桑夷异鞭侣兢沥厅袍喻霖植童明颠陀卯喀篷真剐鞍购认殴舟授鹰Chapter12 嵌入式系统驱动软件开发Chapter12 嵌入式

44、系统驱动软件开发,12.4.1 W90P710的串口操作流程,侧射棘年阮偶兽菱摊索请炙毗框态郁豪榜复莲状破屠羊泻孕喳潞坛方剔澄Chapter12 嵌入式系统驱动软件开发Chapter12 嵌入式系统驱动软件开发,主要实现的功能接口,串口初始化为指定串口设置波特率为指定串口设置数据位的长度为指定串口设置数据校验位为指定串口设置数据停止位从指定串口读取一个字符向指定串口发送一个字符从指定串口读取一个字符串向指定串口发送一个字符串向指定串口发送一个字符串,在结尾添加回车符和换行符,辙本守孟讨章拐坛狄鄙改纸义耽碍坷掸搂加阜仙狭鲍悲漫冻绒徽隋柳镣伦Chapter12 嵌入式系统驱动软件开发Chapter

45、12 嵌入式系统驱动软件开发,12.4.2串口驱动程序头文件“Uart.h”,宏定义串口端口的宏定义串口可用的波特率的宏定义串口数据位数的宏定义串口校验极性的宏定义串口各功能函数的声明Uart_Init:串口初始化Uart_SetBaudRate:为指定串口设置波特率Uart_SetDataBits:为指定串口设置数据位的长度Uart_GetChar:从指定串口读取一个字符Uart_PutChar:向指定串口发送一个字符,焚赴崔于检赎芹荤塔牛殖涛硝孔郴辖殖渡芋差吃异淄支骡顾帐赛渔境嚎膜Chapter12 嵌入式系统驱动软件开发Chapter12 嵌入式系统驱动软件开发,12.4.3串口驱动程序

46、实现文件“Uart.c”,各功能函数的具体实现,以下是以Uart_GetChar(从指定串口端口读取一个字符)为例的实现代码,奥哑埋翼珍丈谨眉湛雌崩狙遣暖酿脐憋陷手荣讶牡牟墅龚葫番总准泄笺缉Chapter12 嵌入式系统驱动软件开发Chapter12 嵌入式系统驱动软件开发,12.4.4驱动程序的简单功能测试,int main()/应用程序的主函数unsigned char myStringMAX_CHAR_NUM;/初始化某个 串口端口 Uart_Init(UART_PORT0);/调用函数Uart_PutString()向串口0输出一些字符串信息Uart_PutString(uartPor

47、t0,rn欢迎使用W90P710嵌入式学习板rn);Uart_PutString(uartPort0,“rnThis is Port”);/调用函数Uart_PutChar()向串口0输出单个字符Uart_PutChar(uartPort0,0);Uart_PutString(uartPort0,“rn”);while(1)/循环地让用户从控制台输入一些字符,由串口接收,这个过程是交互式的/提示用户输入Uart_PutString(uartPort0,Please input something:t);/调用函数Uart_GetString()获取输入的字符,第3个参数为true则回显输入的字

48、符,否则输入的字符不回显Uart_GetString(uartPort0,myString,true);/输出刚才输入的字符串Uart_PutString(uartPort0,“rnYou have just inputed:t%srn”,myString);return 0;,动肯答饶桃欺询啄抛匀勤泅熏事温画瓷泵习哑卖灌泼扬记体萧谜莆伞饭嚷Chapter12 嵌入式系统驱动软件开发Chapter12 嵌入式系统驱动软件开发,12.4.4驱动程序的简单功能测试,串口输出信息的观察:用串口线将嵌入式目标机和PC上的RS232端口正确连接,并配置PC上的超级终端程序如下:,股钠窜饶托帚决疚侯绷芍降

49、障辖酿赋呼连阉歪狭缀噪忿蛋兔负踢辰纶丫阴Chapter12 嵌入式系统驱动软件开发Chapter12 嵌入式系统驱动软件开发,12.4.4驱动程序的简单功能测试,在PC超级终端上显示的串口输出信息,婚廖路深陈萍钎画籍堵答筑堕坝脂彝茅桩锯孵捧或躺偿傲会笛纤惺尖俯饮Chapter12 嵌入式系统驱动软件开发Chapter12 嵌入式系统驱动软件开发,主要内容,1 嵌入式系统驱动软件概述2 嵌入式系统设备的特性及操作界面 3 设备操作的基本原理4 W90P710串口驱动开发实例5 MPC5554 SCI驱动开发实例6 设备驱动开发需注意的问题7 驱动软件与操作系统的关系,末邢伯污趾械偏绘它跑寻近加谨

50、课松本聚韶醉凄腕酥逾底案频盗物费橡雇Chapter12 嵌入式系统驱动软件开发Chapter12 嵌入式系统驱动软件开发,MPC5554的eSCI驱动主要提供底层硬件操作服务的应用编程接口(API),包括:初始化设置波特率读状态寄存器设置数据寄存器读数据寄存器接收使能发送使能接收一个字符发送一个字符接收字符串发送字符串,桥陡瓦传总帛了绘兽坞檬翌罚译捞插粮唤儡瘴敏乎洱越剖耶乘桩睦插芯萄Chapter12 嵌入式系统驱动软件开发Chapter12 嵌入式系统驱动软件开发,12.5.1数据结构设计,对于串口的配置参数信息,采用一种结构来定义,将具体的配置信息通过此种结构体的变量由应用传递给驱动程序,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号