嵌入式系统开发与应用实验报告.doc_第1页
嵌入式系统开发与应用实验报告.doc_第2页
嵌入式系统开发与应用实验报告.doc_第3页
嵌入式系统开发与应用实验报告.doc_第4页
嵌入式系统开发与应用实验报告.doc_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

嵌入式系统开发与应用实验报告专业 班级 姓名 学号 中国矿工业大学计算机科学与技术学院2012年4月实验一 串口通讯实验 一、实验目的1.掌握ARM 的串行口工作原理。2.学习编程实现ARM 的UART 通讯。3.掌握S3C2410寄存器配置方法。二、实验内容实现查询方式串口的收发功能。学习串行通讯原理,了解串行通讯控制器,阅读ARM 芯片文档,掌握ARM 的UART 相关寄存器的功能,熟悉ARM 系统硬件的UART 相关接口。编程实现ARM 和计算机实现串行通讯:ARM 监视串行口,将接收到的字符再发送给串口(计算机与开发平台是通过超级终端通讯的),即按PC 键盘通过超级终端发送数据,开发平台将接收到的数据再返送给PC,在超级终端上显示。三、预备知识了解ADT集成开发环境的基本功能。学习串口通讯的基本知识。熟悉S3C2410串口有关的寄存器。四、实验设备JXARM9-2410教学实验箱ADT1000仿真器和ADT IDE集成开发环境 串口连接线五、实验原理1异步串行IO异步串行方式是将传输数据的每个字符一位接一位(例如先低位、后高位)地传送。数据的各不同位可以分时使用同一传输通道,因此串行IO 可以减少信号连线,最少用一对线即可进行。接收方对于同一根线上一连串的数字信号,首先要分割成位,再按位组成字符。为了恢复发送的信息,双方必须协调工作。在微型计算机中大量使用异步串IO 方式,双方使用各自的时钟信号,而且允许时钟频率有一定误差,因此实现较容易。但是由于每个字符都要独立确定起始和结束(即每个字符都要重新同步),字符和字符间还可能有长度不定的空闲时间,因此效率较低。串行通信字符格式DB-25 DB-9引脚定义DB-25 DB-9引脚说明RS-232C接口通信的两种基本连接方式 信号电平规定 EIA电平:双极性信号逻辑电平, 它是一套负逻辑定义-3V到-25V之间的电平表示逻辑“1”+3V到+25V之间的电平表示逻辑“0”TTL电平:计算机内部(S3C2410)使用TTL电平 电平转换电路:常用专门的RS-232接口芯片,如SP3232、SP3220等,在TTL电平和EIA电平之间实现相互转换。S3C2410异步串行口控制器S3C2410自带三个异步串行口控制器每个控制器有16字节的FIFO(先入先出寄存器)最大波特率115.2K 每个UART有7种状态:溢出错误,校验错误,帧错误,暂停态,接收缓冲区准备好,发送缓冲区空,发送移位缓冲器空,这些状态可以由相应的UTRSTATn或UERSTATn寄存器表示,并且与发送接收缓冲区相对应的有错误缓冲区波特率的大小可以通过设置波特率寄存器(UBRDIVn)控制,计算公式如下:使用PCLK时的计算公式如下:UBRDIVn = (int)PCLK/(波特率16)1使用UCLK时的计算公式如下:UBRDIVn = (int)UCLK/(波特率16)1例如:使用PCLK,在40 MHz的情况下,当波特率取115 200 bps时,UBRDIVn = (int)40000000/(11520016)1 = 20六、实验步骤1串口初始化 /* 配置系统时钟 */ ChangeClockDivider(1,1); / 1:2:4 ChangeMPllValue(0xa1,0x3,0x1); / FCLK=202.8MHz /* 初始化端口 */ Port_Init(); /* 初始化串口 */ Uart_Init(0,115200);Uart_Select(0);2发送数据unsigned char ch = a;ch = Uart_Getch();3接收数据 Uart_SendByte(ch)七、实验结果编程实现ARM 和计算机实现串行通讯:ARM 监视串行口,将接收到的字符再发送给串口(计算机与开发平台是通过超级终端通讯的),即按PC 键盘通过超级终端发送数据,开发平台将接收到的数据再返送给PC,在超级终端上显示。实验结果如图所示实验二 中断实验 一、实验目的1.了解中断的作用2.掌握嵌入式系统中断的处理流程3.掌握ARM中断编程二、实验内容编写中断处理程序,处理外部中断三、预备知识了解ADT集成开发环境的基本功能 了解中断的作用以及处理过程四、实验设备JXARM9-2410教学实验箱ADT1000仿真器和ADT IDE集成开发环境 串口连接线五、实验原理1.CPU与外设之间传输数据的控制方式 查询方式查询方式的优点是硬件开销小,使用起来比较简单,但在此方式下,CPU要不断地查询外设的状态,当外设未准备好时,CPU就只能循环等待,不能执行其它程序,这样就浪费了CPU的大量时间,降低了CPU的利用率 中断方式当CPU进行主程序操作时,外设的数据已存入输入端口的数据寄存器;或端口的数据输出寄存器已空,由外设通过接口电路向CPU发出中断请求信号,CPU在满足一定的条件下,暂停执行当前正在执行的主程序,转入执行相应能够进行输入/输出操作的子程序,待输入/输出操作执行完毕之后CPU再返回并继续执行原来被中断的主程序。这样CPU就避免了把大量时间耗费在等待、查询状态信号的操作上,使其工作效率得以大大地提高 DMA方式 当高速外设要与系统内存或者要在系统内存的不同区域之间,进行大量数据的快速传送时,查询方式和中断方式可能不能满足要求,直接存储器存取(DMA)就是为解决这个问题提出的采用DMA方式,在一定时间段内,由DMA控制器取代CPU,获得总线控制权,来实现内存与外设或者内存的不同区域之间大量数据的快速传送中断处理示意图向CPU发出中断请求的设备或事件称为中断源,断点处产生中断请求,CPU执行中断流程,响应中断,并执行用户定义的中断服务子程序处理完毕,执行中断返回动作,主程序继续运行中断响应中断源向CPU发出中断请求,若优先级别最高,CPU在满足一定的条件下,可以中断当前程序的运行,保护好被中断的主程序的断点及现场信息。然后,根据中断源提供的信息,找到中断服务子程序的入口地址,转去执行新的程序段,这就是中断响应。中断服务子程序2. S3C2410的中断控制器: 中断源状态寄存器该寄存器的32位中每一位对应一个中断源。如果相应中断源产生中断请求则其对应位被置为1。该寄存器中的位将自动由中断请求置位,而不管INTMASK寄存器中的掩码位是否有效。另外,该寄存器不受中断控制器的优先级逻辑影响。在中断服务程序中,该寄存器的相应位必须进行清零处理,清零的方法是将该位写入1。 寄存器中断模式 中断屏蔽寄存器 优先级寄存器 中断状态寄存器 中断偏移寄存器 六、实验步骤1、建立一个中断工程。2、编写外部中断处理程序的中断服务函数,并保存为main.c文件,将该文件加入到工程中。main.c文件如下:/* 包含文件 */#include def.h#include 2410lib.h#include option.h#include 2410addr.h#include interrupt.h/* functions */void eint2_isr(void) _attribute_ (interrupt(IRQ);void eint3_isr(void) _attribute_ (interrupt(IRQ);void delay();/* variables */int dither_count2 = 0;int dither_count3 = 0;static int nLed = 0;/*/ Function name: Main/ Description : JXARM9-2410 中断实验主程序/ 完成功能:/ 外部中断按键引发中断/ Return type: void/ Argument : void*/void Main(void)/* 配置系统时钟 */ ChangeClockDivider(1,1); / 1:2:4 ChangeMPllValue(0xa1,0x3,0x1); / FCLK=202.8MHz /* 中断初始化 */ Isr_Init(); /* 初始化端口 */ Port_Init(); /* 初始化串口 */ Uart_Init(0,115200); Uart_Select(0); /* 打印提示信息 */PRINTF(n-外部中断测试程序-n);PRINTF(n请将UART0与PC串口进行连接,然后启动超级终端程序(115200, 8, N, 1)n);PRINTF(n外部中断测试开始n);/* 请求中断 */ TODO. Irq_Request(IRQ_EINT2,eint2_isr); Irq_Request(IRQ_EINT3,eint3_isr); /* 使能中断 */Irq_Enable(IRQ_EINT2); Irq_Enable(IRQ_EINT3); dither_count2 = 0; dither_count3 = 0; while(1) delay(); dither_count2+; dither_count3+; /*/ Function name: eint2_isr/ Description : EINT2中断处理程序/ Return type: int/ Argument : voidvoid eint2_isr(void)/ TODO.Irq_Clear(IRQ_EINT2);if(dither_count25) dither_count2=0; Led_Display(nLed); nLed=(nLed0x01); /*/ Function name: eint3_isr/ Description : EINT3中断处理程序/ Return type: int/ Argument : void*/void eint3_isr(void)/ TODO. Irq_Clear(IRQ_EINT3);if(dither_count35) dither_count3=0; Led_Display(nLed); nLed=(nLed0x02); void delay()int index = 0; for ( index = 0 ; index 20000; index+);3、在中断服务函数中添加代码实现如下功能:每触发一次中断,跑马灯闪烁一次。4、编译、下载运行程序查看程序是否正常。实验四 LCD显示实验 一、实验目的1.了解LCD显示的基本原理2.了解LCD的接口与控制方法3.掌握LCD显示图形的方法4掌握LCD显示字符的方法(本次实验显示汉字)二、实验内容1.编写图形显示函数,在LCD上显示图形2.编写HZK16读取函数,在LCD上显示汉字三、预备知识了解汉字库的组织方式,汉字显示的原理学习LCD的显示原理和控制办法四、实验设备JXARM9-2410教学实验箱ADT1000仿真器和ADT IDE集成开发环境 串口连接线五、实验原理1LCD显示原理LCD显示器是通过给不同的液晶单元供电,控制其光线的通过与否,从而达到显示的目的。因此,LCD的驱动控制归于对每个液晶单元通断电的控制,每个液晶单元都对应着一个电极,对其通电,便可使用光线通过(也有刚好相反的,即不通电时光线通过,通电时光线不通过)。光源的提供方式有两种:透射式和反射式。笔记本电脑的LCD显示屏即为透射式,屏后面有一个光源,因此外界环境可以不需要光源。而一般微控制器上使用的LCD为反射式,需要外界提供光源,靠反射光来工作。、2LCD 的驱动控制(1) 总线驱动方式一般带有驱动模块的LCD显示屏使用总线驱动方式,这种LCD可以方便地与各种低档单片机进行接口,如8051系列单片机。由于LCD已经带有驱动硬件电路,因此模块给出的是总线接口,便于与单片机的总线进行接口。驱动模块具有八位数据总线,外加一些电源接口和控制信号。而且还自带显示缓存,只需要将要显示的内容送到显示缓存中就可以实现内容的显示。由于只有八条数据线,因此常常通过引脚信号来实现地址与数据线复用,以达到把相应数据送到相应显示缓存的目的。(2) 控制器扫描方式扫描器控制方式LCD显示屏没有驱动电路,需要与驱动电路配合使用。这种LCD体积小,但需要另外的驱动芯片。通常可以使用带有LCD驱动能力的高档MCU驱动,如ARM系列的S3C44B0。S3C44B0中具有内置的LCD控制器,它具有将显示缓存中的图象数据传输到外部LCD驱动电路的逻辑功能。S3C44B0中内置的LCD控制器可支持灰度LCD和彩色LCD。可以支持单色、4 级灰度和16 级灰度模式的灰度LCD以及256级彩色。对于不同尺寸的LCD,具有不同数量的垂直和水平象素、数据接口的数据宽度、接口时间及刷新率,而LCD控制器可以进行编程控制相应的寄存器值,以适应不同的LCD显示板。LCD 控制器逻辑框图S3C2410 LCD控制器外部接口信号3JXARM9-2410 LCD图形显示方式 JXARM9-2410的LCD显示模块由S3C2410的LCD控制器和256色彩色LCD显示器组成。其显示方式以直接操作显示缓冲区的内容进行,LCD控制器会通过DMA从显示缓冲区中获取数据,不需要CPU干预。本系统采用的LCD分辨率为320X240,工作在256色彩色显示模式,在该模式下,显示缓冲区中的一个字节数据代表LCD上的一个点的颜色信息,因式下,显示缓冲区中的一个字节数据代表LCD上的一个点的颜色信息,因此,所需要的显示缓冲区大小为320X240X1字节。其中每个字节的彩色数据格式如下图所示:4JXARM9-2410 LCD控制器初始化初始化LCD端口,由于LCD控制端口与CPU的GPIO端口是复用的,因此必须设置相应寄存器为LCD驱动控制端口。申请显示缓冲区,大小为320X240X1字节。初始化LCD控制寄存器,包括设置LCD分辨率,扫描频率,显示缓冲区等。5LCD字符显示LCD字符显示就是将字库(汉字字库、英文字库或者其他语言字库)中的字模以图形方式显示在LCD上,其显示原理和图形显示没有差别,只要把汉字当成一幅画,画在显示屏上就可以了。关键在于如何取得字符的图形,也就是字符的点阵字模。在常用的汉字点阵字库文件。例如常用的1616点阵HZK16文件,按汉字区位码从小到大依次存有国标区位码表中的所有汉字。HZK组成:每个汉字占用32个字节,每个区为94个汉字。在计算机中,汉字是以机内码的形式存储的,每个汉字占用两个字节:第一个字节为区码(qh),为了与ASCII码区别,范围从十六进制的0A1H开始(小于80H的为ASCII码字符),对应区位码中区码的第一区;第二个字节为位码(wh),范围也是从0A1H开始,对应某区中的第一个位码。这样,将汉字机内码减去0A0AH就得该汉字的区位码。因此,汉字在汉字库中的具体位置计算公式为:location = (94*(qh-1)+wh-1)*一个汉字字模占用字节数汉字字模:一个汉字字模占用的字节数根据汉字库的汉字大小不同而不同。以HZK16点阵字库为例,字模中每一点使用一个二进制位(Bit)表示,如果是1,则说明此处有点,若是0,则说明没有。这样,一个1616点阵的汉字总共需要16*16/8=32个字节表示。字模的表示顺序为:先从左到右,再从上到下,也就是先画左上方的8个点,再是右上方的8个点,然后是第二行左边8个点,右边8个点,依此类推,画满1616个点。因此,HZK16中汉字在汉字库中具体位置的计算公式为:(94*(qh-1)+(wh-1)*32。汉字“房”的机内码为十六进制的“B7BF”,其中“B7”表示区码,“BF”表示位码。所以“房”的区位码为0B7BFH-0A0A0H=171FH。将区码和位码分别转换为十进制得汉字“房”的区位码为“2331”,即“房”的点阵位于第23区的第31个字的位置,相当于在文件HZK16中的位置为第32(23-1) 94+(31-1)=67136B以后的32个字节为“房”的显示点阵。六、实验步骤1、打开ADT IDE集成开发环境导入实验模板中的工程文件。2、编辑main.c文件如下:/* 包含文件 */#include def.h#include 2410lib.h#include option.h#include 2410addr.h#include interrupt.h#include lcdlib.h/#define STN_LCD#define TFT_8_0void Lcd_Disp_Char(void);void Lcd_Disp_Grap(void);/*/ Function name: Main/ Description : JXARM9-2410 LCD显示实验主程序/ 实现功能:/ Return type: void/ Argument : void*/void Main(void)/* 配置系统时钟 */ ChangeClockDivider(1,1); / 1:2:4 ChangeMPllValue(0xa1,0x3,0x1); / FCLK=202.8MHz /* 初始化端口 */ Port_Init(); /* 初始化串口 */ Uart_Init(0,115200); Uart_Select(0); /* 打印提示信息 */PRINTF(n-LCD测试程序-n);PRINTF(n请将UART0与PC串口进行连接,然后启动超级终端程序(115200, 8, N, 1)n);/* LCD初始化 */ Lcd_Port_Init();#ifdef STN_LCD Lcd_Init(MODE_CSTN_8BIT); Glib_Init(MODE_

温馨提示

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

评论

0/150

提交评论