还剩23页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
《嵌入式系统》实验指导书编写周立功、刘伟春邵阳学院信息工程系MagicARM2410教学实验开发平台系统概述
一、简介MagicARM2410教学实验开发平台是一款可使用μC/OS-II、Linux和WinCE操作系统、支持QT、MiniGUI图形系统、集众多功能于一身的ARM9教学实验开发平台采用Samsung公司的ARM920T内核的S3C2410A微处理器,扩展有充足的存储资源和众多典型的嵌入式系统接口,是高校嵌入式系统创新实验室首选平台
二、实验箱的组成MagicARM2410实验箱硬件主要由以下6个部份组成DeviceARM2410核心板6层板工艺、MagicARM2410实验箱主板4层板工艺、实验箱电源板在实验箱内部、简易JTAG仿真器、GPRS模块选件、VGAPACK板选件、CS8900PACK板选件MagicARM2410实验箱—功能框图
三、软件资源Linuxv
2.
4.18嵌入式操作系统MiniGUI图形用户界面学习版软件包Linux/uCLinuxQt/Embedded和Qtopia支持LED、蜂鸣器驱动forLinux按键驱动forLinuxI2C驱动程序forLinuxUSBDevice驱动程序forLinuxUSBHUB驱动forLinuxUSBHID驱动鼠标、键盘,forLinuxUSB大容量驱动forLinux基于OV511芯片的USB摄像头驱动forLinux基于OV511芯片的USB摄像头驱动forLinuxvideo4linux视频软件forLinuxPCMCIA驱动forLinuxIDE驱动forLinuxSD/MMC卡驱动程序forLinuxFramebuffer驱动--TFT640×480液晶屏forLinux触摸屏驱动forLinux10M/100M以太网卡DM9000驱动forLinuxMadplay、boa移植forLinuxuC/OS-IIv
2.52移植代码ZLG/FS文件管理系统软件包ZLG/FFS支持写平衡的NANDFlash驱动软件包foruC/OS-IIZLG/FTP-S嵌入式FTP服务器软件包foruC/OS-II支持RS485/422MODBUSRTU协议软件包foruC/OS-IIZLG/GPS软件包foruC/OS-IIZLG/GPRS软件包foruC/OS-II串口软件包I2C软件包
四、硬件配置表实验一GPIO输出控制实验1.实验目的
(1)掌握DeviceARM2410专用工程模板和EasyJTAG-H仿真器的安装和使用;
(2)能够在MagicARM2410实验箱上运行第一个程序无操作系统;
(3)熟悉S3C2410A处理器的I/O配置方法及GPIO输出控制2.实验设备硬件PC机1台;MagicARM2410教学实验开发平台1台软件Windows98/2000/XP操作系统;ADS
1.2集成开发环境3.实验内容控制MagicARM2410实验箱上的LED1~LED4显示及蜂鸣器报警先使用片外SDRAM进行调试,调试通过后将程序固化到片外NORFLASH中,脱机运行程序4.实验原理S3C2410A具有117个通用I/O口,分为A~H等8个端口,由于每个I/O都有第2功能,甚至第3功能,所以需要通过设置GPxCON寄存器来选择GPx口I/O的功能,其中x可以为A、B、C、D、E、F、G、H,表示相应的I/O端口;当I/O设置为GPIO输出模式Output模式时,可以通过写GPxDAT控制相应I/O口输出高电平或低电平GPxDAT为1的位对应I/O输出高电平,为0的位对应I/O输出低电平;实验电路图5.实验步骤调试程序1为ADS
1.2增加DeviceARM2410专用工程模板若已增加过,此步省略2连接EasyJTAG-H仿真器和MagicARM2410实验箱,然后安装EasyJTAG-H仿真器若已经安装过,此步省略3启动ADS
1.2,使用ARMExecutableImageforDeviceARM2410工程模板建立一个工程LEDCON4在工程src组中的main.c中编写实验代码5选用DebugRel生成目标,然后编译链接工程6将MagicARM2410实验箱上的蜂鸣器跳线JP9短接,将启动方式选择跳线JP8短接,然后按RST键复位系统7选择【Project】-【Debug】,启动AXD进行JTAG仿真调试需要正确设置仿真器,参考…实验指导第2章的内容8全速运行程序,程序将会在main.c的主函数中停止因为main函数起始处默认设置有断点9单步运行程序,或者全速运行程序,判断蜂鸣器及LED1~LED4的控制是否正确固化程序10仿真调试通过后,关闭AXD在ADS
1.2集成开发环境中选用Release生成目标,并设置生成LEDCON.hex文件或者LEDCON.bin文件,然后编译链接工程11将启动方式选择跳线JP8断开,然后按RST键复位系统12使用FlashProgrammer软件将LEDCON.hex烧写到片外NORFLASH,或者使用WR_NORFlash工程将LEDCON.bin烧写到片外NORFLASH13将EasyJTAG-H仿真器拔出,断开与MagicARM2410实验箱的连接,然后给MagicARM2410实验箱下电,然后再重新上电,观察程序是否能脱机运行6.思考题
(1)为什么这个实验的工程不需要设置链接地址?
(2)在S3C2410A处理器中,有哪些I/O只能设置为GPIO输出模式Output模式?
7.实验参考程序**--------------FileInfo-------------------------------------------------------------------------------**FileName:main.c**Description:MagicARM2410实验箱的基础实验---GPIO输出控制实验**使用GPIO控制LED1~LED4及蜂鸣器,先蜂鸣器响一声,全部闪烁5次,然后指示0~F的16进制数值****------------------------------------------------------------------------------------------------------#includeconfig.h//定义LED控制口输出高电平时点亮LED#defineLED1_CON111/*GPE11口*/#defineLED2_CON112/*GPE12口*/#defineLED3_CON14/*GPH4口*/#defineLED4_CON16/*GPH6口*///定义蜂鸣器控制口#defineBEEP110/*GPH10口*/#defineBEEP_MASK~BEEP/***********************************************************************************************************Functionname:DelayNS**Descriptions:长软件延时**延时时间与系统时钟有关**Input:dly延时参数,值越大,延时越久**Output:无********************************************************************************************************/voidDelayNSuint32dly{uint32i;for;dly0;dly--fori=0;i50000;i++;}/***********************************************************************************************************Functionname:RunBeep**Descriptions:控制蜂鸣器Be一声音**Input:无**Output:无********************************************************************************************************/voidRunBeepvoid{rGPHDAT=rGPHDATBEEP_MASK;//BEEP=0DelayNS5;rGPHDAT=rGPHDAT|BEEP;//BEEP=1DelayNS5;}/***********************************************************************************************************Functionname:LED_DispAllOn**Descriptions:控制LED1~LED4全部点亮**Input:无**Output:无********************************************************************************************************/voidLED_DispAllOnvoid{rGPEDAT=rGPEDAT|0x0311;rGPHDAT=rGPHDAT|0x054;}/***********************************************************************************************************Functionname:LED_DispAllOff**Descriptions:控制LED1~LED4全部熄灭**Input:无**Output:无********************************************************************************************************/voidLED_DispAllOffvoid{rGPEDAT=rGPEDAT~0x0311;rGPHDAT=rGPHDAT~0x054;}/***********************************************************************************************************Functionname:LED_DispNum**Descriptions:控制LED1~LED4显示指定16进制数值LED4为最高位,LED1为最低为,点亮表示该位为1**Input:dat显示数值低4位有效**Output:无********************************************************************************************************/voidLED_DispNumuint32dat{dat=dat0x0000000F;//参数过滤//控制LED
4、LED3显示d
3、d2位ifdat0x08rGPHDAT=rGPHDAT|0x016;elserGPHDAT=rGPHDAT~0x016;ifdat0x04rGPHDAT=rGPHDAT|0x014;elserGPHDAT=rGPHDAT~0x014;//控制LED
2、LED1显示d
1、d0位rGPEDAT=rGPEDAT~0x0311|dat0x0311;}/***********************************************************************************************************Functionname:main**Descriptions:初始化I/O,然后控制LED显示**Input:无**Output:系统返回值0********************************************************************************************************/intmainvoid{inti;//初始化I/OrGPECON=rGPECON~0x0F22|0x0522;//rGPECON[25:22]=0101b,设置GPE
11、GPE12为GPIO输出模式rGPHCON=rGPHCON~0x338|0x118;//rGPHCON[13:8]=01xx01b,设置GPH
4、GPH6为GPIO输出模式rGPHCON=rGPHCON~0x0320|0x0120;//rGPHCON[21:20]=01b,设置GPH10为GPIO输出模式//LED显示控制while1{RunBeep;//蜂鸣器响一声//LED全闪烁5次fori=0;i5;i++{LED_DispAllOff;//LED全熄灭DelayNS5;LED_DispAllOn;//LED全点亮DelayNS5;}//控制LED指示0~F的16进制数值fori=0;i16;i++{LED_DispNumi;//显示数值iDelayNS5;}}return0;}/***********************************************************************************************************EndOfFile********************************************************************************************************/实验二外部中断实验1.实验目的掌握S3C2410A处理器外部中断的引脚功能设置;掌握中断初始化以及中断服务函数的编写2.实验设备硬件PC机1台;MagicARM2410教学实验开发平台1台软件Windows98/2000/XP操作系统;ADS
1.2集成开发环境3.实验内容设置GPF4引脚为外部中断EINT4功能,下降沿触发模式初始化S3C2410A中断控制器,设置EINT4为IRQ中断,并使能中断允许初始化完成后,等待外部中断产生中断服务程序里负责把LED1控制口输出信号取反,清除中断标志后退出中断4.实验原理独立按键KEY1电路使用了GPF4口,设置GPFCON寄存器可以选择GPF4引脚为外部中断EINT4功能,此时通过按下KEY1键即可触发外部中断;对于S3C2410A的众多中断源,通过设置INTMOD寄存器可将它们分为IRQ中断或FIQ中断,一般只设置一个中断源为FIQ中断对于多个IRQ中断,通过PRIORITY寄存器可以设置中断的优先级,一般将其设置为0使用默认固定的优先级即可;设置INTMSK寄存器使能某个中断源的中断允许,有些中断源还需要设置SUBMASK寄存器使能比如UART的发送中断和接收中断;对于外部中断EINT4~EINT23,由于它们在S3C2410A的中断控制器中不是独立中断源EINT4~EINT7共用一个中断源,EINT8~EINT23共用另一个中断源,所以还需要设置EINTMASK寄存器来使能某一个外部中断;由于S3C2410A的中断控制器不是向量中断控制器,即处理器硬件不能自动获取对应于中断源的中断服务程序地址,所以在IRQ中断服务程序中要通过中断标志寄存器INTPND来获得对应的中断服务程序地址参考ARMExecutableImageforDeviceARM2410工程模板的Target.c文件,其中的IRQ_Exception函数在中断服务程序中,退出中断之前要清除中断标志,即对SRCPND和INTPND寄存器相应位写1,先清除SRCPND寄存器,再清除INTPND寄存器对于外部中断EINT4~EINT23中断,要最先清除EINTPEND寄存器中的中断标志实验电路图5.实验步骤1启动ADS
1.2,使用ARMExecutableImageforDeviceARM2410工程模板建立一个工程EINT2在工程src组中的main.c中编写实验代码3选用DebugRel生成目标,然后编译链接工程4将MagicARM2410实验箱上的启动方式选择跳线JP8短接,然后按RST键复位系统5选择【Project】-【Debug】,启动AXD进行JTAG仿真调试6在中断服务程序中设置断点,全速运行程序,按下/释放KEY1按键,使EINT4为低/高电平产生中断7取消中断服务程序中有断点,全速运行程序,按下/释放KEY1按键,观察LED1灯的变化6.思考题EINT4与EINT0的中断设置和中断标志清除有什么异同?7.参考代码**--------------FileInfo-------------------------------------------------------------------------------**FileName:main.c**Description:MagicARM2410实验箱的基础实验---外部中断实验**使用外部中断EINT4进行LED1的控制,每当有一次中断,就把LED1控制口输出信号取反一次**------------------------------------------------------------------------------------------------------********************************************************************************************************/#includeconfig.h//定义LED控制口输出高电平时点亮LED#defineLED1_CON111/*GPE11口*/#defineLED2_CON112/*GPE12口*/#defineLED3_CON14/*GPH4口*/#defineLED4_CON16/*GPH6口*///定义独立按键KEY1的输入口#defineKEY_CON14/*GPF4口*///定义LED1控制值变量uint8ledcon=0x00;/***********************************************************************************************************Functionname:DelayNS**Descriptions:长软件延时**延时时间与系统时钟有关**Input:dly延时参数,值越大,延时越久**Output:无********************************************************************************************************/voidDelayNSuint32dly{uint32i;for;dly0;dly--fori=0;i50000;i++;}/***********************************************************************************************************Functionname:IRQ_Eint4**Descriptions:Eint4中断服务程序把LED1控制口输出信号取反**Input:无**Output:无********************************************************************************************************/voidIRQ_Eint4void{inti;//按键去抖动rGPFCON=rGPFCON~0x038;//设置为GPIO输入方式fori=0;i10000;i++;//延时去抖动ifrGPFDATKEY_CON//若是假按键,则直接退出{rGPFCON=rGPFCON|0x028;//设置回EINT4中断口//清除中断标志rEINTPEND=14;rSRCPND=14;rINTPND=rINTPND;return;}rGPFCON=rGPFCON|0x028;//设置回EINT4中断口//把LED1控制口输出信号取反ifledcon{ledcon=0;rGPEDAT=rGPEDAT~LED1_CON;}else{ledcon=1;rGPEDAT=rGPEDAT|LED1_CON;}//清除中断标志rEINTPEND=14;rSRCPND=14;rINTPND=rINTPND;}/***********************************************************************************************************Functionname:EINT_init**Descriptions:外部中断初始化设置GPF4引脚为外部中断EINT4功能,下降沿触发模式,并使能中断允许**Input:无**Output:无********************************************************************************************************/voidEINT_initvoid{rGPFCON=rGPFCON0xFFFFFCFF|0x028;//设置GPF4引脚为外部中断EINT4功能rEXTINT0=0x216;//外部中断EINT4设置为下降沿触发VICVectAddr
[4]=uint32IRQ_Eint4;//中断向量地址设置rPRIORITY=0x00000000;//使用默认的固定的优先级rINTMOD=0x00000000;//所有中断均为IRQ中断rINTMSK=~0x0000010;//使能EINT4中断rEINTMASK=~0x0000010;}/***********************************************************************************************************Functionname:LED_DispAllOff**Descriptions:控制LED1~LED4全部熄灭**Input:无**Output:无********************************************************************************************************/voidLED_DispAllOffvoid{rGPEDAT=rGPEDAT~0x0311;rGPHDAT=rGPHDAT~0x054;}/***********************************************************************************************************Functionname:main**Descriptions:初始化外部中断EINT4,然后循环等待中断**Input:无**Output:系统返回值0********************************************************************************************************/intmainvoid{//初始化I/OrGPECON=rGPECON~0x0F22|0x0522;//rGPECON[25:22]=0101b,设置GPE
11、GPE12为GPIO输出模式rGPHCON=rGPHCON~0x338|0x118;//rGPHCON[13:8]=01xx01b,设置GPH
4、GPH6为GPIO输出模式LED_DispAllOff;//熄灭LED1--LED4EINT_init;//外部中断初始化IRQEnable;//使能IRQ中断清零CPSR寄存器的I位while1;//等待外部中断return0;}/***********************************************************************************************************EndOfFile********************************************************************************************************/实验三步进电机控制实验1.实验目的了解步进电机的控制原理,掌握电机转动控制和调速方法2.实验设备硬件PC机1台;MagicARM2410教学实验开发平台1台软件Windows98/2000/XP操作系统;ADS
1.2集成开发环境3.实验内容通过4个GPIO输出有序的矩形脉冲,控制ULN2003驱动四相步进电机实现正转,调速的功能;控制的方法采用双四拍(AB―BC―CD―DA―AB;
4.实验原理步进电机是一种将电脉转换为角位移的数据控制电机,即给它一个脉冲信号,它就按设定的方向转动一个固定的角度用户可以通过控制脉冲的个数来控制角位移量,从而实现准确的定位操作;另外,通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的当然,对于步进电机各相绕组即内部线圈的控制脉冲要有一定的顺序,否则电机无法正常旋转MagicARM2410实验箱上的步进电机为四相步进电机,电机步距角为18度S3C2410A的GPIO驱动能力有限,必须通过ULN2003达林顿集成驱动芯片驱动步进电机,在步进电机和驱动电路之间连接了电阻,防止控制紊乱造成电机的损坏;实验电路图5.实验步骤1启动ADS
1.2,使用ARMExecutableImageforDeviceARM2410工程模板建立一个工程StepMoto2在工程src组中的main.c中编写实验代码3选用DebugRel生成目标,然后编译链接工程4将MagicARM2410实验箱上的步进电机控制电路的电源跳线JP5短接,将步进电机控制口跳线JP6短接5选择【Project】-【Debug】,启动AXD进行JTAG仿真调试6全速运行程序,观察步进电机转动方向及速度7改变控制步序延时参数,观察步进电机转动的速度
6.思考题
(1)如何控制步进电机反转?
(2)怎么样修改才能提高步进电机的转速?
7.参考代码**--------------FileInfo-------------------------------------------------------------------------------**FileName:main.c**LastmodifiedDate:2006-01-09**LastVersion:v
1.0**Description:MagicARM2410实验箱的基础实验---步进电机控制实验**使用GPIO控制步进电机转动,采用双四拍控制方式**------------------------------------------------------------------------------------------------------********************************************************************************************************/#includeconfig.h//步进电机控制口线及操作宏函数定义#defineMOTOA15/*GPC5*/#defineMOTOB16/*GPC6*/#defineMOTOC17/*GPC7*/#defineMOTOD10/*GPC0*/#defineGPIOSETPINrGPCDAT=rGPCDAT|PIN/*设置PIN输出1,PIN为MOTOA--MOTOD*/#defineGPIOCLRPINrGPCDAT=rGPCDAT~PIN/*设置PIN输出0,PIN为MOTOA--MOTOD*//***********************************************************************************************************Functionname:DelayNS**Descriptions:长软件延时**延时时间与系统时钟有关**Input:dly延时参数,值越大,延时越久**Output:无********************************************************************************************************/voidDelayNSuint32dly{uint32i;for;dly0;dly--fori=0;i50000;i++;}/***********************************************************************************************************Functionname:MOTO_Mode2**Descriptions:步进电机双四拍程序**时序控制为AB--BC--CD--DA--AB,共控制运转4圈电机步距角为18度**Input:dly每一步的延时控制值越大,延时越久**Output:无********************************************************************************************************/voidMOTO_Mode2uint8dly{uint32i;fori=0;i20;i++{//AB相有效GPIOSETMOTOA;GPIOSETMOTOB;DelayNSdly;GPIOCLRMOTOA;GPIOCLRMOTOB;//BC相有效GPIOSETMOTOB;GPIOSETMOTOC;DelayNSdly;GPIOCLRMOTOB;GPIOCLRMOTOC;//CD相有效GPIOSETMOTOC;GPIOSETMOTOD;DelayNSdly;GPIOCLRMOTOC;GPIOCLRMOTOD;//DA相有效GPIOSETMOTOD;GPIOSETMOTOA;DelayNSdly;GPIOCLRMOTOD;GPIOCLRMOTOA;}}/***********************************************************************************************************Functionname:main**Descriptions:使用GPIO控制步进电机转动,采用双四拍控制方式**Input:无**Output:系统返回值0********************************************************************************************************/intmainvoid{//步进电机控制口设置rGPCCON=rGPCCON~0x0000FC03|0x00005401;//GPC
0、GPC5--7口设置为输出rGPCUP=rGPCUP|0x00E1;//禁止GPC
0、GPC5--7口的上拉电阻rGPCDAT=rGPCDAT~0x00E1;//设置GPC
0、GPC5--7口输出低电平while1{MOTO_Mode21;//控制步进电机正转DelayNS50;//停止步进电机,延时}return0;}/***********************************************************************************************************EndOfFile********************************************************************************************************/实验四μC/OS-II移植实验1.实验目的
(1)掌掌握将μC/OS-II操作系统移植到ARM9处理器的方法
(2)了解μC/OS-II操作系统的基本原理和移植条件2.实验设备硬件PC机1台;MagicARM2410教学实验开发平台1台软件Windows98/2000/XP操作系统;ADS
1.2集成开发环境3.实验内容学习移植μC/OS-II操作系统到ARM9处理器,然后编写一个简单的多任务应用程序,实现LED流水灯控制
4.实验原理μC/OS-II概述μC/OS-II是一个完整的、可移植、可固化、可剪裁的占先式实时多任务内核µC/OS-II是用ANSIC语言编写,包含一小部分汇编代码,使之可以供不同架构的微处理器使用µC/OS-II可以管理64个任务,具有信号量、互斥信号量、事件标志组、消息邮箱、消息队列、任务管理、时间管理和内存块管理等系统功能μC/OS-II软件体系结构如图
3.1所示,由图可以看出,μC/OS-II包括以下3个部分
(1)μC/OS-II核心代码包括10个C程序文件和1个头文件,主要实现了系统调度、任务管理、内存管理、信号量、消息邮箱和消息队列等系统功能此部分的代码与处理器无关
(2)μC/OS-II配置代码包括2个头文件,用于裁剪和配置μC/OS-II此部分的代码与用户实际应用相关
(3)μC/OS-II移植代码包括1个汇编文件、1个C程序文件和1个头文件,这是移植μC/OS-II所需要的代码此部分的代码与处理器相关μC/OS-II移植条件移植μC/OS-II之前需要注意,目标处理器必须满足以下几点要求
(1)处理器的C编译器能产生可重入型代码;
(2)处理器支持中断,并且能产生定时中断;
(3)用C语言就可以开/关中断;
(4)处理器有将堆栈指针以及其它CPU寄存器的内容读出,并保存到堆栈或内存中去的指令S3C2410A微控制器可以满足第
2、4和5点要求,使用ADS
1.2的C编译器可以满足第
1、3点要求μC/OS-II移植步骤
(1)OS_CPU.H的移植在OS_CPU.H文件中定义与处理器相关实际上是与编译器相关的数据类型,如BOOLEAN、INT8U、INT8S等等在OS_CPU.H文件中定义与处理器相关的宏,主要是进入临界区的OS_ENTER_CRITICAL和退出临界区的OS_EXIT_CRITICAL,所以还要编写相应的软件中断处理代码可以在OS_CPU_C.C文件中编写实现开/关中断同样定义OS_TASK_SW为软件中断函数,并编写有相应的软件中断处理代码调用OSIntCtxSw函数实现任务切换
(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的移植由于ADS
1.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中声明,以实现任务级任务切换在ISR中切换任务时会调用OSIntCtxSw函数,代码参考程序清单
3.4启动µC/OS-II是通过调用OSStart实现,OSStart最终调用函数OSStartHighRdy运行多任务启动前优先级最高的任务OSStartHighRdy函数的代码参考程序清单
3.5函数OSTickISR为系统时钟节拍中断函数,这需要使用到处理器的定时器和定时中断为了达到集中地初始化硬件定时器、中断和I/O等的目的,此函数可以在用户工程的起动代码文件中实现,参考程序清单
3.
65.实验步骤
(1)为ADS
1.2增加DeviceARM2410专用工程模板若已增加过,此步省略
(2)连接EasyJTAG-H仿真器和MagicARM2410实验箱,然后安装EasyJTAG-H仿真器若已经安装过,此步省略,短接蜂鸣器跳线JP9
(3)启动ADS
1.2,使用ARMExecutableImageforDeviceARM2410uCOSII工程模板建立一个工程Demo_uCOSII(本范例在ADS文件夹中操作)
(4)在ADS文件夹中新建arm、Arm_Pc、SOURCE文件夹将μC/OS
2.52源代码添加到SOURCE文件夹,将移植代码添加到arm文件夹,将移植的PC服务代码添加到Arm_Pc文件夹(移植代码可以在DeviceARM2410光盘上获得,μC/OS
2.52源代码需要从参考文献
[5]的光盘上获得)
(5)在src组中的main.c中编写主程序代码
(6)根据程序设计来更改Os_cfg.h文件,配置μC/OS-II操作系统对于本实验,μC/OS-II的配置使用模板默认设置即可
(7)选用DebugRel生成目标,如图
3.3所示,然后编译链接工程
(8)将MagicARM2410实验箱上的蜂鸣器跳线JP9短接,将启动方式选择跳线JP8短接,然后按RST键复位系统
(9)选择【Project】-【Debug】,启动AXD进行JTAG仿真调试
(10)全速运行程序,程序将会在main.c的主函数中停止因为main函数起始处默认设置有断点
(11)单击ContextVariable图标按钮或者选择【ProcessorViews】-【Variables】打开变量观察窗口,通过此窗口可以观察局部变量和全局变量
(12)可以单步运行程序,可以设置/取消断点,或者全速运行程序,停止程序运行,观察变量的值,判断蜂鸣器及LED1~LED4的控制是否正确
6.思考题
(1)请简单描述μC/OS-II操作系统的软件体系结构
(2)请简单描述μC/OS-II应用程序的基本结构
(3)μC/OS-II任务的编写与前后台程序有何差别?
7.实验参考程序**--------------FileInfo-------------------------------------------------------------------------------**FileName:main.c**Descriptions:主函数**********************************************************************************************************/#includeconfig.h#defineTask0StkLengh64//DefinetheTask0stacklength定义用户任务0的堆栈长度#defineTask1StkLengh64//DefinetheTask1stacklength定义用户任务1的堆栈长度OS_STKTask0Stk[Task0StkLengh];//DefinetheTask0stack定义用户任务0的堆栈OS_STKTask1Stk[Task1StkLengh];//DefinetheTask1stack定义用户任务1的堆栈//定义LED控制口输出高电平时点亮LED#defineLED1_CON111/*GPE11口*/#defineLED2_CON112/*GPE12口*/#defineLED3_CON14/*GPH4口*/#defineLED4_CON16/*GPH6口*///定义蜂鸣器控制口#defineBEEP110/*GPH10口*/#defineBEEP_MASK~BEEPvoidTask0void*pdata;//Task0任务0voidTask1void*pdata;//Task1任务1voidRunBeepvoid;voidLED_DispNumuint32dat;/***********************************************************************************************************Functionname:main**Descriptions:主函数,uCOS/II移植实验范例**Input:无**Output:系统返回值0********************************************************************************************************/intmainvoid{OSInit;OSTaskCreateTask0void*0Task0Stk[Task0StkLengh-1]2;OSTaskCreateTask1void*0Task1Stk[Task1StkLengh-1]3;OSStart;return0;}/**********************************************************************************************************Functionname:Task0**Descriptions:初始化GPIO,并约1秒蜂鸣一次********************************************************************************************************/voidTask0void*pdata{pdata=pdata;TargetInit;//初始化I/OrGPECON=rGPECON~0x0F22|0x0522;//rGPECON[25:22]=0101b,//设置GPE
11、GPE12为GPIO输出模式rGPHCON=rGPHCON~0x338|0x118;//rGPHCON[13:8]=01xx01b,//设置GPH
4、GPH6为GPIO输出模式rGPHCON=rGPHCON~0x0320|0x0120;//rGPHCON[21:20]=01b,//设置GPH10为GPIO输出模式while1{RunBeep;OSTimeDlyOS_TICKS_PER_SEC;}}/**********************************************************************************************************Functionname:Task1**Descriptions:控制LED显示加1********************************************************************************************************/voidTask1void*pdata{uint8i;pdata=pdata;while1{fori=0;i16;i++{LED_DispNumi;OSTimeDlyOS_TICKS_PER_SEC/2;}}}/**************************************************************************************Functionname:RunBeep**Descriptions:控制蜂鸣器Be一声音**Input:无**Output:无************************************************************************************/voidRunBeepvoid{rGPHDAT=rGPHDATBEEP_MASK;//BEEP=0OSTimeDlyOS_TICKS_PER_SEC/10;rGPHDAT=rGPHDAT|BEEP;//BEEP=1OSTimeDlyOS_TICKS_PER_SEC/10;}/**************************************************************************************Functionname:LED_DispNum**Descriptions:控制LED1~LED4显示指定16进制数值LED4为最高位,**LED1为最低为,点亮表示该位为1**Input:dat显示数值低4位有效**Output:无************************************************************************************/voidLED_DispNumuint32dat{dat=dat0x0000000F;//参数过滤//控制LED
4、LED3显示d
3、d2位ifdat0x08rGPHDAT=rGPHDAT|0x016;elserGPHDAT=rGPHDAT~0x016;ifdat0x04rGPHDAT=rGPHDAT|0x014;elserGPHDAT=rGPHDAT~0x014;//控制LED
2、LED1显示d
1、d0位rGPEDAT=rGPEDAT~0x0311|dat0x0311;}/***********************************************************************************************************EndOfFile********************************************************************************************************/。