




已阅读5页,还剩12页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
ARM嵌入式系统基础 综 合 实 验 报 告 姓名: 班级: 学号: 指导教师: 实验时间:2014年11月24日 目录1、 实验目的-32、 实验设备-33、 实验内容-34、 实验预习要求-35、 实验原理-46、 实验步骤-97、 实验参考程序-138、 实验心得-16备注:在流水灯显示的程序中,显示的字母为LIXUE,分别对应ASCII码: L-0x4C I-0x49 X-0x58 U-0x55 E-0x45 全亮-0XFF全灭-0X00流水灯一个周期的显示流程:流水灯全亮一次;流水灯全灭一次,显示一个字母;流水灯全亮一次。根据字母显示的个数,计算出一个周期的需要的次数为12。一、实验目的1、 掌握将C/OS-II 操作系统移植到ARM7 处理器的方法。2、了解C/OS-II 操作系统的基本原理和移植条件。3、 掌握LPC2200(for MagicARM2200)专用工程模板的使用;4、能够在MagicARM2200-S 上运行基于C/OS-II 操作系统的程序;5、 掌握基于C/OS-II 操作系统的用户程序的编写格式。二、实验设备硬件:PC机一台 MagicARM2200-S 教学实验开发平台一套软件:Windows98/XP/2000 系统 ADS 1.2 集成开发环境 C/OS-II 操作系统(V2.52)三、 实验内容1、编写一个简单的多任务应用程序,实现LED 流水灯控制。2、建立两个C/OS-II 的任务,一个任务用于检测KEY1 按键(P0.20 口的输入),这里就称之为按键检测任务,另一个任务用于控制蜂鸣器,这里就称之为蜂鸣器控制任务。蜂鸣器控制任务平时处于等待状态,当按键检测任务检测到有效按键输入时,立即唤醒蜂鸣器控制任务。四、实验预习要求1、了解C/OS-II 的组成和移植相关的文件内容。2、了解ARM7 体系结构及其汇编编程,了解LPC2000 系列ARM7 微控制器的硬件结构(如向量中断控制器和定时器等)和C/OS-II 移植的相关说明。3、仔细阅读参考文献1第5.7 节的LPC2000 管脚连接模块,第5.9 节的GPIO。4、仔细阅读本书第1 章的内容,了解MagicARM2200-S 的硬件结构,注意蜂鸣器的控制电路及KEY1 按键电路的说明。5、仔细阅读产品配套光盘附带文档ADS 集成开发环境及仿真器应用或其它相关资料,6、了解ADS 1.2 集成开发环境、LPC2200(for MagicARM2200)专用工程模板、EasyJTAG 仿真器的应用7、阅读参考文献4的第16 章和第17 章的内容,了解C/OS-II 操作系统的配置,系统的初始化,任务的建立,系统的启动等等。五、实验原理LED 流水灯控制实验原理:(1) C/OS-II 概述 C/OS-II 是一个完整的、可移植、可固化、可剪裁的占先式实时多任务内核。C/OS-II是用ANSI C 语言编写,包含一小部分汇编代码,使之可以供不同架构的微处理器使用。C/OS-II 可以管理64 个任务,具有信号量、互斥信号量、事件标志组、消息邮箱、消息队列、任务管理、时间管理和内存块管理等系统功能。C/OS-II 包括以下3 个部分: C/OS-II 核心代码:包括10 个C 程序文件和1 个头文件,主 要实现了系统调度、任务管理、内存管理、信号量、消息邮箱和消息队列等系统功能。此部分的代码与处理器无关。 C/OS-II 配置代码:包括2 个头文件,用于裁剪和配置C/OS-II。此部分的代码与用户实际应用相关。 C/OS-II 移植代码:包括1 个汇编文件、1 个C 程序文件和1 个头文件,这是移植C/OS-II 所需要的代码。此部分的代码与处理器相关。说明:移植代码的文件名不是固定的,但为了保持C/OS-II 系统的一致性,文件名一般也不要改变(即OS_CPU.H、OS_CPU_A.ASM 和OS_CPU_C.C)。(2) C/OS-II 移植条件移植C/OS-II 之前需要注意,目标处理器必须满足以下几点要求:处理器的C 编译器能产生可重入型代码;处理器支持中断,并且能产生定时中断(通常为10100HZ);用C 语言就可以开/关中断;处理器能够支持一定数量的数据存储硬件堆栈(可能是几千字节);处理器有将堆栈指针以及其它CPU 寄存器的内容读出,并保存到堆栈或内存中去的指令。LPC2000 系列ARM7 微控制器可以满足第2、4 和5 点要求,使用ADS 1.2 的C 编译器可以满足第1、3 点要求。(3) C/OS-II 移植步骤1) OS_CPU.H 的移植在OS_CPU.H 文件中定义与处理器相关(实际上是与编译器相关)的数据类型,如BOOLEAN、INT8U、INT8S 等等。2) OS_CPU_C.C 的移植在OS_CPU_C.C 文件中,需要编写以下10 个简单的C 函数: OSTaskStkInit(); OSTaskCreateHook(); OSTaskDelHook(); OSTaskSwHook(); OSTaskIdleHook(); OSTaskStatHook(); OSTaskTickHook(); OSInitHookBegin(); OSInitHookEnd(); OSTCBInitHook()。其中,9 个系统Hook 函数可以为空函数,也可以根据用户自己的需要编写相应的操作代码。任务栈结构初始化函数OSTaskStkInit,必须根据移植时统一定义的任务堆栈结构进行初始化。3) OS_CPU_A.S 的移植由于ADS1.2 编译器默认汇编文件后缀名为“S”,所以移植代码OS_CPU_A.ASM 改名为OS_CPU_A.S。在OS_CPU_A.S 文件中,需要编写以下4 个简单的汇编语言函数: OSStartHighRdy(); OSCtxSw(); OSIntCtxSw(); OSTickISR()。其中,函数OSCtxSw 不是必须的,但必须要定义好函数OS_TASK_SW(在OS_CPU.H中声明),以实现任务级任务切换。启动C/OS-II 是通过调用OSStart()实现,OSStart()最终调用函数OSStartHighRdy()运行多任务启动前优先级最高的任务。OSStartHighRdy()函数的代码参考程序清单3.5。函数OSTickISR 为系统时钟节拍中断函数,这需要使用到处理器的定时器和定时中断。为了达到集中地初始化硬件(定时器、中断和I/O 等)的目的,此函数可以在用户工程的启动代码文件中实现,参考程序清单3.6。说明:系统时钟节拍中断函数的名称并不是固定的,也并不一定要在OS_CPU_A.S 文件中实现。蜂鸣器实验原理:在MagicARM2200-S 上运行基于C/OS-II 操作系统的程序的具体操作步骤如下。说明: (PC) - 属于在PC 机上操作,即软件的操作(硬件) - 属于MagicARM2200-S 硬件操作(PC+硬件) - 属于在PC 机上进行软件操作,硬件上要连接或跳线操作(1) 安装ADS 1.2运行在ADS 目录下Setup.exe,开始安装ADS1.2。(若已安装过,此步省略)按照安装软件的提示安装,与其它软件安装操作方法基本一致。(2) 了解ADS 1.2使用ADS1.2 建立工程,编译链接设置,调试操作等,更详细的使用方法参考ADS1.2的在线帮助文档或相关资料。(若已熟悉ADS 1.2,此步省略)(3) 连接EasyJTAG 仿真器和MagicARM2200-S将EasyJTAG 仿真器的25 针接口通过并口延长线与PC 机的并口连接,先给MagicARM2200-S 实验箱供电,再将EasyJTAG 仿真器的20 针接口通过20 PIN 连接电缆接到MagicARM2200-S 的J3 上。(若已连接好,此步省略)(4) EasyJTAG 仿真器的安装与应用若已安装过,此步省略。(5) 添加工程模板若已添加过,此步省略。(6) 建立项目目录并添加C/OS 2.52 源代码和移植代码建立一个项目目录,比如uCOS-II。将C/OS 2.52 源代码Source(目录)复制到项目目录,将移植代码ARM(目录) 复制到项目目录。将移植的PC 服务代码Arm_Pc 复制到项目目录,使用移植的PC 服务代码,就可以通过串口向PC 发送显示数据(由EasyARM 软件的DOS 字符窗口显示)。C/OS 2.52 源代码可以从参考文献4的附带光盘上获得。移植代码ARM 和移植的PC 服务代码Arm_Pc 可以从MagicARM2200-S 的产品配套光盘上获得。(7) 用工程模板建立工程使用LPC2200(for MagicARM2200)专用工程模板建立工程(比如“ARM Executable Imagefor UCOSII(MagicARM2200)”工程模板),工程存放路径为项目目录下,建立源文件并加入工程,然后编写程序代码。更改Os_cfg.h 文件,配置C/OS-II 操作系统。编译链接工程,若有错误,则修改程序,然后再次编译。(8) 仿真调试工程正确设置MagicARM2200-S 的跳线;启动AXD 进行仿真调试。六、实验步骤LED 流水灯控制实验步骤:(1) 连接EasyJTAG 仿真器和MagicARM2200-S,然后安装EasyJTAG 仿真器的驱动程序(若已经安装过,此步省略)。(2) 为ADS1.2 增加LPC2200(for MagicARM2200)专用工程模板(若已增加过,此步省略)。(3) 建立一个项目目录uCOS-II,添加C/OS 2.52 源代码和移植代码。将移植的PC 服务代码Arm_Pc 复制到项目目录uCOS-II 下。(4) 将C/OS 2.52 源代码Source(目录)复制到项目目录(5) 启动ADS 1.2,使用ARM Executable Image for UCOSII(for MagicARM2200)工程模板建立一个工程LedDisp,工程存储在uCOS-II 目录下。(6) 打开工程窗口user 组中的main.c 文件,编写实验程序并保存。(7) 根据程序设计来更改Os_cfg.h 文件,配置C/OS-II 操作系统。(对于本实验,C/OS-II的配置使用模板默认设置即可)(8) 选用DebugInExram 生成目标,然后编译链接工程(9) 将MagicARM2200-S 的JP5、JP7 跳线短接,JP13 跳线断开。注意:JP7 与IDE 硬盘/CF 卡电路的JP13 跳线复用P0.7 口。(10) 选择【Project】-【Debug】,启动AXD 进行JTAG 仿真调试。(11) 若JTAG 连接出错,或AXD 主窗口没有显示startup.s 源程序,按产品配套光盘附带文档ADS 集成开发环境及仿真器应用介绍的方法进行处理。(12) 全速运行程序,程序将会在main.c 的主函数中停止(因为main 函数起始处默认设置有断点)。(13) 全速运行程序,观察MagicARM2200-S 的LED1LED8 显示,监听蜂鸣器是否蜂鸣。蜂鸣器实验步骤:(1) 启动ADS 1.2,使用ARM Executable Image for UCOSII(MagicARM2200)工程模板建立一个工程GPIO,工程存储在uCOS-II 目录下。(2) 打开工程窗口user 组中的main.c 文件,编写实验程序并保存。(3) 根据程序设计来更改Os_cfg.h 文件,配置C/OS-II 操作系统。(对于本实验,C/OS-II的配置使用模板默认设置即可)(4) 选用DebugInExram 生成目标,然后编译链接工程。(5) 将MagicARM2200-S 的JP7、JP11 跳线短接,JP4、JP13 跳线断开。注意:JP7 与IDE 硬盘/CF 卡电路的JP13 跳线复用P0.7 口; JP11 与PS/2 键盘鼠标接口的JP4_K_CLK 跳线复用P0.20 口。(6) 选择【Project】-【Debug】,启动AXD 进行JTAG 仿真调试 。(7) 若JTAG 连接出错,或AXD 主窗口没有显示startup.s 源程序,请按产品配套光盘附带文档ADS 集成开发环境及仿真器应用介绍的方法进行处理。(8) 全速运行程序,程序将会在main.c 的主函数中停止(因为main 函数起始处默认设置有断点)。(9) 全速运行程序,然后按下/放开KEY1 按键,监听蜂鸣器是否蜂鸣。(10) 当仿真调试通过后关闭AXD,在ADS 1.2 集成开发环境中选用RelOutChip 生成目标,然后编译链接工程。(11) 将MagicARM2200-S 的JP7、JP11 跳线短接,JP4、JP13 跳线断开。(12) 选择【Project】-【Debug】,启动AXD 进行JTAG 仿真调试。此时EasyJTAG 仿真器将会把程序下载到片外FLASH 上(需要正确设置仿真器)。(13) 将JP1 跳线断开,然后按MagicARM2200-S 上的RST 复位键,观察程序是否能脱机运行。(14) 实验结束后,在AXD 中设置仿真器为片外RAM 调试方式的设置,以便于后面实验的正确操作。七、实验参考程序在流水灯显示的程序中,显示的字母为LIXUE,分别对应ASCII码: L-0x4C I-0x49 X-0x58 U-0x55 E-0x45 全亮-0XFF全灭-0X00流水灯一个周期的显示流程:流水灯全亮一次;流水灯全灭一次,显示一个字母;流水灯全亮一次。根据字母显示的个数,计算出一个周期的需要的次数为12。#include config.h #include stdlib.h / P0.7为蜂鸣器的控制I/O #define BEEP (17) / LED控制宏函数定义。LED1-LED8的控制I/O为P1.16-P1.23 #define LED_ADJ 16 #define LED_IOCON (0xFFLED_ADJ) #define LED_OFF() IO1SET=LED_IOCON #define LED_DISP(dat) LED_OFF(); IO1CLR=(dat)LED_ADJ) #define TaskStkLengh 100 /定义用户任务堆栈长度OS_STK TaskStk0TaskStkLengh; /Define the Task0 stack 定义用户任务0的堆栈OS_STK TaskStk1TaskStkLengh; /Define the Task1 stack 定义用户任务1的堆栈void Task0(void *pdata); /Task0 任务0 void Task1(void *pdata); /Task0 任务1 void Task2(void *pdata); /Task0 任务2/*主函数*/ int main (void) OSInit OSTaskCreate (Task0,(void *)0, &TaskStk0TaskStkLengh - 1, 2); OSStart (); return 0; /*Task0 任务0 */ void Task0(void *pdata) const uint8 DISP_TAB12 = 0XFF,0x00,0x4C,0x00,0x49,0x00,0x58,0x00,0x55,0x00,0x45,0x00; uint8 i; pdata = pdata; TargetInit (); PINSEL0 = 0x00000000; / 设置P0口管脚连接GPIO IO0DIR = BEEP; / 设置蜂鸣器控制口为输出IO0SET = BEEP; IO1DIR = LED_IOCON; / 设置LED1LED8的控制口为输出LED_OFF(); / 建立任务1(用于蜂鸣器控制) OSTaskCreate (Task1,(void *)0, &TaskStk1TaskStkLengh - 1, 3); while (1) for(i=0; i12; i+) LED_DISP(DISP_TABi); / 输出LED显示数据OSTimeDly(OS_TICKS_PER_SEC/2); / 延时0.5S /* Task1 任务1 */void Task1(void *pdata) pdata = pdata; while (1) OSTimeDly(OS_TICKS_PER_SEC*10); / 延时10S IO0CLR = BEEP; / 控制蜂鸣器响OSTimeDly(OS_TICKS_PER_SEC/2); IO0SET = BEEP; /* Task2任务2 */void Task2(void *pdata) pdata = pdata; TargetInit (); PINSEL0 = PINSEL0 & 0xffff3fff; / 管脚选择模块初始化PINSEL1 = PINSEL1 & 0xfffffcff; IO0DIR &= KEY1; / 设置KEY1的控制I/O为输入IO0DIR |= BEEP; / 设置蜂鸣器为输出IO0SET = BE
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030中国左炔诺孕酮片行业消费动态及营销趋势预测报告
- 三叉神经痛课件
- 六级证书面试题库精 编版:不同领域职业能力测试
- 小儿遗传代谢病课件
- 小儿辩日课件
- 大道项目安全文明施工管理工作总结
- 小儿艾条灸课件
- 2025秋新人教版初中英语八上 Unit 5 What a Delicious Meal!单词扩量讲义【增词汇强辨识】
- 大学生毕业实习目的与意义
- 大学生借款合同
- 2025年区块链应用操作员职业技能竞赛理论参考试指导题库500题(含答案)
- 2025年中国移动初级解决方案经理学习考试题库大全-上(单选题)
- DB35T 1951-2020福建省公共机构能耗定额标准
- 医疗机构从业人员规范
- 《研学旅行相关概念与理论基础综述》1900字
- 医院培训课件:《股骨头坏死》
- 保险基础知识简读本(2024版)
- 集团公司司库管理办法
- 住院患儿实施院内转运临床实践指南2023版课件
- 主播新手上路-打造游戏直播与娱乐新风向
- 2024-2025学年中职数学基础模块 下册高教版(2021·十四五)教学设计合集
评论
0/150
提交评论