ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:420.59KB ,
资源ID:1392711      下载积分:1 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-1392711.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(ARM嵌入式实验Word文档下载推荐.docx)为本站会员(b****2)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

ARM嵌入式实验Word文档下载推荐.docx

1、 微处理器刚上电时,内部寄存器处于未知状态,为了使微处理器能够切换到一个初始状态,需要对微处理器进行一个复位操作。所有微处理器都有一个复位管脚,当复位管脚上的输入信号有效时,芯片复位。为了使微处理器在上电时能够自动进行复位,需要对复位管脚设计专门的电路,使其在系统上电初期有效。时钟和复位管脚的电路原理图4JTAG下载电路JTAG是ARM上程序下载和调试的重要接口,他是进一步开发的前提。标准的JTAG接口是4线接口:TMS、TCK、TDI以及TDO,分别为模式选择、时钟、数据输入和数据输出信号线。为了使接口能够更加稳定的工作,通常还需要对某些信号上拉下拉加限流电阻等。具体的接口电路需要查看不同芯

2、片的图片才能确定。5.键盘输入电路键盘输入电路只需要两个按键,复位键和控制键,可以有两个管脚来检测按键状态。当按键没被按下前,对应的管脚处于上拉状态(高电平),当某个按键被按下时对应的管脚处于接地,通常读取对应管脚的电平,就可以判断按键的状态。6.LED输出电路 七段LED我们称为共阴极。1、 扫描电路我们需要显示的数字总共有六个,分秒毫各两个,每控制一个七段码的显示至少需要7个管脚。七段码LED输出电路二、软件设计:1.秒表计时器控制void_irq IRQ_Timer0(void) / LED_Refersh=1; /更新七段码的显示if(segid=100)ms=0;second+; /

3、如果毫秒的计数达到100,向秒进一if(second=60)second+;minute+;if(minute=60)minute=0;T0IR=0X01; /清除中断标志VICVectAddr = 0x00; /通知中断处理结束几点注意:中断处理程序的声明清除中断标志:TOIR为中断寄存器,如果有中断产生,IR中的对应位会置位,相对应的IR写入1会恢复对应中断。向量地址寄存器在发生中断时,IRQ服务程序可读取该寄存器并跳转到读出的地址。秒表计时程序段。2.键盘输入扫描程序void key_handler (void)/变量用于当单次按键时间较长时,防止按键被误判为多次按下if (key_en

4、 =0) if(IO0PIN&key_reset)=key_set& /复位键未被按下 (IO0PIN&key_ctr1)=key_ctr1) /控制键未被按下 key_en =1; /按键被松开,则重新使能按键检测 else if (IO0PIN&key_reset)=0) /复位按键被按下 clk_on =0; /停表 ms = 0; second =0;minute=0; /清零秒表 key_en =0; /在按键松开之前防止被误判再次触发 else if (IO0PIN & key_ctr1)= 0) /控制键被按下 if(clk_on=1)clk_on=0; /如果当前状态为走表,则

5、停表 elseclk_en =0; /如果当前状态为停表,则走表 key_en =0;其中局部key_en用于防止当某个按键按下的时间稍长时被误判为多次重复按下,当检测到有按键被按下时,程序完成相应的按键操作后将key_en置零,此后所有的按键操作都会被忽略,当按键松开时再将key_en置1,重新开启按键检测。3.LED七段码扫描程序void dispLED int segid,int ms, int second, int minuteint digi; /当前显示的七段LED数值int SEGS_A2G; /最低七位为七段码LED端口ag的电平值int SEGS_GND = 0X3F; /

6、设变量的最低六位为1if LED_Refresh =0 /如果不需要更新,则返回elseLED_Refresh =0;switch (segid) case 0:IO0SET=SEGS_GND;IO0CLR= (int)(10); digi = ms%10; break;case 1:1); digi = ms/10;case 2:2); digi = second%10;case 3:3); digi = second/10;case 4:4); digi = minute%10;case 5:5); digi = minute/10;default:break;switch (digi)

7、/ 根据digi的值来设置SEGS_A2GSEGS_A2G= 0X3F; / SEGS_A2G稍后用来设置P1.19P1.25SEGS_A2G= 0X06;SEGS_A2G= 0X5B;SEGS_A2G= 0X4F;SEGS_A2G= 0X66;SEGS_A2G= 0X6D;case 6:SEGS_A2G= 0X7D;case 7:SEGS_A2G= 0X07;case 8:SEGS_A2G= 0X7F;case 9:SEGS_A2G= 0X6F;IO1CLR = (int)(0x3f 19); /设置P1.19P1.25为低电平IO1SET = (int)(SEGS_A2G /根据SEGS_

8、A2G的值来设置P1.19P1.25 /设置管脚值4.主控程序主函数反复检测键盘的输入如果发现有键盘按下,则处理按键,如果LED更新标志LED_Refresh被置1,则更新LED显示。时间中断处理函数IRQ_Timer0每0.00133s被触发一次,设置led更新为使能状态,如果累计发生六次时间中断,并且秒表处于走表状态,则将秒表的计时增加0.01s.变量clk_on被初始化为0,使秒表在刚开启时处于停表状态。 int minute,second,ms; /全局变量声明int segid;int clk_on =0; /控制停表走表int key_en ; /控制按键使能,用来防止按键误判in

9、t LED_Refresh; /控制led更新int main (void)while(1)key_handler(); /检测按键输入dispLED(segid,ms,second,minute); /控制led输出return 0;实验总结:使用LPC2131型ARM微处理器和相应的外围器件来实现一个数字秒表,其中包含了,电源复位电路,JTAG下载电路,时钟电路等。ARM的I/O主要是通过IODIR.IOPIN.IOSET.IOCLR来控制的。设计时要充分考虑芯片管脚的电路驱动能力,例如七段LED码的加入,就加入了74S241来增加电流驱动力。实时操作系统uCOS一在ARM上的移植软件仿真

10、摘 要:介绍了实时操作系统uCOSII的特点 ,讨论了其在 LPC2106上移植的可能性, 成功通过软件仿真地将uCOSII移植到LPC2106上, 并通过例程验证了移植代码的正确性。引 言目前嵌入式系统在家电、移动电话、PDA等各种领域的应用日益广泛,程序设计也越来越复杂,这就需要采用一个通用的嵌入式操作系统来对其进行管理和控制。移植了操作系统 的嵌入式系统开发,可大大减轻程序员的负担,操作系统提供了多任务的管理功能,只需专注于每个任务的管理。对于不同的应用,可以按照相同的步骤完成系统设计。如果更换硬件平台,则只需要对操作系统进行少量的移植工作,与硬件无关的应用代码完全无需修改,同时,可增强

11、代码的可读性、可维护性和可扩展性。uCOSII是一个可裁减的、源代码开放 的、结构小巧、可剥夺型的实时多任务内核,它提供任务调度、任务间的通信与同步、 任务管理、 时间管理和内存管理 等基本功能。将uCOSII移植到嵌入式处理器上,对于提高产品质量、 缩短开发周期和降低成本等方面有着重 要的意 义。本 文主要介 绍uCOSII在飞利浦的一款AR M7TDMI的嵌入式处理器LPC2106应用。1 嵌入式操作系统 uCOSII11 uCOSII简介uCOSII是一种性能优良源码公开且被广泛应用的免费嵌入式操作系统,它结构小巧、具有基于优先级的抢占式实时多任务内核,绝大部分代码是用ANSI C语言编

12、写的,与硬件相关部分用汇编语言编写,使之可供不同构架的微处理器使用。只要有标准的ANSI C交叉编译器,有汇编器、链接器等软件工具,就可以将 uCOSII嵌入到开发的产品中。uCOSII是面向中小型嵌入式系统,具有执行效率高、占用空间小、实时性能优良和可扩展性强等特点,包含全部功能模块的内核大约为10kB。如果经过裁减只保留核心代码,则可压缩到3kB左右。严格地 说uCOSII只是一个实时操作系统内核,它仅仅包含了任务调度、任务管理、时间管理、内存管理和任务间的通信和同步等基本功能,没有提供输入输出管理、文件系统、网络等额外的服务。但由于uCOSII良好的可扩展性和源码开放,这些非必需的功能完

13、全可以由用户自己根据需要分别实现。12 uCOSII的工作原理uCOSII的工作流程如图 1所示:首先进行操作系统初始化,主要完成任务控制块(TCB)初始化;然后就可以开始创建新任务、初始化任务堆栈区;最后调用OSSTART()函数, 启动多任务调度 。在多任务调度开始后,启动时钟节拍源开始计时。此节拍源为系统提供周期性的时钟中断信号、实现延时和超时确认。当时钟中断来临时,系统把当前正在执行的任务挂起,保护现场,进行中断处理,判断有无任务延时到期。若有,则使该任务进入就绪态,并对所有进入就绪态的任务的优先级进行比较,通过任务切换去执行最高优先级的任务。若没有别的任务进入就绪态,则恢复现场继续执

14、行原任务 。另一种调度方式是任务级的调度,即通过发软中断命令或依靠处理器在任务执行中调度。如任务要等待信号量或一个正在执行的任务被挂起时,就需要在此任务中调度,找出目前处于就绪态的优先级最高的任务去执行。当没有任何任务进入就绪态时,就去执行空任务。1.3 UC/OS的移植要求UC/OS的正常运行需要处理器平台满足以下要求:a)处理器的C编译器能产生可重入代码。b)用C语言就可以打开和关闭中断。c)处理器支持中断,并且能产生定时中断(通常在10至100Hz之间)。d)处理器支持能够容纳一定量数据(可能是几千字节)的硬件堆栈。e)处理器有将堆栈指针和其它CPU寄存器读出和存储到堆栈或内存中的指令。

15、我们的KEIL和ADS均支持UC/OS的要求。因此可以在LPC2000系列上移值。2 基于LPC1602的软件仿真电路LPC1602是PHILIPS公司推出的一款功能强大、超低功耗且具有ARM7TDMI内核的32位微控制器。 它具有丰富的片上资源,完全可以满足一般的工业控制需要,同时还可以减少系统硬件设计的复杂度,提高系统的稳定性。它的工作原理主要是用ARM7芯片LPC1602为内核,与一系列外围器件连接起来。这里所用到的电路图如下:仿真是的结果:将ADS1.2编译运行后生成的test.hex文件导入到ARM芯片中去,按下key1按键的结果。* 功能:计数器,通过两个按键来控制加减计数器,并输

16、出数码管显示.。*/#include config.h#define CON 0x000000ff /控制P0.0P0.7#define TASK_STK_SIZE 64OS_STK Main_TaskStkTASK_STK_SIZE;OS_STK Task0StkTASK_STK_SIZE;void Main_Task(void *data);void Task0(void *data);/* 名称:main()主函数,启动多任务环境 int main (void) OSInit(); OSTaskCreate(Main_Task, (void *)0, &Main_TaskStkTASK_

17、STK_SIZE - 1, 0); OSStart(); return 0;Main_Task()初始化目标板,建立其他任务 void Main_Task(void *pdata) pdata=pdata; TargetInit(); OSTaskCreate(Task0, (void *)0, &Task0StkTASK_STK_SIZE - 1, 1); PINSEL0=0x0; IODIR=CON; IOCLR=CON; OSTaskSuspend(OS_PRIO_SELF); Task0()任务void Task0(void *pdata) uint16 temp; temp=0; f

18、or(;) if(IOPIN&0x00030000)!=0x00030000) OSTimeDly(OS_TICKS_PER_SEC/50);0x00030000)=0x00020000) temp+;0x00030000)=0x00010000) temp-; while(IOPIN&=0x00030000); IOSET=temp; OSTaskResume(0);该程序中一共启用的两个任务:第一个任务,其实只要是用来启用第二个任务Task0(按键任务),然后就自己挂起了。void Main_Task(void *pdata)第二个任务:查询两个按键,如果上面那个按键按下则显示增1,按下下

19、面的则相反。部分程序:if(IOPIN& 总结由于没有开发板一直不能进行移植实验,且之前没有学习过操作系统移植方面知识,对具体怎样移植很是迷惑,之前(考虑到电脑的装系统和软件安装)认为系统移植是不是先把系统下载到RAM中,然后再把编写好的程序再下载到ARM中,思路很是混乱。经过长时间的上网查资料,下相关的文档、软件以及程序现在才稍微理解了些。我对系统移植的理解:系统移植就是利用一些编程好的程序来辅助运行我们要实现的功能。比如说那些OS_CPU.H、OS_CPU_a.s、OS_CPU.c函数并不是用来直接下载到ARM版中的,而是你编写的具体函数在运行的时候会用到这些函数。而使用这些函数的好处时,实现切换任务之间的控制,而不在是像单片机那时的中断响应方式。

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2