嵌入式应用开发实验指导书 1.docx
《嵌入式应用开发实验指导书 1.docx》由会员分享,可在线阅读,更多相关《嵌入式应用开发实验指导书 1.docx(35页珍藏版)》请在冰豆网上搜索。
嵌入式应用开发实验指导书1
实验一基本接口实验
(一)
[实验设备]
1.JXARM9-2410教学实验箱
2.ADT1000仿真器和ADTIDE集成开发环境
3.串口、并口连接线
[实验目的]
1.掌握ARM的串行口工作原理,编程实现ARM的UART通讯;
2.掌握嵌入式系统中断的处理流程和ARM中断编程;
3.在ADT环境下如何建立工程,对工程进行正确的设置。
添加相应文件(汇编、脚本、.c源文件等)
[实验内容一]
实现查询方式串口的收发功能。
接收来自串口(通过超级终端)的字符并将接收到的字符发送到超级终端。
[预备知识]
1.了解ADT集成开发环境的基本功能
2.学习串口通讯的基本知识
3.熟悉S3C2410串口有关的寄存器
[基础知识]
串行通信接口电路组成
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、建立一个串口UART工程。
2、编写编写主函数,并保存为main.c文件,将该文件加入到工程中。
主函数中包括以下功能:
(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)
4、编译、下载运行程序查看程序是否正常。
实现从键盘键入字符在屏幕显示功能。
[试验内容二]
编写中断处理程序,处理外部中断。
[基础知识]
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、写出在ADT环境下如何建立工程,对工程进行正确的设置步骤。
3、写出串口工程主函数源码、中断工程主函数和中断处理函数源码。
4、截图显示实验结果并说明。
实验二基本接口实验
(二)
[试验设备]
1.JXARM9-2410教学实验箱
2.ADT1000仿真器和ADTIDE集成开发环境
3.串口、并口连接线
[实验目的]
1.了解实时时钟在嵌入式系统中的作用,掌握实时时钟的使用;
2.了解触摸屏基本概念与原理,编程实现并掌握对触摸屏的控制;掌握S3C2410寄存器配置方法。
3.在ADT环境下如何建立工程,对工程进行正确的设置。
添加相应文件(汇编、脚本、.c源文件等)
[实验内容一]
编程实现实时时钟功能,每秒显示实时时钟、编程实现实时时钟告警功能。
[预备知识]
1、了解ADT集成开发环境的基本功能
2、学习S3C2410的实时时钟模块的使用
[基础知识]
1、实时时钟在嵌入式系统中的作用
在一个嵌入式系统中,实时时钟单元可以其提供可靠的时钟,包括时分秒和年月日;即使在系统处于关机状态下它也能够正常工作(通常采用后备电池供电),它的外围也不需要太多的辅助电路,典型的就是只需要一个高精度的晶振。
S3C2410的实时时钟单元
❑时钟数据采用BCD编码
❑能够对闰年的年月日进行自动处理
❑具有告警功能,当系统处于关机状态时,能产生告警中断;
❑具有独立的电源输入
❑提供毫秒级时钟中断,该中断可用于作为嵌入式操作系统的内核时钟
2、S3C2410的实时时钟寄存器
控制寄存器
告警控制寄存器
实时时钟计数器
告警时间寄存器
实时时钟寄存器
[实验步骤]
1、建立RTC工程,添加相应文件并修改RTC的工程设置。
2、创建main.c编写程序,并将该文件加入到工程RTC中。
3、时钟功能测试。
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、写出在ADT环境下如何建立工程,对工程进行正确的设置步骤。
3、写出RTC工程主函数源码、触摸屏工程主函数函数源码。
(以上两个工程会给出完整源码,要求同学们进行修改)
RTC工程修改1、告警方式;2、更新间隔时间。
触摸屏工程给出的源码有问题,请同学们修改正确。
4、截图显示实验结果并说明。
注意触摸屏工程至少截取两个结果图:
分别是程序成功运行获取定位点坐标(左上角和右下角)和程序运行中,获得任意点坐标。
实验三BootLoader及Linux内核加载实验
[实验目的]
1、了解BootLoader在嵌入式系统中的作用,熟悉BootLoader基本命令的用法;
2、掌握交叉编译的方法、熟悉交叉编译环境的建立和使用;
3、掌握目标机Linux操作系统的加载与启动;
4、了解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
[实验内容二]
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内核
(1)配置主机ip为192.168.1.180。
在主机上把zImage和ramdisk.gz复制到/tftpboot目录下。
(2)运行环境变量loadlinux。
启动目标机的Linux系统。
3、挂接主机和目标机
挂载主机/tftpboot/挂接目录到目标机(JXARM9-2410试验箱)/mnt/nfs目录下,输入如下命令:
#mount192.168.1.180:
/tftpboot/挂接目录/mnt/nfs
[实验报告要求]
1、实验报告包括实验目的、实验内容、实验步骤、实验结果和实验小结。
2、写出实验内容使用的命令和结果(截图表示)。
实验四:
串口应用程序编写实验
[实验目的]
1.了解Linux下串行端口程序设计的基本原理。
2.掌握终端的主要属性及设置方法,熟悉终端I/O函数的使用。
3.掌握JXARM9-2410下的串口应用程序的编程方法。
[实验内容一]
1、编写serial应用程序。
2、编写Makefile文件。
3、下载并调试serial应用程序。
[预备知识]
1.C语言的基础知识。
2.程序调试的基础知识和方法。
3.Linux的基本操作。
4.掌握Linux下的程序编译与交叉编译过程。
[基础知识]
Linux操作系统从一开始就对串行口提供了很好的支持,为进行串行通信提供了大量的函数,本试验主要是为掌握在Linux中进行串行通信编程的基本方法。
1、串口编程相关头文件
#include/*标准输入输出定义*/
#include/*便准函数库定义*/
#include/*Linux标准函数定义*/
#include
#include
#include/*文件控制定义*/
#include/*PPSIX终端控制定义*/
#include/*错误号定义*/
#include/*线程库定义*/
2、打开串口
在Linux下,串口文件位于/dev下,串口1为/dev/ttyS0,串口2为/dev/ttyS1,打开串口是通过使用标准的文件打开函数操作:
Intfd;
/*以读/写方式打开串口*/
fd=open(”/dev/ttyS0”,0_RDWR);
if(-1==fd){
perror(“error“);
}
3、设置串口
最基本的设置串口包括波特率设置,效验位和停止位设置。
串口的设置structtermios结构体的成员值。
structtermio{
unsignedshortc_iflag;/*输入模式标志*/
unsignedshortc_oflag;/*输出模式标志/
unsignedshortc_cflag;/*控制模式标志*/
unsignedshortc_lflag;/*localmodeflags*/
unsignedcharc_line;/*linediscipline*/
unsignedcharc_cc[NCC];/*controlcharacters*/
};
(1)波特率设置
下面是修改波特率的代码:
structtermiosOpt;
tcgetattr(fd,&Opt);
cfsetispeed(&Opt,B19200);/*设置为192000bps*/
cfsetospeed(&Opt,B19200);
tcsetattr(fd,TCANOW,&Opt);
(2)校验位的设置
无效验8位:
Option.c_cflag&=~PARENB;
Option.c_cflag&=~CSTOPB
Option.c_cflag&=~CSIZE;
Option.c_cflag|=~CS8;
奇效验(Odd)7位:
Option.c_cflag|=~PARENB;
Option.c_cflag&=~PARODD;
Option.c_cflag&=~CSTOPB
Option.c_cflag&=~CSIZE;
Option.c_cflag|=~CS7;
偶效验(Even)7位:
Option.c_cflag&=~PARENB;
Option.c_cflag|=~PARODD;
Opti