《uCOOS-II原理与ARM应用程序设计》课件第9章_第1页
《uCOOS-II原理与ARM应用程序设计》课件第9章_第2页
《uCOOS-II原理与ARM应用程序设计》课件第9章_第3页
《uCOOS-II原理与ARM应用程序设计》课件第9章_第4页
《uCOOS-II原理与ARM应用程序设计》课件第9章_第5页
已阅读5页,还剩133页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第九章天嵌TQ2440移植与实例

9.1准备工作9.2TQ2440工程实例9.3Bootloader9.4本章小结

TQ2440实验板集成了主频为400MHz的S3C2440芯片,板载2片HY57V561620芯片,使得SDRAM空间大小为64MB,外扩NAND型FLASH芯片为64MB的K9F1208,同时,也集成了一个2MB大小的NOR型FLASH芯片AM29LV160DB。该实验板是性价比较高的ARM实验平台,笔者基于该平台做了大量的程序设计工作。这里将基于TQ2440介绍µC/OS-Ⅱ的移植和典型应用程序框架及其Bootloader方法。由于TQ2440的外设接口与UP-Star区别较大,所以,基于UP-Star的工程均需做较大的修改才能在TQ2440上运行。将TQ2440的串口0与计算机串口相连(建议在关机状态下操作),连接好J-LINK仿真器(需接第一章图1-1所示转接头),接上TQ2440实验板的电源插头,打开TQ2440实验板电源开关和计算机,则实验平台就建立起来了。9.1准备工作本章实例用到的硬件外设如下:

(1)四个LED灯,位于TQ2440实验板的下方,在蜂鸣器的右下侧,标号为LED1、LED2、LED3和LED4,分别与S3C2440A芯片的GPB5、GPB6、GPB7和GPB8相连接。

(2)串口0,位于TQ2440实验板的左上方,连接方式与UP-Star实验板相似,参考第一章图1-30。注意:由于计算机串口的第2脚为RXD(即接收脚),第3脚为TXD(即发送脚),UP-Star实验板的串口0第2脚为RXD,第3脚为TXD,与计算机串口排列相同,所以连接UP-Star实验板的串口线为交叉线;而TQ2440实验板的串口第2脚为TXD,第3脚为RXD,与计算机串口排列相反,故连接TQ2440实验板的串口线为不交叉的平行直连线。

(3)四个按键,位于TQ2440的左下方,在蜂鸣器的左侧,成“十”字形排列,标号为K1、K2、K3和K4,分别与EINT1、EINT4、EINT2和EINT0相连。这四个按键与UP-Star中的按键相比,没有硬件防抖功能。

(4)蜂鸣器,由TOUT0管脚输出的PWM波控制。

本章实例拟实现的功能为:当按下某个按键时,串口调试助手会显示按键信息,对应的LED灯闪烁,同时蜂鸣器会响一下。在第八章工程ex8_1的基础上,新建工程ex9_1,保存目录为D:\ZYUCOSII\ex9_1,此时的工程ex9_1与工程ex8_1完全相同,只是工程文件名更改为ex9_1。工程ex9_1中人工输入代码的文件有bsp.c、bsp.h、app.c、app.h、appfun.c、startup.s、includes.h和ex9_1.mac,这些文件在工程ex8_1的基础上都做了修改。下面列出了各个文件的修改情况。9.2TQ2440工程实例(1)文件ex9_1.mac使用UltraEdit软件修改,修改的部分有中断控制器、时钟和存储器,其代码如下:28}

29

30execUserPreload()

31{

32_message"InitializingSDRAM...\n";

33setup();

34_message"InitializingSDRAM...Completed\n";

35}(2)文件startup.s修改了时钟初始化和存储器配置,其代码如下:

1;Filename:startup.s

2;Byzhnyang@21

3;@2009-4-4

4;ForS3C2440A(RunafterReset)

5;CopyrightReserved

6

7;Note:@LittleEndian

8

177;EntertheCCode

178LDRR0,=main

179BXR0

180

181END(3) includes.h文件没有做修改,由于其代码较少,也罗列如下:

1/*FileName:includes.h

2**Byzhnyong@21

3**@2009-4-4

4**CopyrightReserved

5*/

6

7#include"stdio.h"

8#include"string.h"

9#include"math.h"

10

11#include"..\\ucosii\\ucos_ii.h"

12

13#include"app.h"

14#include"..\\ports\\bsp.h"

(4)文件bsp.h修改了I/O口、外部中断0~2和外部中断4及定时器0的定义,其代码如下:

1/*FileName:bsp.h

2**Byzhnyong@21

3**@2009-4-4

4**CopyrightReserved

5*/

6

(5)文件bsp.c修改了LED灯和定时器0的初始化及中断入口函数OS_CPU_ExceptHndlr,其代码如下:

1/*FileName:bsp.c

2**Byzhnyong@21

3**@2009-4-4

4**CopyrightReserved

5*/

6

7#include"..\\user\\includes.h"

8

9voidOS_CPU_ExceptHndlr(INT32Uexcept_type)

(6)文件app.h修改了信号量、定时器和任务的声明,其代码如下:

1/*FileName:app.h

2**Byzhnyong@21

3**@2009-4-4

4**CopyrightReserved

5*/

6

7#ifdefMY_APP_GLOBALS

8#defineMY_APP

9#else

10#defineMY_APPextern

(7)文件app.c没有做任何修改,由于其代码短小,这里罗列如下:

1/*FileName:app.c

2**Byzhnyong@21

3**@2009-4-4

4**MainRoutine

5**CopyrightReserved

6*/

7

8#include"includes.h"

9

(8)文件appfun.c修改较大,其代码如下:

1/*FileName:appfun.c

2**Byzhnyong@21

3**@2009-4-4

4**CopyrightReserved

5*/

6

7#defineMY_APP_GLOBALS

8#include"includes.h"

9

346//TheCallbackfunctionforRingTmrTimer

347voidringTmrFnc(void*ptmr,void*callback_arg)

348{

349//CloseRing

350TCON&=~(1<<0);//StopTimer0

351GPBCON&=~(1<<1|1<<0);

352}第13~34行为LED灯点亮函数;第36~41行为关闭四个LED灯的函数;第43~65行为使LED灯闪烁一下的函数。第70~75行为开定时器4中断;第77~89行为开放外部中断0、1、2和4。第94~134行为串口收发相关的函数。

第139行为任务AppTaskStart的代码,其中,第164~171行创建了四个信号量,即key1Sem、key2Sem、key3Sem和key4Sem;第180~186行创建了一个OneShot型一次定时器,该定时器启动后,延时0.5秒后将调用回调函数ringTmrFnc,然后自动停止。第204~247行创建了四个任务。

第249~268行为任务AppTask_1代码,在第256行,请求key1Sem信号量,如果得到该信号量,则第259~263行将通过串口调试助手输出按键信息,启动系统定时器RingTmr,并打开蜂鸣器,0.5秒后,在回调函数ringTmrFnc中关闭蜂鸣器(第347~352行)。其他三个任务的代码与任务1相似。

(9)工程ex9_1的配置也需要修改,如图9-1至图9-4所示。图9-1调试选项“Setup”图9-2调试选项“Breakpoints”图9-3连接配置文件“MemoryRegions”图9-4连接配置文件“Stack/HeapSizes”

(10)完成后的工程ex9_1如图9-5所示。仿真调试时,按下四个按键K1、K2、K3和K4的任一个按键后,相应的LED灯会闪动,同时蜂鸣器会鸣叫0.5秒,串口调试助手将显示按键信息,如图9-6所示。图9-5工程ex9_1图9-6串口调试助手显示结果工程ex9_1工作在仿真环境下,需要做一些修改才能生成正确的Boot表,即能下载到FLASH中的目标代码。

在工程ex9_1的基础上,新建工程ex9_2,保存目录为D:\ZYUCOSII\ex9_2,与工程ex9_1相比,需要改动的文件只有cstartup.s,即在该文件中添加Bootloader代码,使芯片S3C2440A上电复位后,将程序代码从FLASH中拷贝到SDRAM中,并重定位SDRAM到地址0x0处。文件cstartup.s的内容如下:9.3Bootloader需要重点关注的代码行为第149~249行,这段代码将FLASH的地址0x0~0x100000范围内的代码搬移至SDRAM的地址0x30000000~0x30100000处,请读者结合《ARM原理与C程序设计》以及K9F1208芯片资料自行分析代码。

此外,工程ex9_2的配置需要修改,如图9-7和图9-8所示。在图9-7中,ROM地址为0x1000~0x9FFF;RAM地址为0x10000~0x2FFFF。这两个空间均可以取得大一些(从附录二中flash.h文件可知实际目标文件代码最高地址为0x7E10)。图9-8指示EWARM将编译生成目标文件ex9_2.hex,这个目标文件中的数据提取出来生成文件flash.h,生成方法参考第7.2.3节。将生成的flash.h文件写入TQ2440实验板中的FLASH芯片K9F1208中,即可使工程ex9_2自举运行。将flash.h写入K9F1208芯片中的工程参见附录二工程ex9_3。

注意:工程ex9_2不能在线仿真运行!图9-7工程ex9_2链接配置图9-8工程ex9_2输出目标文件配置另一种将工程ex9_2的目标文件下载到TQ2440实验板的FLASH芯片K9F1208的方法为借助于H-JTAGv0.9.2软件,这时图9-8中的配置改动如图9-9所示。图9-9生成普通二进制目标代码按图9-9所示配置后,编译链接工程ex9_2将在D:\ZYUCOSII\ex9_2\Debug\Exe目录下生成ex9_2.bin目标文件。bin文件与hex文件相比,bin文件是没有格式的,其内容为从第0个地址开始依次按字节排列到最后一个地址的数据。

然后,取下J-LINK仿真器(断开电源操作),连接TQ2440简易并口仿真器与其JTAG口,打开TQ2440实验板电源,运行H-JTAG软件,配置并口如图9-10所示,点击“OK”按钮后进入图9-11。在图9-11中,不能选中“AutoInit”菜单。图9-10H-JTAG连接图图9-11H-JTAG服务器正常

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论