ARM7嵌入式系统实践教程
- 格式:pptx
- 大小:544.94 KB
- 文档页数:20
主程序流程/*************************************************************************** * 文件名:LEDCON.C* 功能:LED闪烁控制。
对发光二极管LED4进行控制,采用软件延时方法。
* 使用I/O口直接控制LED,采用灌电流方式。
* 说明:将跳线器JP4_LED4短接。
**************************************************************************** #include "config.h"#define LEDCON 0x02000000 /* P0.25引脚控制LED4,低电平点亮 *//*************************************************************************** * 名称:DelayNS()* 功能:长软件延时* 入口参数:dly 延时参数,值越大,延时越久* 出口参数:无**************************************************************************** void DelayNS(uint32 dly){ uint32 i;for(; dly>0; dly--)for(i=0; i<50000; i++);}/*************************************************************************** * 名称:main()* 功能:控制LED闪烁**************************************************************************** int main(void){ PINSEL0 = 0x00000000; // 设置所有管脚连接GPIOPINSEL1 = 0x00000000;IO0DIR = LEDCON; // 设置P0.9连接的LED4控制口为输出while(1){ IO0SET = LEDCON;DelayNS(30);(1) 仿照上册“Keil for ARM实例2:A/D程序设计与电路彷真”的例子创建工程LedCon。
第24卷第2期2009年6月安 徽 工 程 科 技 学 院 学 报Journal of Anhui University of Technology and Science Vol.24.No.2J un.,2009收稿日期:2009202220 作者简介:陶保壮(19722),男,安徽淮南人,硕士,讲师.文章编号:167222477(2009)022*******基于ARM7的嵌入式操作系统μc/OS 2Ⅱ平台的剖析与实现陶保壮(淮南联合大学计算机系,安徽淮南 232038)摘要:嵌入式操作系统发展的运用,能够简化嵌入式系统的应用开发,有效地确保系统的稳定性、安全性和可靠性.因此嵌入式实时操作系统在目标处理器平台上的移植就成为嵌入式软件开发的基础,以此为背景,从算法实现和运行测试的角度出发,系统阐述了嵌入式操作系统μc/OS 2Ⅱ移植到S3C44B0X 的芯片的移植过程和步骤.最终使嵌入式系统开发平台得以实现.关 键 词:嵌入式;S3C44B0X;实时内核μc/OS 2Ⅱ;移植中图分类号:TP391 文献标识码:A随着后PC 时代的到来,计算机用户所关心的系统实时性的问题日益突出.当前,由于技术的进步,嵌入式系统硬件的规模越来越大,功能越来越强,因而使得这一问题的解决成为可能.为了对整个系统资源进行统一协调、指挥和有效控制,使系统的实时性得以充分体现,在嵌入式系统中运用操作系统是非常必要的.而操作系统是一个通用的程序,要在自己的嵌入式系统中应用操作系统,必须结合所用处理器的性能指标进行修改、移植.本文结合具体实例,对基于S3C44B0X 嵌入式操作系统μc/OS 2Ⅱ平台的实现的移植过程和步骤进行研究,最后通过测试,验证了嵌入式开发平台的成功实现.1 嵌入式实时内核μc/OS 2Ⅱ图1 μc/OS 2Ⅱ软件体系结构[2]μc/OS 2Ⅱ,是一个源代码公开、可固化、可裁剪占先式的实时多任务操作系统,它运行就绪状态下优先级最高的任务,其绝大部分源码是用便于移植的C 语言编写,小部分汇编语言代码已被压缩到最低限度,使之可供不同构架的微处理器上使用[1].μc/OS 2Ⅱ属于可剥夺型实时内核,结构小巧,最小内核可编译至2K.系统内核提供的基本服务主要是负责多任务间的的共享数据,同步与通信等.μc/OS 2Ⅱ所具有执行效率高,占用空间小,实时性能好和可扩展性能强等特点受到广大用户的青睐.图1说明了μc/OS 2Ⅱ文件组织与硬件的关系.2 μc/OS 2II 在S3C44B0X 上的移植移植就是指使一个实时内核能在多个微处理器或微控制器上运行.本文采用了SAMSUN 公司的S3C44B0X 芯片,开发环境采用Keil uVision3,基本满足开发要求.S3C44BOX 是一款基于ARM7D TM I (内核)16/32位的SOC 芯片.该芯片片上功能很强大,技术成熟,应用广泛,160管脚L Q FP 封装;8K 字节的Cache ,外部扩充存储器(FP/EDO/SRAM/SRAM/ROM/SDRAM 控制);8个外部中断源;向量中断控制器可配置优先级和向量地址等,具有低成本、低功耗、高性能等优点[3].移植工作主要集中在与处理器相关的3个文件中:OS_CPU.H 、OS_CPU _C.C 、OS_CPU _A.S.其中:OS_CPU.H 文件主要包含与编译器相关的数据类型定义、堆栈类型定义、两个宏定义和几个函数说明;OS_CPU_C.C 包含与移植有关6个C 函数,为OSTaskInit (),OSTaskCreate Hook (),OSTaskDel 2Hook (),OSTaskSw Hook (),OSTaskStat Hook (),OSTime Tick_Hook (),除第一个任务堆栈初始化函数外的其它5个函数为钩子函数,可以没有实际内容,但必须要声明,由系统函数调用,用于扩充自己需要的功能.OS_CPU_A.S 中包含与移植有关的4个汇编语言函数,为OSStart HighRdy (),OSCt xSw (),OSInt Ct xSw (),OSTickISR ().2.1 OS_CPU.H 文件移植μc/OS 2II 不使用C 语言中short ,int 和long 等数据类型定义,因为它们与处理器类型相关,隐含不可移植性.此文件中主要包含与编译器相关数据类型定义、堆栈类型定义、两个宏定义和几个函数说明.数据类型定义部分代码如下[1]:typedef unsigned short IN T16U ;/316位有符号整数3/typedef unsigned long IN T32U ;/332位无符号整数3/typedef signed long IN T32S ;/332位有符号整数3/typedef float FP32;/3单精度浮点数3/typedef unsigned int OS_ST K;/3堆栈入口宽度为16位3/#define OS_ST K_GROWT H 1 /3堆栈增长方向从上向下满递减堆栈3/#define OS_EN TER_CRITICAL (){cpu_sr =OS_CPU_SR_Save ();}/3关中断,执行临界代码3/#define OS_EXIT_CRITICAL (){OS_CPU_SR_Restore (cpu_sr );}/3开中断3/在本例移植中,使用软中断指令SWI 作为底层接口,使用不同功能号区分不同函数.在Keil uVision3中,用关键字_swi 声明一个不存在的函数,则调用该函数就在调用的地方插入一条SWI 指令并可指定功能号.SWI 函数部分代码如下[5]:_swi (0x00)void OS_TASK_SW (void );/3任务级任务切换函数3/_swi (0x01)void_OSStart HighRdy (void );/3运行优先级最高的任务3/_swi (0x02)void OS_EN TER_CRITICAL (void );/3关中断3/_swi (0x03)void OS_EXIT_CRITICAL (void );/3开中断3/2.2 OS_CPU_C.C 文件移植μc/OS 2Ⅱ中,每个任务要有自己的堆栈空间,以便进行任务切换时能将当时处理器现场保存到任务堆栈空间中,在下次执行时再恢复出来.因此必先确定任务堆栈结构,而任务堆栈结构与CPU 体系结构、编译器密切关联.本移植堆栈结构如图2所示.OSEnterSum 用于任务切换时保存和恢复各自OSEnter2图2 任务的堆栈结构[4]Sum 值,以便实现中断的嵌套.OSTaskSt k Init ()函数关键代码如下:3--stk =(unsigned int )task ;/3pc 3/ 3--stk =(unsigned int )task/3lr 3/ 3--stk =0;/3r12.....r1,其它同理3/3--stk =(unsigned int )pdata ;/3r0,第一个参数用r0传递3/ 3--stk =(SVC32MODE|0x0|);/3cp sr 关闭irq ,fiq 3/ 3--stk =(SVC32MODE|0x0);/3spsr IRQ ,关闭FIQ 3/ return ((OS_ST K 3)stk );/3堆栈指针保存在任务的OS_TCB 中3/此文件中的几个系统规定的hook 函数在本移植将它们都设为空函数.2.3 OS_CPU_A.S 文件移植OS_CPU_A.ASM 的改写是移植的难点,它需要用户主要编写4个汇编语言函数[5]:OSStart HighRdy ()、OSCtxSw ()、OSIntCtxSw ()、OSTickISR ().多任务启动函数OSStart ()调用OSStart Hight Rdy ()函数,运行优先级最高的任务.用户在调用该函数之前,必须至少建立一个或更多任务.OSCt xSw ()函数是由任务级任务切换函数OS_TAS K_SW ()调用,实现从低优先级向高优先级切换.文中任务级切换是通过SWI 软中断来实现的.软中断的异常处理程序挂接到CPU 内核,通过修改启动代码里的异常向量表实现.中断服务程序与CPU 芯片相关,中断源的挂接通过增加汇编接口的支持来实现,即在文件IRQ.S 的适当位置添加如下的程序代码[4]:IRQ.Handler HANDL ER IRQ.Exception ;IRQ 中断OSInt Ct xSw ()是中断级任务切换函数,在中断退出时由函数OSInt Exit ()调用.此函数基本原理与任务级切换相同,只是由于进入中断时已保存了被中断任务的环境变量,就不进行类似操作,只需要对堆栈指针进行调整即可.部分代码如下:・65・安 徽 工 程 科 技 学 院 学 报第24卷LDR r4,addr_OSTCBCur ;/3得到当前任务的TCB 地址3/LDR r5,addr_OSTCB HighRdy ;/3得到高优先级任务的TCB 地址3/LDR r5,[r5];/3得到堆栈指针3/LDR sp ,[r5];/3切换到新的堆栈3/STR r5,[r4];/3设置新的当前任务的TCB 地址3/LDMFD sp !,{r4} /3新任务cpsr 出栈3/MSR CPSR_cxsf ,r4LDMFD sp !,{r0-r12,lr ,pc}^;/3r0-r12,lr &pc 出栈,运行新任务3/系统时钟节拍中断函数OSTickISR ()是一个周期性中断,为内核提供时钟节拍.其周期决定了内核所能给应用系统提供的最小时间间隔服务.本移植中,IRQ 是受μc/OS 2II 管理的中断,对FIQ 不处理.时钟节拍的移植可通过汇编宏完成.完成上述工作后,μc/OS 2II 就可以运行在A RM 处理器上了.3 移植测试测试操作系统移植代码的正确性可以在没有应用程序的情况下进行.换句话说,就是让内核自己测试自己.在Keil uVision3下编译、链接成可执行的.axf 文件后,通过SU PERJ TA G 下载到目标板中(博创44B0X 实验箱).笔者通过以下测试用例(编写了OSTaskIdle Hook ()函数,每2000次循环点亮一个L ED ),验证了系统移植是成功的.void OSTaskIdle Hook (void ){static i =0;if (i %20000==0)/3每20000次点亮一个L ED ,3/ { sysUtilsLightLed (L ED_ALL ,FAL SE );/3关闭所有的L ED 3/ sysUtilsLightLed (i %3+1,TRU E );/3循环点亮一个L ED 3/ }i ++;return ;}4 结束语μc/OS 2II 是一个有优势的嵌入式实时操作系统,有良好的应用前景.本文通过具体事例,实现了实时内核μc/OS 2II 在S3C44B0X 上的移植.通过简单的任务例程,在Keil uV_ision3及开发板下进行了调试,从而验证了移植的准确性,此移植的成功为μc/OS 2II 嵌入式实时系统的复杂应用,提供了基本条件.参考文献:[1] 杜春雷.ARM 体系结构与编程[M ].北京:清华大学出版社,2003:792181.[2] J ean J ,L sbrosse ,.μc/OS 2II :the Real Time Kernel[M ].北京:中国电力出版社,2001:902168.[3] K irk Zurell.嵌入式系统的C 程序设计[M ].北京:机械工业出版社,1272259.[4] 周立功.ARM 微处理器基础与实践:2版[M ].北京:北京航空航天大学出版社,2005:1352261.[5] 黄燕平.μc/OS ARM 移植要点详解[M ].北京:北京航空航天大学出版社.2005.[6] 曹巧媛.单片机原理及应用[M ].北京:电子工业出版社,2001:432159,73289.R esearch of μc/OS 2Ⅱplatform B ased on ARM 7TAO Bao 2zhuang(Dept.of comp.,Huainan Unit University ,Huainan 232038,China )Abstract :At p resent ,t he t raditional foreground/background system has become a major bottleneck t hat hinder t he develop ment of embedded systems.But t he int roduction of Embedded Operating System ,can simplify t he application develop ment of embedded system and can also insure a system ’s stability ,relia 2bility.Takes t his as background ,t he transplant process and step s t hat t ransplant Embedded Operating System μc/OS 2Ⅱinto S3C44B0X (S3C44B0X chip is based on ARM7)are p resented in t he stly ,Embedded System Developing Platform is realized.Key words :embedded ;S3C44B0X ;real 2time kernel μc/OS 2Ⅱ;t ransplant ・75・第2期陶保壮:基于ARM7的嵌入式操作系统μc/OS 2Ⅱ平台的剖析与实现。
kw「卜"5妄蓦匸心歸的*曲云Kr* tockfR eadM? for AP M' fwrtjgr 5utr v t. 2諾cup g ASM De ^etoper suta v!二RSBS R5,R2,R1 ;/*R1 减R2 的值后传送至U R5,;s表示会影响cpsr*/SBC R6,R1,R2 ;/*R1减R2的值再减去!CARRY ;后传送至U R6*/RSC R7,R1,R2 ;/*R2减R1的值再减去!CARRY ;后传送至U R7*/stopBL stopEND ;/*程序结束*/2、实验步骤1)编程Step1:启动ADS点击桌面开始程序ARM Developer Suite v1.2 CodeWarrior for ARM Developer Suite,弹出CodeWarrior for ARM Developer Suite 的界面。
Step2:建立新的工程,点击FileNew,弹出新建工程对话框。
Step3:建立新的汇编文件,点击FileNew,弹出新建工程对话框Step4:将汇编文件添加至工程列表,编程。
Step5:设置工程属性。
甲件卜曇随•孟LirFllt 点)06 *WtflQQ 卜□ Sys闻科■畫网茁时• |丄聃*P^TmorIg flff(E)_D广嵌釘士li i j ■ ^;3ft直怜色“屮 o? *dcc,erp ! z Cii t- J『札3 H g C *Step6:编译连接工程。
点击工程管理对话框中的编译链接按钮2)调试Stepl:运行AXD,启动调试界面。
Step2 :设置调试属性。
Step3:加载映像文件。
Step4:单步执行,观察程序的运行,寄存器值的变化。
3)保存退出。
实验二ARM实时仿真环境建立一、实验目的1、熟悉Multie-Server与JTAG下载的方法;2、熟悉ADS开发环境中“AXD Debugger组建的使用;3、熟悉掌握ADS调试程序的方法。
ARM7嵌入式系统实训教程课程设计一、课程介绍本课程是针对嵌入式系统方向的学生设计的实训课程,主要介绍ARM7处理器在嵌入式系统中的应用和开发方法。
在本课程中,学生将会学习ARM7体系结构、汇编语言编程、C语言编程、硬件接口编程、操作系统应用等相关知识,通过实验设计开发出具体的ARM7嵌入式系统应用。
二、课程目标1.理解ARM7处理器的体系结构和工作原理;2.掌握ARM汇编语言和C语言编程技术;3.熟悉嵌入式系统硬件接口编程;4.能够应用操作系统进行ARM7嵌入式系统开发;5.具备自主设计开发ARM7嵌入式系统的能力。
三、课程内容1. ARM7体系结构•ARM7架构概述•寄存器和指令集•存储器结构和总线设备2. 汇编语言编程•汇编语言基础•汇编语言指令集•汇编语言程序设计实例3. C语言编程•C语言程序设计基础•C语言在嵌入式系统中的编程技术•C语言程序设计实例4. 硬件接口编程•GPIO口编程技术•中断编程技术•定时器编程技术•外部接口编程技术5. 操作系统应用•操作系统基础•ARM7嵌入式系统操作系统选择•操作系统内核移植•操作系统驱动程序设计四、实训设计本课程将基于ARM7开发板进行实训设计,具体内容如下:1. 实训环境准备•硬件环境介绍•软件环境介绍•环境配置和调试2. 实训项目设计•实训项目选题•项目设计方案•项目制作和调试五、考核与评价本课程的考核方式为实训项目完成情况评估和实训报告成绩评定。
学生需要按要求完成实训项目,并提交详细的实训报告。
六、参考资料•《ARM Cortex-M3与嵌入式系统实战开发》•《ARM微处理器及其应用》•《ARM嵌入式系统原理与应用》以上参考资料均为国内关于ARM7嵌入式系统的著名著作,学生可以根据自身需要自行选择相关阅读材料。
七、总结通过本门课程的学习,学生将获得嵌入式系统开发的基础知识和技能,具备自主设计和开发ARM7嵌入式系统的能力。
同时,本门课程也为学生继续深入学习嵌入式系统领域提供了基础和支持。
高等学校嵌入式系统通用教材·ARM嵌入式系统系列教程ARM嵌入式系统实验教程(二)周立功等编著北京航空航天大学出版社第1章smartARM2200教学实验开发平台硬件结构目录1.1功能特点 (1)1.2硬件原理 (4)1.2.1电路原理图 (4)1.2.2电路原理说明 (4)硬件结构 (27)1.3.1元件布局图 (27)1.3.2跳线器说明..............................一 (28)1.3.3连接器说明 (34)1.4硬件使用的资源 (36)1.5其他 (38)1.5.1 电源 (38)1.5.2跳线器 (38)1.5.3 CPU PACK的安装 (39)1.6温馨提示 (39)第2章基础实验2.1 ADS 1.2集成开发环境练习 (40)2.2汇编指令实验1 (45)2.3汇编指令实验2 (48)2.4汇编指令实验3 (51)2.5汇编指令实验4 (54)2.6汇编指令实验5 (57)2.7 ARM微控制器工作模式实验 (60)2.8 C语言程序实验 (64)2.9 C语言调用汇编程序实验 (67)2.10 GPIO输出控制实验1 (69)2.11 GPIO输出控制实验2 (74)2.12 GPIO输入实验 (76)2.13存储器重映射实验 (79)2.14外部中断实验l (81)2.15外部存储器接口实验1 (83)2.16定时器实验1 (89)2.17 UART实验1 (92)2.18 Modenl接口实验 (96)2.19 I2C接口实验l (98)2.20 PWM输出实验 (102)2.21 RTC实验1 (104)2.22模/数转换器实验 (108)2.23 WDT实验 (113)2.24低功耗实验1 (116)2.25温馨提示 (119)第3章基于.c/os—lI的基础实验3.1"c/OS-II移植实验 (120)3.2蜂鸣器控制实验 (130)3.3 争口中间件应用实验...........................................................................1 36 3.4 Modem【通信实验 (142)3.5 12c总线驱动中间件实验 (145)3.6温馨提示 (149)第4章基于吣,/OS一Ⅱ的综合实验4.1 USB E。
ARM嵌入式系统实验教程课程设计1. 简介随着科技的不断发展,嵌入式系统越来越广泛地应用于各个领域,如消费电子、医疗、交通、军事等。
嵌入式系统的性能越来越好,体积越来越小,成本也越来越低廉。
而ARM嵌入式系统,因其拥有高性能、低功耗、高集成度、灵活性等优势,已经成为嵌入式系统的主流。
本文旨在为学习ARM嵌入式系统的同学提供一份实验教程课程设计,通过实践操作,使学生了解ARM嵌入式系统的相关知识和应用。
2. 实验内容2.1 环境搭建学习ARM嵌入式系统必须先了解其开发环境,在本实验中,我们将使用Keil MDK作为开发工具,学生需要掌握Keil MDK的安装和配置。
2.2 编写第一个程序通过编写一个简单的程序,学生可以了解ARM汇编语言的基础知识,以及如何在Keil MDK中创建、编译和调试程序。
2.3 GPIO控制学生将会学习如何在ARM嵌入式系统上控制GPIO,包括输入输出、上拉下拉电阻等。
2.4 UART通信UART通信是嵌入式系统中常用的一种通信方式,学生将会学习如何使用ARM嵌入式系统的UART模块进行数据传输。
2.5 中断处理中断是嵌入式系统中的一种重要机制,学生将会了解中断的原理和使用中断的方法,包括IRQ和FIQ两种中断。
2.6 定时器和计数器学生将会了解ARM嵌入式系统中的定时器和计数器的原理和应用,包括通用定时器、看门狗定时器等。
3. 实验要求3.1 硬件要求学生需要准备ARM Cortex-M3开发板、USB转TTL模块、串口线、LED等实验工具。
3.2 软件要求学生需要安装Keil MDK、JLink驱动程序等软件。
3.3 实验要求学生需要按照实验指导书中给出的步骤完成实验,并编写实验报告,报告中需要包括实验的目的、原理、步骤、结果和分析。
4. 实验效果经过本实验的学习,学生将能够掌握ARM嵌入式系统的基础知识和应用,包括Keil MDK的安装和配置、ARM汇编语言的基础知识、GPIO控制、UART通信、中断处理、定时器和计数器应用等方面。