嵌入式微处理器系统和应用-Chapter13 嵌入式实时操作系统内核硬件相关设计和代码移植.ppt

嵌入式微处理器系统和应用-Chapter13 嵌入式实时操作系统内核硬件相关设计和代码移植.ppt

  1. 1、本文档共59页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * UART Uart(Universal Asynchronous Receiver/Transmitter),是通用异步收发器的简称,一般称之为串口。 可以通过它将目标板上的程序执行信息发送出来,供调试观察之用。 采用支持格式输出的函数printk将串口相关的驱动函数封装起来(通过调用Uart_SendChar来输出字符),而应用只需调用printk就可以了 AIC AIC(Advanced Interrupt Controller),高级中断控制器,类似于X86体系的8529芯片,是W90P710芯片中控制中断的部件。 W90P710可以处理 多达32个中断源, 现在只定义了31种, 每个中断源都对应 了唯一的中断号 AIC 为了更好地管理中断,还实现了一个8级(0-7)的中断优先级位表:中断号越低,优先级就越高,1号中断(看门狗中断)优先级最高。 优先级为0的四个中断触发的是FIQ中断,而其余级别的中断全都属于IRQ中断 中断号 优先级 4 3 2 1 0 8 7 6 5 1 12 11 10 9 2 16 15 14 13 3 20 19 18 17 4 24 23 22 21 5 28 27 26 25 6 31 30 29 7 13.2.2 移植的函数结构 13.2.2 移植的函数结构 os_cpu_a.S文件函数与uCOS层交互作用图 移植任务 编写BSP,以支持ucos运行所必要的功能函数接口,主要是串口、时钟和中断,而这需要熟悉W90P710芯片的UART、Timer和AIC等部件,完成对它们的驱动。 修改uCOS的三个硬件相关文件: os_cpu_c.c os_cpu.h os_cpu_a.S 13.2.3 BSP层的移植 AIC相关函数 Aic_Init Aic_Int_Enable Aic_Int_Disable AIC_Get_Vector Timer相关函数 Timer_Init Timer_Start UART相关函数 Uart_SendChar AIC相关函数(1) 在整个中断体系中,有三级控制开关。AIC处于中断体系的第二级 AIC相关函数(2) AIC_Init :中断初始化函数,开始一般将31个中断通道都关闭,而后选择要响应设备的中断号,将其打开。因为我们要响应时钟0的中断,所以要打开13号通道 AIC相关函数(3) AIC_Int_Enable :中断使能函数,接受中断号,打开该中断通道 AIC相关函数(4) AIC_Int_Disable :和AIC_Int_Enable函数的作用相反,关闭某个中断通道 AIC相关函数(5) AIC_Get_Vector :用于从寄存器IPER里读取最高优先级的中断号,然后跳转到相应中断的处理程序。 *ISR[])()是对应中断处理函数的函数指针数组,其初始化步骤: Timer相关函数 初始化Timer:选择timer的工作模式,给计数器赋初值,选择合适的分频数。 Timer_Start UART相关函数 Uart_SendChar 13.2.4 os_cpu_a.S文件的修改 声明部分 代码段 声明的变量 在文件中要 引用,但是 定义却在其 它文件中 声明为全局 符号,在别 的文件中可 以被引用 13.2.4 os_cpu_a.S文件的修改 函数实现 OSStartHighRdy OSCtxSw OSIntCtxSw OS_CPU_SR_Save和OS_CPU_SR_Restore CPSR_Init _ISR_Handler OSStartHighRdy 由函数OSStart调用的,用于将就绪的最高优先级任务置为运行态 OSCtxSw 完成任务级的任务切换,将被置换任务的信息压入它的任务栈,而把要运行任务的信息从任务栈加载到ARM寄存器组中。 OSCtxSw(续) OSIntCtxSw 在中断处理后,恢复现场前需要调用OSIntExit来判断是否在中断处理中使更高优先级的任务就绪了,从而恢复高优先级而非被中断任务的信息。 OSIntExit通过调用OSIntCtxSw来完成高优先级任务的恢复,由于在中断处理前已经保存了现场,所以OSIntCtxSw就无须保存现场信息了。 OSIntCtxSw OS_CPU_SR_Save和OS_CPU_SR_Restore 用来关闭和打开中断 它们和OS_ENTER_CRITICAL()、OS_EXIT_CRITICAL()的关系: CPSR_Init 由于任务一开

文档评论(0)

0520 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档