嵌入式系统组件课件

PPT
  • 阅读 225 次
  • 下载 0 次
  • 页数 60 页
  • 大小 764.000 KB
  • 2022-12-05 上传
  • 收藏
  • 违规举报
  • © 版权认领
下载文档30.00 元 加入VIP免费下载
此文档由【小橙橙】提供上传,收益归文档提供者,本网站只提供存储服务。若此文档侵犯了您的版权,欢迎进行违规举报版权认领
嵌入式系统组件课件
可在后台配置第一页与第二页中间广告代码
嵌入式系统组件课件
可在后台配置第二页与第三页中间广告代码
嵌入式系统组件课件
可在后台配置第三页与第四页中间广告代码
嵌入式系统组件课件
嵌入式系统组件课件
还剩10页未读,继续阅读
【这是免费文档,您可以免费阅读】
/ 60
  • 收藏
  • 违规举报
  • © 版权认领
下载文档30.00 元 加入VIP免费下载
文本内容

【文档说明】嵌入式系统组件课件.ppt,共(60)页,764.000 KB,由小橙橙上传

转载请保留链接:https://www.ichengzhen.cn/view-92663.html

以下为本文档部分文字说明:

8嵌入式系统组件2嵌入式系统原理、设计与应用7嵌入式操作系统3内容嵌入式系统模型键盘LED显示器LCD显示器日历时钟模拟量输入/输出开关量输入/输出异步串行通信其它4概述-组件技术的优越性1.提高开发的效率开发嵌入式系统的软件时,通常一些软件模

块如UART的收发器模块在大多数的产品中都需要使用,通过把这些模块封装成组件,后续的开发继续使用,显然可以提高开发的效率。2.提高开发的可靠性新开发的软件模块都需要进行测试,包括实验室测试和公开测试,这些测试都需要时间。使用组件化的方法,可以使用以前被测试过的组件代码,可以大大提

高软件的可靠性。3.提高软件的可移植性软件组件的设计尽量采用标准的接口,如果没有标准,可以自己定义完备的接口,便于后续系统的开发时使用。例如液晶显示模块,设计成彩色的功能接口比设计成黑白的有许多优点,彩色可以

兼容黑白。4.适合于并行开发通常一个嵌入式系统的软件由许多模块组成,这些模块包括设备驱动模块、算法模块等。良好的组件化设计方法,可以把任务均分,并行开发,提高开发效率。51例:嵌入式系统模型嵌入式处理器UART串行通信收发器键盘液晶显示器

模拟量输入接口模拟量输出接口数字量输入接口数字量输出接口数码管显示器日历时钟6原型系统EMCUmemoryAIAOLCDDI/DOkeyboardUARTOthers7模型系统的软件组成模块化设计原则主程

序I/O驱动程序-软件组件8内容嵌入式系统模型键盘LED显示器LCD显示器日历时钟模拟量输入/输出开关量输入/输出异步串行通信其它92键盘+5V输出端口输入端口102键盘KeyScanKey()KeyBuf[]

KeyBufOutIxKeyNReadKeyBufInIxKeyInitPort()KeySelRow()KeyGetCol()KEY_SCAN_DLY键盘驱动程序硬件键盘矩阵KeyDownTimer提交信号量等待超时应用程序接口KeyPressKeyTi

me()KeyInitKey()KeyGetKeyCode()KeyClear()KeyHitKey()112键盘主要接口函数KeyClear():清除键盘缓冲区KeyGetKeyCode():读取一个键码KeyHitKey():检查一

个键是否按下KeyInitKey():初始化键盘模块122键盘键盘组件的使用voidmain(void){…OSInit();/*操作系统初始化*/…KeyInitKey();/*键盘模块组件初始化*/…OSSt

art();/*开始多任务运行*/}132键盘任务中使用键盘组件模块voidUserTask(void*data){Integer8keycode;Data=data;while(1){keycode=KeyGetKey

Code(0);/*等待用户键盘输入*/Switch(keycode)/*根据键的扫描码进行相应的处理*/{……}}}14内容嵌入式系统模型键盘LED显示器LCD显示器日历时钟模拟量输入/输出开关量输入/输出异步串行通信其它15

3LED显示器利用I/O端口控制LED显示器+5V当输出为低时LED为ONB0B7B6B5微处理器输出端口163LED显示器多路复用LED显示B0B1B2B3B4B5B6B7B0B1B2B3B4B5B6B7电阻数字(输出端口)段(输出端口)1时此段为ONabcdefgd.p.Digit

#1Digit#2Digit#3Digit#n-1Digit#n离散LED1时此数字为ON173LED显示器组件内部实现(软件组件的数据结构设计)(1)系统使用7段LED数码管显示器;(2)每个LED数码管有一个编号作为地

址,编号从0开始;(3)对应于每一个数码管,使用3个字节作为显示缓冲区,其中第一个存放它的字符代码,为了未来的扩展,字符代码使用ASCII码,虽然目前大多数应用的LED只显示16个16进制字符和部用户定义的图形;第二个存放颜色;第三个存

放闪烁属性。(4)需要为LED的显示模块预留一个定时器(硬件定时器或软件定时器),用于显示的刷新。183LED显示器组件内部实现接口函数显示缓冲区显示字模定时器驱动代码API_LED193LED显示器接口函数L

edInit();初始化内部数据结构LedClear();清除内部缓冲区LedDispChar(Unsigned16position,Unsigned8c,Unsigned8color,Unsignedblink);显示字符LedOff():关闭显示L

edOn():打开显示203LED显示器组件的实现Leddef.h定义组件模块的数据结构和配置led.c实现LED组件的所有函数21内容嵌入式系统模型键盘LED显示器LCD显示器日历时钟模拟量输入/输出开关量输入/输出异步串行通信其它224LCD显示器1.LC

D显示器被广泛地使用于个人设备中,应用范围还在不断扩大。LCD是一种被动显示技术,它本身不发光,利用反射光显示字符和图形。LCD的功耗非常低,于是在低功耗的场合特别是电池供电的嵌入式设备上得到了广泛的应用。2.

通常LCD使用自然光,反射自然光进行显示,如果周围的光很少或没有光,那么需要在LCD的后面放置一个光源,这个光源叫做背光。3.背光可以通过场致发光(EL)或LED来实现,EL背光非常微弱,它产生一个非常均匀的光源。用于LED的光源颜色很多,常用白光。E

L背光电流很低,但是需要较高的电压,通常在20V以上。EL背光的使用期限有限,通常在2000~3000小时。LED背光的使用寿命很长,但是耗电较多。通常LED背光嵌在LCD的后面,有很多种颜色可以选择。234LCD显示器LCD显示系统分类(3类)字符

LCD显示-与LED基本相同;图形LCD显示器-点阵;定制LCD显示器-为用户特殊定制-电子台历嵌入式处理器LCD控制器LCD驱动器LCD244LCD显示器LCD显示系统组件实现LCD控制寄存器LCD显存

254LCD显示器接口函数的实现点阵显示器的种类黑白灰度彩色方案为每一种LCD定义接口函数,优点:裁减性好,缺点:应用软件的开发需要考虑移植定义一种接口函数,支持三种LCD缺点:裁减性不好优点:应用软件的开发基本不需要考虑移植性问题2

64LCD显示器接口函数的实现-定义一种接口函数,支持三种LCD1.LCD初始化:Unsigned8LcdInit(struct*LcInitPara)2.关闭和打开显示voidLcdOff(),voidLcdOn()3.清除LCD

显示屏:voidLcdClear()4.显示字符串:voidLcdDispStr(Unsigned16row,Unsigned16col,Unsigned8*pStr,Unsigned32color,Unsigned8font,Unsigned8size)

;5.显示象素点:voidLcdPixel(Unsigned16row,Unsigned16col,Unsigned32color);6.画线:voidLcdLine(Unsigned16x1,Unsigned16y1,Unsigned16x2,Unsigned16y2,Uns

igned8Linetype,Unsigned32color);7.画矩形:LcdRectangle(Unsigned16x1,Unsigned16y1,Unsigned16x2,Unsigned16y2,Unsigned8type,Unsigned32color,Unsigned8fi

ll,Unsigned32fillcolor);8.画弧型:LcdArc(Unsigned16x,Unsignedy,Unsigned16radium,Unsigned16angel1,Unsigne

d16angel2,Unsigned32color,Unsigned8type);27内容嵌入式系统模型键盘LED显示器LCD显示器日历时钟模拟量输入/输出开关量输入/输出异步串行通信其它285日历时钟概述实现方法专用日历时钟芯片时钟芯片、电池

、32768时钟晶体软件实现295日历时钟实现原理305日历时钟接口函数1.ClockInit(),-时钟组件初始化2.ClockSetDate(),-设置日期3.ClockSetTime(),-设置时间4.ClockSetDateTime(),-设置日期和时间5.Cloc

kGetDate(),-读取日期6.ClockGetTime(),-读取时间7.ClockGetDateTime(),-读取日期时间8.ClockFormatDate()。-格式化日期31内容嵌入式系统模型键盘LED显示器LC

D显示器日历时钟模拟量输入/输出开关量输入/输出异步串行通信其它326模拟量输入模拟输入信道物理参数传感器放大器滤波器多路复用器信道选择ADC从/到微处理器模拟输入硬件结构336模拟量输入读取A/D值的方法1-慢速的A/D转换器件(1)选择需

要进行模数转换的通道;(2)触发进行模数转换(3)延迟一段时间,延迟的时间大于或等于模数转换的时间加上信号在模数转换器保持稳定的时间(4)读取模数转换的值(5)把读取的值提交给应用程序34521驱动程序MUXADC应用程序模拟输入

12345驱动程序选择要读的模拟输入触发ADC进行转换驱动程序延时超过转换时间ADC读模拟输入的二进制值返回到应用程序346模拟量输入Unsigned16AnalogInput(Unsigned8channel){/*todo:操作模拟多路开关,选择模数转换的通道*/…/*延时,等待模拟信号

在模数转换器的输入端稳定*/…/*启动模数转换*/…/*延时,等待模数转换的结束*/…/*读取模数转换的结果把返回给调用者*/…}356模拟量输入方法2:利用模数转换器的结束信号来通知用户-中断方式Unsigned16AnalogInput(Unsigned8channel){/*选择要读

取的输入通道*//*延时,等待模拟多路开关输入信号的稳定*//*启动模数转换*//*等待信号量SemaADor超时*/if(超时){/*模数转换出错处理;*/}else{/*读取转换的结果并返回调用者*/}

}voidIsrAD(){/*发出SemaAD(模数转换结束信号)*/}366模拟量输入方法3:A/D转换的速度比较快-直接在程序中读取Unsigned16AnalogInput(Unsigned8channel){/*选择模拟输入通道*

//*延时,等待模拟信号在模数转换器的输入端稳定*//*启动模数转换工作*//*检测是否转换完成,如果完成则读取转换结果*/…/*把转换的结果返回给调用程序*/}376模拟量输入关于移植性的考虑组件化方法把A/D转换的细节隐藏在组件的内部。关于A/D的精度:目前的模

拟转换器的精度有8位、10位、14位等,甚至有20位、24位或更高。为了将来技术的发展,可以把转换结果表示成32位,在一定的时期内足够用了,对于小于32位的模数转换器,低位表示转换的结果,高位用0填充,最高位可以作为符号位。387模拟量输出滤波器放大器传

感器DAC来自微处理器物理参数滤波器放大器传感器DAC来自微处理器物理参数滤波器放大器传感器DAC来自微处理器物理参数AnalogOutputChannelD/A的环节数模转换器滤波器放大器执行器/驱动器397模拟量输出主要接口函数voidAnalog

Output(Unsigned8channel,Unsigned32value);407模拟量输出使用例子voidUserTask(){Unsigned32temp;/*数据来源和处理,得到数据temp*/Analo

gOutput(0,temp);/*此时电压表的指针指示相应的模拟量*/…}-50º0º+300º仪表-50ºF~300ºF温度换算函数8位DACFSV=2.5Vcntscnts*FSV2560~100μAVI转换器(42μA/V)41内容嵌入式系统模型键盘LED显示器L

CD显示器日历时钟模拟量输入/输出开关量输入/输出异步串行通信其它428开关量输入/输出压力开关温度开关限制开关继电器触点邻近探测器控制/监视系统438开关量输入/输出开关量通常是1位计算机处理的数据以字节为单位接口函数的实现方

法1.直接以字节为单位处理开关量voidIOWrite(Unsignedaddress,Unsigned8value);Unsigned8IORead(Unsignedaddress)2.包装以位为单位处理开关量Unsigned8SwitchRead(Unsigned16

channel);voidUnsigned8SwitchWrite(Unsigned16channel,Unsigned8On_Off);448开关量输入/输出-实现方式比较方式(1)-字节优点程序的代码量

小,执行的速度快,缺点程序设计的不直观,程序的移植性不好。方式(2)-位优点可移植性好,把开关进行了抽象化,屏蔽了开关量操作的细节;程序的可读性好缺点程序的代码量比较大,程序的执行时间稍

长。由于现代处理器的速度提高和存储器的空间比较大,方式(2)带来的问题可以完全克服。458开关量输入/输出-实现方式比较voidUserTask(){…if(SwitchRead(10))==ON)SwitchWrite(20,O

N);elseSwitchWrite(20,OFF);…}46内容嵌入式系统模型键盘LED显示器LCD显示器日历时钟模拟量输入/输出开关量输入/输出异步串行通信其它479异步串行通信接收方

法1ISRRx环形缓冲区应用程序489异步串行通信-接收ISRIsrUartRx(void)/*接收中断服务例程*/{Unsigned8c;/*保存CPU的寄存器,即把ISR中使用的寄存器压栈*//*从通信控制器中读取收到的字符*/if(接收环形队列不满)

把收到的字节放于环形队列/*恢复CPU的寄存器,即把压栈的寄存器弹出*/…/*todo:中断返回*/…}Unsigned8UartGetChar(void)/*从接收环形队列中接收一个字节,返回收到的字节,如果环形队列中没有字节,那么返回空NU

LL字符*/{Unsigned8c;c=NULL;/*todo:禁止中断*/…if(环形队列不空)c=从环形队列中读取的字节;/*todo:使能中断*/returnc;}499异步串行通信-接收问题:应用程序以独占的方式访问环形

队列的过程中,中断禁止,如果应用程序不及时地取出环形队列中的字节,环形队列将被填满,使以后接收到的字节丢失。ISRRx环形缓冲区应用程序509异步串行通信-接收方法21.应用程序等待信号量SemaUartRx;2.ISR收到一个字节后,得到一个信号量,从串行端口读

入字节,把它放到环形队列中;3.ISR释放一个信号量;4.任务收到信号量,读取字节;ISRRx环形缓冲区应用程序SemaUartRx超时519异步串行通信-接收问题每次中断发生,中断服务程序会使用信号量SemaUartRx,该操作是操作系统提供的系统调用,执行此调用会消耗一定的时

间,也就是说,每次接收到一个字符,都要执行此调用,系统的开销比较大。解决方案当收到一定数量的字符或收到特定的字符后,才发出信号量,以减少开销。529异步串行通信-发送方法1:缓冲方式发送环形缓冲区应用程序TxISR539异

步串行通信-发送VOidUartPutChar(Unsigned8c){/*todo:禁止CPU的中断*/if(发送环形队列不满){把要发送的字符放到环形队列尾部if(此字符是队列中的第一个字符){使能发送中断;}使能CPU的中断;}

}ISRUartCharSend(void)/*发送中断服务例程*/{Unsigned8c;保存处理器的寄存器;if(Uart的发送环形队列不空){c=从环形队列头部取一个字符;把字符输出到Uart的发送端口;}else{禁止发送中断;}恢复处理器的寄存器;中断返

回;}549异步串行通信-发送方法2:利用RTOS内核环形缓冲区应用程序TxSem超时TxISR559异步串行通信-发送接口函数1.初始化voidUartInit(Unsigned8ch,Unsigned8baud,Unsigned8Bits,Uns

igned8parity,Unsigned8stops);2.发送voidUartPutChar(Unsigned8ch,Unsigned8c);3.接收Unsigned8UartGetChar(Unsigned8ch,Unsigned8*pStr);4.清除发送

环形队列voidUartFlushSend(Unsigned8ch);5.清除接收环形队列voidUartFlushReceive(Unsigned8ch);56内容嵌入式系统模型键盘LED显示器LCD

显示器日历时钟模拟量输入/输出开关量输入/输出异步串行通信其它5710其它组件模块音频输入输出音调文件波形文件手写输入信号输入信号识别汉王公司提供汉字识别组件模块58小结嵌入式系统组件模块的概念常用嵌

入式系统组件实现方法主要接口函数使用方法和范例实际项目设计中,使用的组件很多,如计算(数据处理等)软件组件的优点59思考题1.理解软件组件/模块设计方法2.其它外部设备接口的软件组件如何定义/设计THANKS

小橙橙
小橙橙
文档分享,欢迎浏览!
  • 文档 25747
  • 被下载 7
  • 被收藏 0
相关资源
广告代码123
若发现您的权益受到侵害,请立即联系客服,我们会尽快为您处理。侵权客服QQ:395972555 (支持时间:9:00-21:00) 公众号
Powered by 太赞文库
×
确认删除?