uCOS-II的嵌入式串口通信模块设计[归纳].pdfVIP

uCOS-II的嵌入式串口通信模块设计[归纳].pdf

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
uCOS-II 的嵌入式串口通信模块设计 在嵌入式应用中, 使用 RTOS 的主要原因是为了提高系统的可靠性, 其次是提高开发效率、 缩短开发周期。 uCOS-II 是一个占先式实时多任务内核,使用对象是嵌入式系统,对源代码适当裁减,很容易移植到 8~32 位不同框架的微处理器上。 但 uCOS-II 仅是一个实时内核, 它不像其他实时操作系统 (如嵌入式 Linux) 那样 提供给用户一些 API 函数接口。在 uCOS-II 实时内核下,对外设的访问接口没有统一完善,有很多工作需 要用户自己去完成。串口通信是单片机测控系统的重要组成部分,异步串行口是一个比较简单又很具代表 性的中断驱动外设。本文以单片机中的串口为例,介绍 uCOS — II 下编写中断服务程序以及外设驅动程序 的一般思路。 1 uCOS-II 的中断处理及 51 系列单片机中断系统分析 uCOS-II 中断服务程序 (ISR) 一般用汇编语言编写。以下是中断服务程序的步骤。 1. 保存全部 CPU 寄存器;调用 OSIntEnter() 或 OSIntNesting( 全局变量 )直接加 1 ; 2. 执行用户代码做中断服务; 3. 调用 OSIntExit() ; 4. 恢复所有 CPU 寄存器; 5. 执行中断返回指令。 uCOS-II 提供两个 ISR 与内核接口函数; OSIntEnter ()和 OSIntExit ()。OSIntEnter ()通知 uCOS-II 核,中断服务程序开始了。事实上,此函数做的工作是把一个全局变量 OSIntNesting 加 1,此中断嵌套计 数器可以确保所有中断处理完成后再做任务调度。另一个接口函数 OSIntExit ()则通知内核,中断服务已 结束。根据相应情况,退回被中断点(可能是一个任务或者是被嵌套的中断服务程序)或由内核作任务调 度。 用户编写的 ISR 必须被安装到某一位置,以便中断发生后, CPU 根据相应的中断号运行准确的服务程 序。许多实时操作系统都提供了安装和卸载中断服务程序的 API 接口函数,但 uCOS-II 内核没有提供类似 的接口函数,需要用户在对 CPU 的移植中自己实现。这些接口函数与具体的硬件环境有关,接下来以 51 单片机下的中断处理对此详细说明。 51 单片机的中断基本过程如下: CPU 在每个机器周期的 S5P2 时刻采样中断标志,而在下一指令周期 将对采样的中断进行查询。如果有中断请求,则按照优先级高低的原则进行处理。响应中断时,先置相应 的优先级激活触发器于相应位,封锁同级或低级中断,然后根据中断源类别,在硬件控制下,将中断地址 压入堆栈, 并转向相应的中断向量入口单元。 通常在入口单元处放一跳转指令, 转向执行中断服务程序. 当 执行中断返回指令 RETI 时,把响应中断时所置位的优先级激活触发器清零后,从堆栈中弹出被保护的断 点地址,装入程序计数器 PC ,CPU 返回原来被中断处继续执行程序。 在移植的过程中,采用 Keil C51 作为编译环境。 Keil C5l 集成 C 编译和汇编器。中断子程序用汇编语言 编写, 放到移植 uCOS-II 后的 OS_CPU_A.ASM 汇编文件中。下面是以串行口中断为例的移植中断服务子 程序代码。 CSEGAT0023H ;串口中断响应入口地址 LJMPSerialISR ;转移到串口中断子程序入口地址 RSEG ?PR?SeriallSR ?OS_CPU_A SerialISR : USINGO CLR EA ;先关中断,以防中断嵌套 PUSHALL ;已定义的压栈宏,用于将 ;CPU 寄存器的值压入堆栈 LCALL_?OSIntEnter ;监视中断嵌套 LCALL_?Serial ;串口中断服务程序 LCALL_?OSintExlt SETBEA POPALL ;

文档评论(0)

肖四妹学教育 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档