




已阅读5页,还剩20页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1ARM9嵌入式系统实验实验报告 院(系)名称自动化科学与电气工程学院 学生姓名 学号 任课老师2013年 11 月 14 日实验一ARM基础知识和开发环境一、实验目的1掌握ARM的串行口工作原理。2学习编程实现ARM的UART通讯。3掌握S3C2410寄存器配置方法。二、实验内容 1.熟悉打开已有工程的步骤,掌握仿真调试的方法。 2.建立一个新工程,熟练掌握编译器和链接器的设置方法。 3.从串口输入字符串,将09数字在超级终端上连续显示,“Enter”键换行。 4.将第三步得到的字符转换成BCD码,限制在01023,用于控制直流电机。三、预备知识 1. 了解EWARM集成开发环境的基本功能 2. 学习串口通讯的基本知识3. 熟悉S3C2410串口有关的寄存器四、实验设备及工具 1. 2410s教学实验箱2. S3C2410的JTAG仿真器3. ARM EWARM5.3集成开发环境 4. 串口连接线五、实验原理及说明 1 异步串行IO 异步串行方式是将传输数据的每个字符一位接一位(例如先低位、后高位)地传送。数据的各不同位可以分时使用同一传输通道,因此串行IO可以减少信号连线,最少用一对线即可进行。接收方对于同一根线上一连串的数字信号,首先要分割成位,再按位组成字符。为了恢复发送的信息,双方必须协调工作。在微型计算机中大量使用异步串行IO方式,双方使用各自的时钟信号,而且允许时钟频率有一定误差,因此实现较容易。但是由于每个字符都要独立确定起始和结束(即每个字符都要重新同步),字符和字符间还可能有长度不定的空闲时间,因此效率较低。 2 RS-232C接口通信的两种基本连接方式这是美国电子工业协会推荐的一种标准(Electronic industries Association Recoil-mended Standard)。它在一种25针接插件(DB25)上定义了串行通信的有关信号。这个标准后来被世界各国所接受并使用到计算机的IO接口中。两种连接方式如下图:3 信号电平规定1) EIA电平:双极性信号逻辑电平, 它是一套负逻辑定义 -3V到-25V之间的电平表示逻辑“1”。 +3V到+25V之间的电平表示逻辑“0”。2) TTL电平:计算机内部(S3C2410)使用LVTTL电平3) 电平转换电路:常用专门的RS-232接口芯片,如SP3232、SP3220等,在LVTTL电平和EIA电平之间实现相互转换。4 异步串行口接口电路六、实验方法1 以实验一为模板,完成实验的1和2。2 将接收串口数据的数组cl1改为cl256,用cli=0x0d 回车字符作为一帧结束的条件。3 将“Exp4 电机转动控制实验” inc目录下的MotorCtrl.H 和src目录下的MotorCtrl.C拷到该工程相应目录,将MotorCtrl.C 添加到工程中。4 在main函数里包含以下头文件 #include “./inc/MotorCtrl.h”5 在main函数里包含以下头文件 #include “inc/macro.h“,#define MOTOR_COUNT 12657。 6 在Main函数里执行init_MotorPort()。7 直流电机调试的函数是 SetPWM(setspeed -512)*MOTOR_COUNT/1024),setspeed是速度指令,取值范围01023。七、程序源代码#include ./inc/macro.h#include ./inc/drivers.h#include ./uhal/isr.h#include ./inc/MotorCtrl.h/#include ./inc/sys/lib.h/#include ./src/gui/gui.h#define U8 unsigned char#include #include #define TRUE 1#define FALSE 0/#pragma import(_use_no_semihosting_swi) / ensure no functions that use semihosting #define rUTRSTAT0(*(volatile unsigned *)0x50000010)/取寄存器指针的值#define rUTRSTAT1(*(volatile unsigned *)0x50004010)#define WrUTXH0(ch)(*(volatile unsigned char *)0x50000020)=(unsigned char)(ch)#define WrUTXH1(ch)(*(volatile unsigned char *)0x50004020)=(unsigned char)(ch)#define RdURXH0()(*(volatile unsigned char *)0x50000024)#define RdURXH1()(*(volatile unsigned char *)0x50004024)#define MOTOR_COUNT 12657 /void Uart_SendByten(int Uartnum, U8 data);void Uart_SendByten(int,U8);char Uart_Getchn(char* Revdata, int Uartnum, int timeout);void ARMTargetInit(void);void hudelay(int time);int main(void) char c1255; char err; int i=0; int num=0; init_MotorPort();ARMTargetInit(); / do target (uHAL based ARM system) initialisation /while(1) num=0; err=Uart_Getchn(&c1i,0,0);/从串口采集数据 if (err=TRUE) /有输入 if(c1i=0xd) /输入为回车,一帧结束 for(i=0;c1i!=0xd;i+) Uart_SendByten(0,c1i); num=num*10+c1i-0;/转换为BCD Uart_SendByten(0,0xa);/换行 Uart_SendByten(0,0xd);/回车 i=0; SetPWM(num -512)*MOTOR_COUNT/1024); else i+; void Uart_SendByten(int Uartnum, U8 data)/ok eric rong if(Uartnum=0) while(!(rUTRSTAT0 & 0x4); /Wait until THR is empty.hudelay(10);WrUTXH0(data); else while(!(rUTRSTAT1 & 0x4); /Wait until THR is empty.hudelay(10);WrUTXH1(data); char Uart_Getchn(char* Revdata, int Uartnum, int timeout)if(Uartnum=0)while(!(rUTRSTAT0 & 0x1); /Receive data read*Revdata=RdURXH0();return TRUE;elsewhile(!(rUTRSTAT1 & 0x1);/Receive data read*Revdata=RdURXH1();return TRUE;八、思考题1. 232串行通讯的数据格式是什么?答:格式如下图所示 2. 串行通讯最少需要几根线,分别如何连接?答:至少需要三根线,分别是发送线,接收线,和接地线。连接方法如图所示,3. ARM的串行口有几个,相应的寄存器是什么? 答:S3C2410自带三个异步串行口控制器。控制寄存器UCONn,FIFO控制寄存器UFCONn,线路控制寄存器ULCONn,控制寄存器UMCONn,状态寄存器UTRSTAT,错误状态寄存器UERSTAT,FIFO状态寄存器UFSTAT,发送寄存器UTXH和接收寄存器URXH,波特率因子寄存器UBRDIV。4. 用中断方式实现串口驱动。答:中断方式实现串口驱动的流程图如下:实验二LCD 和电机等综合实验一、实验目的 1熟悉ARM本身自带的六路即三对PWM,掌握相应寄存器的配置。 2编程实现ARM系统的PWM输出用于控制直流电机。3了解LCD基本概念与原理。 4理解LCD的驱动控制。 5熟悉用ARM内置的LCD控制器驱动LCD。二、实验内容 学习直流电机的工作原理,了解实现电机转动对于系统的软件和硬件要求。学习ARM知识,掌握PWM的生成方法。1编程实现ARM芯片的一对PWM输出用于控制直流电机的转动,通过A/D旋钮控制其正反转及转速。2通过超级终端来控制直流电机的转动。学习LCD显示器的基本原理,理解其驱动控制方法。掌握两种LCD驱动方式的基本原理和方法。并用编程实现:1 用ARM内置的LCD控制器来驱动LCD。三、预备知识 1、用EWARM集成开发环境,编写和调试程序的基本过程。 2、ARM应用程序的框架结构。 3、掌握通过ARM自带的A/D转换器的使用。 4、了解直流电机的基本原理。 四、实验设备及工具 硬件:ARM嵌入式开发平台、用于S3C2410的JTAG仿真器、PC机Pentium100以上。 软件:PC机操作系统Win2000或WinXP、EWARM集成开发环境、仿真器驱动程序、超级终端通讯程序 五、实验原理及说明 1)直流电动机的PWM电路原理 晶体管的导通时间也被称为导通角,若改变调制晶体管的开与关的时间,也就是说通过改变导通角的大小,如下图所示,来改变加在负载上的平均电压的大小,以实现对电动机的变速控制,称为脉宽调制 (PWM)变速控制。在PWM变速控制中,系统采用直流电源,放大器的频率是固定,变速控制通过调节脉宽来实现。 2)开发平台中直流电机驱动的实现 开发板中的直流电机的驱动部分如图7-3所示;由于S3C2410X芯片自带PWM定时器,所以控制部分省去了三角波产生电路、脉冲调制电路和PWM信号延迟及信号分配电路,取而代之的是S3C2410X芯片的定时器0、1组成的双极性PWM发生器。 PWM发生器用到的寄存器主要有以下几个:TCFG0、TCFG1、TCON、TCNTB0 & TCMPB0、TCNTO0。3)LCD(Liquid Crystal Display)原理液晶得名于其物理特性:它的分子晶体,以液态存在而非固态。LCD显示器的基本原理就是通过给不同的液晶单元供电,控制其光线的通过与否,从而达到显示的目的。因此,LCD的驱动控制归于对每个液晶单元的通断电的控制,每个液晶单元都对应着一个电极,对其通电,便可使光线通过(也有刚好相反的,即不通电时光线通过,通电时光线不通过)。4)S3C2410 LCD控制器逻辑框图5)UPTECH-2410-S LCD图形显示方式UPTECH-2410-S的LCD显示模块由LCD控制器和16位色彩色LCD示器组成。其显示方式以直接操作显示缓冲区的内容进行,LCD控制器会通过DMA从显示缓冲区中获取数据,不需要CPU干预。本系统采用的LCD分辨率为640X480,工作在65536色彩色显示模式,在该模式下,显示缓冲区中的一个字节数据代表LCD上的一个点的颜色信息,因此,所需要的显示缓冲区大小为640X480X2字节。其中每个字节的彩色数据格式如下图所示:六、实验方法电机试验1 通过一个电位器控制直流电机转动速度,并且用该电位器值使屏幕显示不同颜色。2 用三个电位器分别控制R、G、B,观察屏幕的变化。3 使用函数Uart_Printf(),将RGB的值打印到串口输出。LCD实验:1 在Main函数里执行LCD_Init();2 将AD采样的结果在驱动电机的同时,和jcolor建立起联系。3 显示缓冲区填充LCDBufferII2kj=jcolor; 4 调用LCDFresh()函数。七、程序源代码#include ./inc/drivers.h#include ./inc/lib.h#include #include #include #include ./inc/max504.h#include ./inc/MotorCtrl.h#include ./inc/EXIO.h#include ./inc/lcd320.h#include ./inc/macro.h#define MCLK (50700000)#define MOTOR_SEVER_FRE1000/20kHz#define MOTOR_CONT(MCLK/2/2/MOTOR_SEVER_FRE)#define MOTOR_MID(MOTOR_CONT/2)#define ADCCON_FLAG(0x115)#define ADCCON_ENABLE_START_BYREAD(0x01)#define rADCCON(*(volatile unsigned *)0x58000000)#define rADCDAT0(*(volatile unsigned *)0x5800000C)#define PRSCVL (496)#define ADCCON_ENABLE_START (0x1)#define STDBM (0x02)#define PRSCEN (0x114)#define rADCCON (*(volatile unsigned *)0x58000000)#define rADCDAT0 (*(volatile unsigned *)0x5800000C)#define rUTRSTAT0 (*(volatile unsigned *)0x50000010)/#define rUTRSTAT0 (*(volatile unsigned *)0x50000024) #define RdURXH0()(*(volatile unsigned char *)0x50000024)void ARMTargetInit(void);extern U32 LCDBufferII2480640;void init_ADdevice()/初始化rADCCON=(PRSCVL|ADCCON_ENABLE_START|STDBM|PRSCEN);int GetADresult(int channel) rADCCON=ADCCON_ENABLE_START_BYREAD|(channel2)2)2);/BGR hudelay(10); for (i=0;i480;i+) for (j=0;j640;j+) LCDBufferII2ij=jcolor; LCD_Refresh() ; Uart_Printf(0,RGB is: %.6xn,jcolor );八、思考题1)液晶显示的基本原理是什么?答:LCD显示器是通过给不同的液晶单元供电,控制其光线的通过与否,从而达到显示的目的。因此,LCD的驱动控制归于对每个液晶单元通断电的控制,每个液晶单元都对应着一个电极,对其通电,便可使用光线通过(也有刚好相反的,即不通电时光线通过,通电时光线不通过)。光源的提供方式有两种:透射式和反射式。笔记本电脑的LCD显示屏即为透射式,屏后面有一个光源,因此外界环境可以不需要光源。而一般微控制器上使用的LCD为反射式,需要外界提供光源,靠反射光来工作。2)总线方式驱动液晶模块和使用控制器进行驱动控制有什么异同?答:(1) 总线驱动方式 一般带有驱动模块的LCD显示屏使用这种驱动方式,由于LCD已经带有驱动硬件电路,因此模块给出的是总线接口,便于与单片机的总线进行接口。驱动模块具有八位数据总线,外加一些电源接口和控制信号。而且自带显示缓存,只需要将要显示的内容送到显示缓存中就可以实现内容的显示。由于只有八条数据线,因此常常通过引脚信号来实现地址与数据线复用,以达到把相应数据送到相应显示缓存的目的。下图为一个典型的显示模块(HY12864B)提供的总线接口。 (2) 控制器扫描方式 S3C2410X中具有内置的LCD控制器,它具有将显示缓存(在系统存储器中)中的LCD图象数据传输到外部LCD驱动电路的逻辑功能。 S3C2410X中内置的LCD控制器可支持灰度LCD和彩色LCD。在灰度LCD上,使用基于时间的抖动算法(time-based dithering algorithm)和FRC (Frame Rate Control)方法,可以支持单色、4级灰度和16级灰度模式的灰度LCD。 在彩色LCD上,可以支持256级彩色,使用STN LCD可以支持4096级彩色。对于不同尺寸的LCD,具有不同数量的垂直和水平象素、数据接口的数据宽度、接口时间及刷新率,而LCD控制器可以进行编程控制相应的寄存器值,以适应不同的LCD显示板。3)LCD显示图形的基本思想是什么?答:UPTECH-3000的LCD显示模块由S3C2410的LCD控制器和256色彩色LCD显示器组成。其显示方式以直接操作显示缓冲区的内容进行,LCD控制器会通过DMA从显示缓冲区中获取数据,不需要CPU干预。本系统采用的LCD分辨率为320X240,工作在256色彩色显示模式,在该模式下,显示缓冲区中的一个字节数据代表LCD上的一个点的颜色信息,因此,所需要的显示缓冲区大小为320X240X1字节。其中每个字节的彩色数据格式如下图所示:实验三基于实时操作系统mC/OS-II实验一、 实验目的1. 了解uCOS-II内核的主要结构。2. 在内核移植了uCOS-II 的处理器上创建任务。二、实验内容 1. 运行实验十,在超级终端上观察四个任务的切换。2. 任务13,每个控制“红”、“绿”、“蓝”一种颜色的显示,适当增加OSTimeDly()的时间,且优先级高的任务延时时间加长,以便看清三种颜色。3. 引入一个全局变量 BOOLEAN ac_key,解决完整刷屏问题。4. 任务4管理键盘和超级终端,当键盘有输入时在超级终端上显示相应的字符。三、预备知识1掌握在EWARM集成开发环境中编写和调试程序的基本过程。 2了解S3C2410处理器的结构。 3了解uCOS-II系统结构。四、实验设备及工具 硬件:ARM嵌入式开发平台、用于S3C2410的JTAG仿真器、PC机Pentium100以上。 软件:PC机操作系统Win2000或WinXP、EWARM集成开发环境、仿真器驱动程序、超级终端通讯程序。五、实验原理及说明所谓移植,指的是一个操作系统可以在某个微处理器或者微控制器上运行。虽然uCOS-II的大部分源代码是用C语言写成的,仍需要用C语言和汇编语言完成一些与处理器相关的代码。比如:uCOS-II在读写处理器、寄存器时只能通过汇编语言来实现。因为uCOS-II在设计的时候就已经充分考虑了可移植性,所以,uCOS-II的移植还是比较容易的。 1. 要使uCOS-II可以正常工作,移植mCOS-II时须满足的条件:a) 处理器的C编译器能产生可重入代码; b) 在程序中可以打开或者关闭中断; c) 处理器支持中断,并且能产生定时中断(通常在10100Hz之间);d) 处理器能容纳一定量数据的硬件堆栈;e) 处理器有将栈指针和其他CPU寄存器内容保存到栈(或者内存)的指令,以及相应的出栈指令。2. 多任务,uCOS-II支持多任务并行执行,使用OSTaskStkInt()创建新任务,同时调用本函数来初始化该任务的栈结构。任务的状态转换如下图:六、实验方法1 以实验十为模板,将实验六 inc目录下的LCD320.H 和src目录下的LCD640.C拷到 模板下的相应目录,将LCD640.C加入工程中。2 包含以下头文件 #include “inc/lcd320.h”。3 改LCD640.C 文件中包含头文件的路径, #include ./inc/drv/reg2410.h 4 声明引用的变量 extern U32 LCDBufferII2LCDHEIGHTLCDWIDTH;七、程序源代码#include./ucos-ii/includes.h /* uC/OS interface */#include ./ucos-ii/add/osaddition.h#include ./inc/drivers.h#include ./inc/sys/lib.h#include ./src/gui/gui.h#include #include #include ./inc/lcd320.h /#pragma import(_use_no_semihosting_swi) / ensure no functions that use semihosting OS_EVENT *MboxSem;/*任务定义*/*OS_STK SYS_Task_StackSTACKSIZE= 0, ; /system task刷新任务堆栈#define SYS_Task_Prio1 void SYS_Task(void *Id);*/OS_STK task1_StackSTACKSIZE=0, ; /Main_Test_Task堆栈void Task1(void *Id); /Main_Test_Task#define Task1_Prio 12OS_STK task2_StackSTACKSIZE=0, ; /test_Test_Task堆栈void Task2(void *Id); /test_Test_Task#define Task2_Prio 15OS_STK task3_StackSTACKSIZE=0, ; /test_Test_Task堆栈void Task3(void *Id); /test_Test_Task#define Task3_Prio 17OS_STK task4_StackSTACKSIZE=0, ; /test_Test_Task堆栈void Task4(void *Id); /test_Test_Task#define Task4_Prio 3/*已经定义的OS任务*#define SYS_Task_Prio1#define Touch_Screen_Task_Prio9#define Main_Task_Prio 12#define Key_Scan_Task_Prio 58#define Lcd_Fresh_prio 59#define Led_Flash_Prio 60*/#define rUTRSTAT0(*(volatile unsigned *)0x50000010)/取寄存器指针的值#define rUTRSTAT1(*(volatile unsigned *)0x50004010)#define WrUTXH0(ch)(*(volatile unsigned char *)0x50000020)=(unsigned char)(ch)#define WrUTXH1(ch)(*(volatile unsigned char *)0x50004020)=(unsigned char)(ch)#define RdURXH0()(*(volatile unsigned char *)0x50000024)#define RdURXH1()(*(volatile unsigned char *)0x50004024)U32 r;U32 g;U32 b;BOOLEAN AC_KEY = 1;extern U32 LCDBufferII2480640;void CopyLCDData(U32 jcol);void Uart_SendByten(int,U8);char Uart_Getchn(char* Revdata, int Uartnum, int timeout);/*事件定义*/ Main function. /int main(void)r = 0x000000ff;g = 0x0000ff00;b = 0x00ff0000;ARMTargetInit(); / do target (uHAL based ARM system) initialisation /OSInit();LCD_Init();OSTaskCreate(Task1, (void *)0, (OS_STK *)&task1_StackSTACKSIZE-1, Task1_Prio);OSTaskCreate(Task2, (void *)0, (OS_STK *)&task2_StackSTACKSIZE-1, Task2_Prio);OSTaskCreate(Task3, (void *)0, (OS_STK *)&task3_StackSTACKSIZE-1, Task3_Prio); OSTaskCreate(Task4, (void *)0, (OS_STK *)&task4_StackSTACKSIZE-1, Task4_Prio); OSAddTask_Init(0);BSPprintf(0,Starting uCOS-II.n);OSStart(); / start the OS /return 0;/main/void Task1(void *Id) for(;) if (AC_KEY) AC_KEY = 0; CopyLCDData(r);/复制LCD数据为红色 LCD_Refresh();/刷屏 printf(run task1 red!n); AC_KEY = 1; OSTimeDly(1000);void Task2(void *Id) for(;) if (AC_KEY) AC_KEY = 0; CopyLCDData(g);/复制LCD数据为绿色 LCD_Refresh();/刷屏 printf(run task2 green!n); AC_KEY = 1; OSTimeDly(1000);void Task3(void *Id) for(;) if (AC_KEY) AC_KEY = 0; CopyLCDData(b);/复制LCD数据为蓝色 LCD_Refresh();/刷屏 printf(run task3 blue!n); AC_KEY = 1; OSTimeDly(1000);void Task4(void *Id)char rcv;while (1)if (rUTRSTAT0 & 0x1)/Receive data readrcv = RdURXH0();printf(nYour input is %cn, rcv); else printf(nNo datan); OSTimeDly(1000);void CopyLCDData(U32 jcol) int i,j=0; U32 jcolor; jcolor=jcol; for (i=0;i480;i+) for (j=0;jarch-os_cpu_c.c 找到钩子函数void OSTimeTickHook (void),用计数器控制恢复任务操作,编写OSTaskResume( Taskn_Prio);3. 信号量管理 声明信号量OS_EVENT *Fun_Semp; 在Main函数里创建信号量Fun_Semp=OSSemCreate(1);在各个Task里执行下列操作 OSSemPend(Fun_Semp,0,&err); . OSSemPost(Fun_Semp);4 . 定义事件控制块指针OS_EVENT *Str_Box,在main函数里创建消息邮箱,Str_Box=OSMboxCreate(void*)在Task1里发送消息 Times+=1; s=&Times; OSMboxPost(Str_Box,s); 在Task2里请求消息邮箱ss=OSMboxPend(Str_Box,0,&err);printf(%dn,*ss);5. 文件的使用.文件使用的关键是加载文本文件,用记事本创建 test.txt文件,文件的内容不包含汉字。运行实验十三,此时LCD上没有任何显示。打开超级终端,按回车键,显示/sys 用mkdir创建ucos子目录,在ucos下再创建fj子目录,用cd进入/sys/ucos/fj ,在该目录下执行命令dl test.txt d,按回车键,加载test.txt 。再运行文件十三,在LCD上即可观察你编写的文本文件。 七、程序源代码#include./ucos-ii/includes.h /* uC/OS interface */#include ./ucos-ii/add/osaddition.h#include ./inc/drivers.h#include ./inc/sys/lib.h#include ./src/gui/gui.h#include #include #include ./inc/l
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 护理不良事件与险危事件分析
- 执行采购工作总结
- 了解课件教学课件
- 公司用电安全培训内容课件
- 公司生产安全培训资料课件
- 无偿保管合同的模板5篇
- 黑龙江省2025年全国成人高等学校招生统一考试地理复习题库及答案
- 广东省2025年成人高考英语(高起点)复习题及答案
- 结算岗位工作总结
- 数据汇报高级感
- 前列腺增生科普课件
- 2025年财务核算招聘笔试模拟题
- 人教版四年级上册第一单元1.6《算盘》课时练(含答案)
- 鸡蛋品质检测与分析
- 铁路客运市场营销现状分析及策略优化
- 2026年色彩流行趋势报告
- 2025年县教育局中小学校长后备干部考试试题及答案
- 心衰护理题库及答案
- 《无人机飞行控制技术》全套教学课件
- 超声诊断在肱骨外上髁炎(网球肘)中的应用
- 舆论导向培训课件
评论
0/150
提交评论