嵌入式实验指导使用版.docx
《嵌入式实验指导使用版.docx》由会员分享,可在线阅读,更多相关《嵌入式实验指导使用版.docx(32页珍藏版)》请在冰豆网上搜索。
嵌入式实验指导使用版
实验一基本接口实验
(一)
[实验目的]
1.掌握ARM的串行口工作原理
2.学习编程实现ARM的UART通讯
3.掌握S3C2410寄存器配置方法
4.中断的作用
5.掌握嵌入式系统中断的处理流程
6.掌握ARM中断编程
[预备知识]
1.了解ADT集成开发环境的基本功能
2.学习串口通讯的基本知识
3.熟悉S3C2410串口有关的寄存器
[试验设备]
1.JXARM9-2410教学实验箱
2.ADT1000仿真器和ADTIDE集成开发环境
3.串口连接线
[试验内容一]
实现查询方式串口的收发功能。
接收来自串口(通过超级终端)的字符并将接收到的字符发送到超级终端
[基础知识]
串行通信接口电路组成
1.可编程的串行接口芯片
2.波特率发生器
3.EIA与TTL电平转换器
4.地址译码电路
通信协议:
1.异步协议
2.同步协议
异步串行通讯
异步串行方式是将传输数据的每个字符一位接一位(例如先低位、后高位)地传送。
数据的各不同位可以分时使用同一传输通道,因此串行I/O可以减少信号连线,最少用一对线即可进行。
接收方对于同一根线上一连串的数字信号,首先要分割成位,再按位组成字符。
为了恢复发送的信息,双方必须协调工作。
在微型计算机中大量使用异步串行I/O方式,双方使用各自的时钟信号,而且允许时钟频率有一定误差,因此实现较容易。
但是由于每个字符都要独立确定起始和结束(即每个字符都要重新同步),字符和字符间还可能有长度不定的空闲时间,因此效率较低。
异步串行通信中的字符传送格式
❑开始前,线路处于空闲状态,送出连续“1”。
传送开始时首先发一个“0”
作为起始位,然后出现在通信线上的是字符的二进制编码数据。
每个字符的数据位长可以约定为5位、6位、7位或8位,一般采用ASCII编码。
后面是奇偶校验位,根据约定,用奇偶校验位将所传字符中为“1”的位数凑成奇数个或偶数个。
也可以约定不要奇偶校验,这样就取消奇偶校验位。
最后是表示停止位的“1”信号,这个停止位可以约定持续1位、1.5位或2位的时间宽度。
至此一个字符传送完毕,线路又进入空闲,持续为“1”。
经过一段随机的时间后,下一个字符开始传送才又发出起始位。
每一个数据位的宽度等于传送波特率的倒数。
微机异步串行通信中,常用的波特率为110,150,300,600,1200,2400,4800,9600等。
DB-25DB-9引脚定义
DB-25DB-9引脚说明
RS-232C接口通信的两种基本连接方式
信号电平规定
1.EIA电平:
双极性信号逻辑电平,它是一套负逻辑定义
2.-3V到-25V之间的电平表示逻辑“1”
3.+3V到+25V之间的电平表示逻辑“0”
4.TTL电平:
计算机内部(S3C2410)使用TTL电平
5.电平转换电路:
常用专门的RS-232接口芯片,如SP3232、SP3220等,在TTL电平和EIA电平之间实现相互转换。
S3C2410异步串行口控制器
1.S3C2410自带三个异步串行口控制器
2.每个控制器有16字节的FIFO(先入先出寄存器)
3.最大波特率115.2K
4.每个UART有7种状态:
溢出错误,校验错误,帧错误,暂停态,接收缓冲区准备好,发送缓冲区空,发送移位缓冲器空,这些状态可以由相应的UTRSTATn或UERSTATn寄存器表示,并且与发送接收缓冲区相对应的有错误缓冲区
5.波特率的大小可以通过设置波特率寄存器(UBRDIVn)控制,计算公式如下:
使用PCLK时的计算公式如下:
UBRDIVn=(int)[PCLK/(波特率×16)]–1
使用UCLK时的计算公式如下:
UBRDIVn=(int)[UCLK/(波特率×16)]–1
例如:
使用PCLK,在40MHz的情况下,当波特率取115200bps时,
UBRDIVn=(int)[40000000/(115200×16)]–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、发送数据
unsignedcharch='a';
ch=Uart_Getch();
3、接收数据
Uart_SendByte(ch)
[试验内容二]
编写中断处理程序,处理外部中断
[基础知识]
CPU与外设之间传输数据的控制方式
1、查询方式
查询方式的优点是硬件开销小,使用起来比较简单,但在此方式下,CPU要不断地查询外设的状态,当外设未准备好时,CPU就只能循环等待,不能执行其它程序,这样就浪费了CPU的大量时间,降低了CPU的利用率
2、中断方式
当CPU进行主程序操作时,外设的数据已存入输入端口的数据寄存器;或端口的数据输出寄存器已空,由外设通过接口电路向CPU发出中断请求信号,CPU在满足一定的条件下,暂停执行当前正在执行的主程序,转入执行相应能够进行输入/输出操作的子程序,待输入/输出操作执行完毕之后CPU再返回并继续执行原来被中断的主程序。
这样CPU就避免了把大量时间耗费在等待、查询状态信号的操作上,使其工作效率得以大大地提高
3、DMA方式
当高速外设要与系统内存或者要在系统内存的不同区域之间,进行大量数据的快速传送时,查询方式和中断方式可能不能满足要求,直接存储器存取(DMA)就是为解决这个问题提出的采用DMA方式,在一定时间段内,由DMA控制器取代CPU,获得总线控制权,来实现内存与外设或者内存的不同区域之间大量数据的快速传送
中断处理示意图
向CPU发出中断请求的设备或事件称为中断源,断点处产生中断请求,CPU执行中断流程,响应中断,并执行用户定义的中断服务子程序处理完毕,执行中断返回动作,主程序继续运行
中断响应
中断源向CPU发出中断请求,若优先级别最高,CPU在满足一定的条件下,可以中断当前程序的运行,保护好被中断的主程序的断点及现场信息。
然后,根据中断源提供的信息,找到中断服务子程序的入口地址,转去执行新的程序段,这就是中断响应。
中断服务子程序
S3C2410的中断控制器:
1、中断源状态寄存器
该寄存器的32位中每一位对应一个中断源。
如果相应中断源产生中断请求则其对应位被置为1。
该寄存器中的位将自动由中断请求置位,而不管INTMASK寄存器中的掩码位是否有效。
另外,该寄存器不受中断控制器的优先级逻辑影响。
在中断服务程序中,该寄存器的相应位必须进行清零处理,清零的方法是将该位写入1。
2、寄存器中断模式
3、中断屏蔽寄存器
4、优先级寄存器
5、中断状态寄存器
6、中断偏移寄存器
[实验步骤]
1、建立一个中断工程。
2、编写外部中断处理程序的中断服务函数,并保存为main.c文件,将该文件加入到工程中。
3、在中断服务函数中添加代码实现如下功能:
每触发一次中断,跑马灯闪烁一次。
4、编译、下载运行程序查看程序是否正常。
[实验报告要求]
1.中断处理的主要步骤有哪些?
试说明每一步的主要工作
2.说明S3C2410非矢量中断与矢量中断的区别
3.简述S3C2410非矢量中断的处理步骤。
4.简述串行接口的工作原理以及串行接口的优缺点
5.RS-232C的最基本数据传送引脚是哪几根?
画出双机通讯的基本接线图
6.简述串行接口通讯程序设计的基本步骤
实验二基本接口实验
(二)
[实验目的]
1、了解实时时钟在嵌入式系统中的作用
2、掌握实时时钟的使用
3、了解触摸屏基本概念与原理
4、编程实现并掌握对触摸屏的控制
[试验内容一]
编程实现实时时钟功能,每秒显示实时时钟、编程实现实时时钟告警功能
[预备知识]
1、了解ADT集成开发环境的基本功能
2、学习S3C2410的实时时钟模块的使用
[实验设备]
1.JXARM9-2410教学实验箱
2.ADT1000仿真器和ADTIDE集成开发环境
[基础知识]
1、实时时钟在嵌入式系统中的作用
在一个嵌入式系统中,实时时钟单元可以其提供可靠的时钟,包括时分秒和年月日;即使在系统处于关机状态下它也能够正常工作(通常采用后备电池供电),它的外围也不需要太多的辅助电路,典型的就是只需要一个高精度的晶振。
S3C2410的实时时钟单元
❑时钟数据采用BCD编码
❑能够对闰年的年月日进行自动处理
❑具有告警功能,当系统处于关机状态时,能产生告警中断;
❑具有独立的电源输入
❑提供毫秒级时钟中断,该中断可用于作为嵌入式操作系统的内核时钟
2、S3C2410的实时时钟寄存器
控制寄存器
告警控制寄存器
实时时钟计数器
告警时间寄存器
实时时钟寄存器
[实验步骤]
1、建立RTC工程,添加相应文件并修改PWM的工程设置。
2、创建main.c编写程序,并将该文件加入到工程RTC中。
3、时钟滴答功能测试,通过LED显示TIMETICK
4、时间告警功能测试。
[试验内容二]
1.编程实现触摸屏坐标到LCD坐标的校准
2.编程实现触摸屏坐标采集以及LCD坐标的计算
[预备知识]
1.了解ADT集成开发环境的基本功能
2.学习触摸屏的原理
3.了解触摸屏与显示屏的坐标转换
[基础知识]
触摸屏的基本原理
触摸屏按其工作原理的不同分为:
电阻技术触摸屏
电阻触摸屏是与显示器表面非常配合的电阻薄膜屏,这是一种多层复合薄膜,它以一层玻璃或硬塑料平板作为基层,表面涂有一层透明氧化金属(ITO氧化铟,透明的导电电阻)导电层,上面再盖有一层外表面硬化处理、光滑防擦的塑料层、内表面也涂有一层ITO涂层、在他们之间有许多细小的(小于1/1000英寸)的透明隔离点把两层导电层隔开绝缘。
当手指触摸屏幕时,两层导电层在触摸点位置就有了接触,控制器侦测到这一接触并计算出(X,Y)的位置,再根据模拟鼠标的方式运作。
主要特点:
1.高解析度,高速传输反应
2.表面硬度处理,减少擦伤、刮伤及防化学处理
3.具有光面及雾面处理
4.一次校正,稳定性高,永不漂移
表面声波技术触摸屏
表面声波技术是利用声波在物体的表面进行传输,当有物体触摸到表面时,阻碍声波的传输,换能器侦测到这个变化,反映给计算机,进而进行鼠标的模拟。
主要特点:
1.清晰度较高,透光率好
2.高度耐久,抗刮伤性良好
3.一次校正不漂移
4.反应灵敏
缺点:
易污损,需要经常维护
电容技术触摸屏
利用人体的电流感应进行工作。
用户触摸屏幕时,由于人体电场,用户和触摸屏表面形成以一个耦合电容,对于高频电流来说,电容是直接导体,于是手指从接触点吸走一个很小的电流。
这个电流分从触摸屏的四角上的电极中流出,并且流经这四个电极的电流与手指到四角的距离成正比,控制器通过对这四个电流比例的精确计算,得出触摸点的位置。
主要特点:
1.对大多数的环境污染物有抗力
2.人体成为线路的一部分,因而漂移现象比较严重
3.带手套不起作用
4.需经常校准
5.不适用于金属机柜
6.当外界有电感和磁感的时候,会使触摸屏失灵
JXARM9-2410的触摸屏控制电路
触摸屏处理流程
1.触摸屏控制初始化,选择SeparateX/Y位置转换模式或者AutoX/Y位置转换模式;
2.设置触摸屏接口到等待中断模式;
3.如果中断产生,相应的转换(SeparateX/Y位置转换模式或者AutoX/Y位置转换模式)被激活;
4.在获取X/Y坐标值后,返回到等待中断模式。
[实验步骤]
1.建立一个touch工程。
2.创建一个touch.c并加入到工程touch中。
3.编写程序分别校正LCD左上角和右下角坐标
4.编写程序采集触摸屏坐标屏将其转换到LCD坐标并通过串口打印出来。
5.编译程序、下载运行并观察输出结果。
[实验报告要求]
1.常见的触摸屏有哪几种,说明各自的优缺点
2.以四线电阻式触摸屏为例,说明电阻式触摸屏的工作原理
3.举例说明触摸屏坐标与屏幕坐标之间的转换
4.简述RTC的作用
5.画出在串口显示时钟的流程图
实验三BootLoader及Linux内核移植实验
[实验目的]
1、了解BootLoader在嵌入式系统中的作用
2、掌握u-boot的基本功能。
3、熟悉交叉编译环境的建立和使用。
4、熟悉Linux开发环境,掌握Linux内核的配置和裁剪。
5、了解Linux的启动过程
[试验内容一]
学习u-boot的基础知识和常用命令,并按照实验步骤实际操作。
[预备知识]
掌握嵌入式系统软件开发基础知识。
[试验设备]
1、硬件:
JXARM9-2410嵌入式试验箱,PC机Pentium500以上,硬盘10G以上。
2、软件:
PC机操作系统RedhatLinux9.0,Linux开发环境。
[基础知识]
1、BootLoader基本概念
2、u-boot基本程序结构
3、Linux文件系统
[实验步骤]
1、启动uboot
将串口线连接到计算机的串口和实验箱的UART0;在计算机中打开dnw串口超级终端工具,如下图所示:
然后点击“SerialPort”的“Connect”菜单项,在标题栏将提示如下图所示:
将实验箱上电,在dnw中将可以看到如下图所示界面,此界面即为uboot命令行操作界面。
后续各个步骤的操作系统引导都需要在uboot界面下进行。
5.1.Uboot基本命令实验
1)分别在u-boot中输入如下命令,并观察实验结果
JX2410#help
JX2410#flinfo
JX2410#helpflinfo
JX2410#bdinfo
2)uboot内存操作实验
在uboot中输入如下命令,以实现将0x3000000开始的0x100字节数据复制到0x3100000处。
JX2410#md30000000100
JX2410#md31000000100
JX2410#cmp.b3000000031000000100
JX2410#cp.b3000000031000000100
JX2410#cmp.b3000000031000000100
观察在输入cp.b命令前后的cmp.b命令执行结果。
在uboot中输入如下命令,以实现内存修改
JX2410#md.b3000000010
JX2410#mm300000000
JX2410#mw.b30000000ff10
JX2410#md.b3000000010
观察每次md.b命令的结果。
在uboot中输入如下命令,以实现对0x30000000起始地址1M内存区域的自动测试
JX2410#mtest30000000030100000
3)tftp程序下载和引导操作实验
在uboot中输入如下命令,实现如下功能:
将主机上的diag.bin程序通过tftp下载到0x30000000地址,并从该地址处运行diag.bin程序。
JX2410#tftp30000000diag.bin
JX2410#go30000000
4)uboot环境变量操作实验
在uboot中输入如下命令,创建一个环境变量,并运行该环境变量。
JX2410#printenv
JX2410#setenvtent‘echothisistest’
JX2410#printenv
JX2410#saveenv
JX2410#runtest
在u-boot中输入如下命令,创建一个环境变量,实验C的tftp下载功能。
JX2410#printenv
JX2410#setenvtext‘tftp30000000diag.bin;go300000000;
JX2410#printenv
JX2410#saveenv
JX2410#runtest
在uboot中输入如下命令,实现自主引导,uboot启动后自动执行上一步中创建的test环境变量。
JX2410#setenvbootcmd‘runtest’
JX2410#saveenv
JX2410#reset
5.2uboot文件系统实验
1)uboot文件系统支持
通过修改配置文件/home/cvtech/jx2410/u-boot-1.1.1/include/configs/smdk2410.h中的宏定义进行文件系统配置支持。
#defineCFG_JFFS2_FIRST_BANK0
#defineCFG_JFFS2_FIRST_SECTOR2
#defineCFG_JFFS2_NUM_BANK1
2)制作JFFS2/CRAMFS文件系统
A、制作JFFS2文件系统
在PC中制作JFFS2文件系统使用mkfs.jffs2工具,下面示例将/home/cvtech/jx2410/root/jffs2目录下的内容制作成JFFS2文件系统,并保存为prog.jffs2文件。
$cd/home/cvtech/jx2410/root
$/home/cvtech/jx2410/root/mkfs.jffs2–djffs2-oprog.jffs2
$lsprog.jffs2-l
-rw-r-r-1rootroot557465611月1809:
50prog.jffs2
$cp/home/cvtech/jx2410/root/prog.jffs2/tftpboot
B、制作CRAMFS文件系统
在PC中制作CRAMFS文件系统使用mkfs.cramfs工具,下面示例将/home/cvtech/jx2410/root/cramfs目录下的内容制作成CRAMFS文件系统,并保存为prog.cramfs文件。
$cd/home/cvtech/jx2410/root
$/home/cvtech/jx2410/root/mkfs.cramfscramfs/prog.cramfs
$lsprog.cramfs-l
-rw-r-r-1rootroot557465611月1809:
58prog.cramfs
$cp/home/cvtech/jx2410/root/prog.cramfs/tftpboot
3)烧写JFFS2/CRAMFS文件系统
文件系统映象文件制作完成后就可以通过uboot的FLASH烧写功能将其烧写到FLASH中,制作完成后的文件系统映像文件分别为:
prog.Cramfs和prog.jffs2,它们都保存在主机的/tftpboot目录下,通过tftp将这两个文件下载到目标机,然后烧写到FLASH的第66到95扇区,具体操作过程如下:
A、烧写JFFS2文件系统
jx2410#erase1:
66-95
。
。
。
。
。
jx2410#tftp30000000prog.jffs2
。
。
。
。
。
。
。
jx2410#cp.b300000001080000551000
B、烧写CRAMFS文件系统
jx2410#erase1:
66-95
。
。
。
。
。
jx2410#tftp30000000prog.cramfs
。
。
。
。
。
。
。
jx2410#cp.b300000001080000551000
4)加载JFFS2/CRAMFS文件系统
不管Flash中烧写的是JFFS2还是CRAMFS,启动后都可以使用ls命令查看文件系统内容,如下所列,如果看到如下信息表示文件系统加载正确。
JX2410#ls
ScanningJFFSFS:
done
-r-r-r204WedAug2910:
56:
352020mounts
[试验内容二]
1、了解Linux基础知识以及Linux的开发环境。
2、根据教学实验系统的硬件资源,配置并编译Linux核心。
3、下载并运行Linux核心,检查运行结果。
[预备知识]
1、了解Linux的一些基本操作命令以及Linux系统下用户环境的设置。
2、掌握Linux下的程序编译与交叉编译过程。
[试验设备]
1.硬件:
JXARM9-2410嵌入式试验箱,PC机Pentium500以上,硬盘10G以上。
2.软件:
PC机操作系统RedhatLinux9.0,Linux开发环境。
[基础知识]
1)编译Linux
配置内核:
启动菜单配置工具后,选择“LoadAlternateConfigurationFile”选项,然后确认。
该选项载入jx2410的标准配置文件config-jx2410,该文件保存在/home/cvtech/jx2410/linux目录下,请不要修改这个文件。
在提示框中键入config-jx2410配置文件名,然后选择“OK”确认,将退回到主菜单。
然后按“Esc”键退出,并将提示是否保存,请选择“Yes”保存。
建立依赖关系:
编译:
2)加载Linux内核映像
将/tftpboot/ramdisk.gz下载到SDRAM运行内核。
先将生成的ZImage拷贝到/tptpboot
然后启动uboot,并在uboot中使用tftp下载到ramdisk.gz和zImage。
[实验步骤]
1.编译Linux核心。
2.下载Linux核心并运行。
3.重新配置Linux,删除网络、显示器、触摸屏等硬件,编译、下载并运行。
[实验报告要求]
[实验报告要求]
1、BootLoader在嵌入式系统中的作用是什么?
它有哪些基本功能
进行如下实验:
将一个可以运行的二进制文件制作到JFFS2文件系统中,并在uboot中从文件系统加载该文件并运行(可以以提供的Linux内核映像文件ZImage为例,请将ZImage加载到内存0x30008000位置处)
3.交叉编译环境包括哪些工具?
它们的作用是什么?
4.简述Linux的启动过程。
实验四Linux程序编写实验
[实验目的]
1、熟悉JXARM9-2410教学系统中的LINUX开发环境
2、掌握简单的LINUX应用程序——HELLOWORLD的编译
3、掌握LINUX驱动程序编程
4、掌握LINUX应用程序加载驱动程序的方法和动态加载驱动程序模块的方法。
[试验内容一]
1、编写HELLOWORLD程序
2、编写Makefile文件
3、编译HELLOWORLD应用程序
4、下载并调试HELLOWORLD应用程序
[预备知识]
1、C语言的基础知识
2、程序调试的基础知识和方法
3、LINUX的基本操作
[实验步骤