版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验一 基本接口实验(一)实验目的1. 掌握ARM的串行口工作原理2. 学习编程实现ARM的UART通讯3. 掌握S3C2410寄存器配置方法4. 中断的作用5. 掌握嵌入式系统中断的处理流程6. 掌握ARM中断编程 预备知识1. 了解ADT集成开发环境的基本功能 2. 学习串口通讯的基本知识3. 熟悉S3C2410串口有关的寄存器 试验设备1. JXARM9-2410教学实验箱2. ADT1000仿真器和ADT IDE集成开发环境 3. 串口连接线 试验内容一实现查询方式串口的收发功能。接收来自串口(通过超级终端)的字符并将接收到的字符发送到超级终端 基础知识串行通信接口电路组成1. 可编程
2、的串行接口芯片2. 波特率发生器3. EIA与TTL电平转换器4. 地址译码电路通信协议:1. 异步协议2. 同步协议异步串行通讯异步串行方式是将传输数据的每个字符一位接一位(例如先低位、后高位)地传送。数据的各不同位可以分时使用同一传输通道,因此串行I/O 可以减少信号连线,最少用一对线即可进行。接收方对于同一根线上一连串的数字信号,首先要分割成位,再按位组成字符。为了恢复发送的信息,双方必须协调工作。在微型计算机中大量使用异步串行I/O 方式,双方使用各自的时钟信号,而且允许时钟频率有一定误差,因此实现较容易。但是由于每个字符都要独立确定起始和结束(即每个字符都要重新同步),字符和字符间还
3、可能有长度不定的空闲时间,因此效率较低。异步串行通信中的字符传送格式q 开始前,线路处于空闲状态,送出连续“1”。传送开始时首先发一个“0”作为起始位,然后出现在通信线上的是字符的二进制编码数据。每个字符的数据位长可以约定为5位、6位、7位或8位,一般采用ASCII编码。后面是奇偶校验位,根据约定,用奇偶校验位将所传字符中为“1”的位数凑成奇数个或偶数个。也可以约定不要奇偶校验,这样就取消奇偶校验位。最后是表示停止位的“1”信号,这个停止位可以约定持续1 位、1.5 位或2 位的时间宽度。至此一个字符传送完毕,线路又进入空闲,持续为“1”。经过一段随机的时间后,下一个字符开始传送才又发出起始位
4、。每一个数据位的宽度等于传送波特率的倒数。微机异步串行通信中,常用的波特率为110,150,300,600,1200,2400,4800,9600 等。DB-25 DB-9引脚定义DB-25 DB-9引脚说明RS-232C接口通信的两种基本连接方式 信号电平规定 1. EIA电平:双极性信号逻辑电平, 它是一套负逻辑定义2. -3V到-25V之间的电平表示逻辑“1”3. +3V到+25V之间的电平表示逻辑“0”4. TTL电平:计算机内部(S3C2410)使用TTL电平5. 电平转换电路:常用专门的RS-232接口芯片,如SP3232、SP3220等,在TTL电平和EIA电平之间实现相互转换。
5、S3C2410异步串行口控制器1. S3C2410自带三个异步串行口控制器2. 每个控制器有16字节的FIFO(先入先出寄存器)3. 最大波特率115.2K4. 每个UART有7种状态:溢出错误,校验错误,帧错误,暂停态,接收缓冲区准备好,发送缓冲区空,发送移位缓冲器空,这些状态可以由相应的UTRSTATn或UERSTATn寄存器表示,并且与发送接收缓冲区相对应的有错误缓冲区5. 波特率的大小可以通过设置波特率寄存器(UBRDIVn)控制,计算公式如下:使用PCLK时的计算公式如下:UBRDIVn = (int)PCLK/(波特率16)1使用UCLK时的计算公式如下:UBRDIVn = (in
6、t)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;c
7、h = Uart_Getch();3、接收数据 Uart_SendByte(ch)试验内容二编写中断处理程序,处理外部中断基础知识CPU与外设之间传输数据的控制方式1、查询方式查询方式的优点是硬件开销小,使用起来比较简单,但在此方式下,CPU要不断地查询外设的状态,当外设未准备好时,CPU就只能循环等待,不能执行其它程序,这样就浪费了CPU的大量时间,降低了CPU的利用率 2、中断方式当CPU进行主程序操作时,外设的数据已存入输入端口的数据寄存器;或端口的数据输出寄存器已空,由外设通过接口电路向CPU发出中断请求信号,CPU在满足一定的条件下,暂停执行当前正在执行的主程序,转入执行相应能够进行
8、输入/输出操作的子程序,待输入/输出操作执行完毕之后CPU再返回并继续执行原来被中断的主程序。这样CPU就避免了把大量时间耗费在等待、查询状态信号的操作上,使其工作效率得以大大地提高3、DMA方式 当高速外设要与系统内存或者要在系统内存的不同区域之间,进行大量数据的快速传送时,查询方式和中断方式可能不能满足要求,直接存储器存取(DMA)就是为解决这个问题提出的采用DMA方式,在一定时间段内,由DMA控制器取代CPU,获得总线控制权,来实现内存与外设或者内存的不同区域之间大量数据的快速传送中断处理示意图向CPU发出中断请求的设备或事件称为中断源,断点处产生中断请求,CPU执行中断流程,响应中断,
9、并执行用户定义的中断服务子程序处理完毕,执行中断返回动作,主程序继续运行中断响应中断源向CPU发出中断请求,若优先级别最高,CPU在满足一定的条件下,可以中断当前程序的运行,保护好被中断的主程序的断点及现场信息。然后,根据中断源提供的信息,找到中断服务子程序的入口地址,转去执行新的程序段,这就是中断响应。中断服务子程序S3C2410的中断控制器:1、中断源状态寄存器该寄存器的32位中每一位对应一个中断源。如果相应中断源产生中断请求则其对应位被置为1。该寄存器中的位将自动由中断请求置位,而不管INTMASK寄存器中的掩码位是否有效。另外,该寄存器不受中断控制器的优先级逻辑影响。在中断服务程序中,
10、该寄存器的相应位必须进行清零处理,清零的方法是将该位写入1。 2、寄存器中断模式3、中断屏蔽寄存器4、优先级寄存器5、中断状态寄存器 6、中断偏移寄存器 实验步骤1、建立一个中断工程。2、编写外部中断处理程序的中断服务函数,并保存为main.c文件,将该文件加入到工程中。3、在中断服务函数中添加代码实现如下功能:每触发一次中断,跑马灯闪烁一次。4、编译、下载运行程序查看程序是否正常。实验报告要求1. 中断处理的主要步骤有哪些?试说明每一步的主要工作2. 说明S3C2410非矢量中断与矢量中断的区别3. 简述S3C2410非矢量中断的处理步骤。 4. 简述串行接口的工作原理以及串行接口的优缺点5
11、. RS-232C的最基本数据传送引脚是哪几根?画出双机通讯的基本接线图6. 简述串行接口通讯程序设计的基本步骤实验二 基本接口实验(二)实验目的1、 了解实时时钟在嵌入式系统中的作用2、 掌握实时时钟的使用3、 了解触摸屏基本概念与原理4、 编程实现并掌握对触摸屏的控制试验内容一编程实现实时时钟功能,每秒显示实时时钟、编程实现实时时钟告警功能 预备知识1、 了解ADT集成开发环境的基本功能2、 学习S3C2410的实时时钟模块的使用实验设备1. JXARM9-2410教学实验箱2. ADT1000仿真器和ADT IDE集成开发环境 基础知识1、实时时钟在嵌入式系统中的作用在一个嵌入式系统中,
12、实时时钟单元可以其提供可靠的时钟,包括时分秒和年月日;即使在系统处于关机状态下它也能够正常工作(通常采用后备电池供电),它的外围也不需要太多的辅助电路,典型的就是只需要一个高精度的晶振。S3C2410的实时时钟单元q 时钟数据采用BCD编码q 能够对闰年的年月日进行自动处理q 具有告警功能,当系统处于关机状态时,能产生告警中断;q 具有独立的电源输入q 提供毫秒级时钟中断,该中断可用于作为嵌入式操作系统的内核时钟2、S3C2410的实时时钟寄存器控制寄存器告警控制寄存器实时时钟计数器告警时间寄存器实时时钟寄存器实验步骤1、 建立RTC工程,添加相应文件并修改PWM的工程设置。2、 创建main
13、.c编写程序,并将该文件加入到工程RTC中。3、 时钟滴答功能测试,通过LED显示TIME TICK4、 时间告警功能测试。试验内容二1. 编程实现触摸屏坐标到LCD坐标的校准2. 编程实现触摸屏坐标采集以及LCD坐标的计算预备知识1. 了解ADT集成开发环境的基本功能2. 学习触摸屏的原理3. 了解触摸屏与显示屏的坐标转换 基础知识触摸屏的基本原理触摸屏按其工作原理的不同分为:电阻技术触摸屏电阻触摸屏是与显示器表面非常配合的电阻薄膜屏, 这是一种多层复合薄膜,它以一层玻璃或硬塑料平板作为基层,表面涂有一层透明氧化金属(ITO氧化铟,透明的导电电阻)导电层,上面再盖有一层外表面硬化处理、光滑防
14、擦的塑料层 、内表面也涂有一层ITO涂层 、在他们之间有许多细小的(小于1/1000英寸)的透明隔离点把两层导电层隔开绝缘 。当手指触摸屏幕时,两层导电层在触摸点位置就有了接触,控制器侦测到这一接触并计算出(X,Y )的位置,再根据模拟鼠标的方式运作。主要特点:1. 高解析度,高速传输反应2. 表面硬度处理,减少擦伤、刮伤及防化学处理3. 具有光面及雾面处理4. 一次校正,稳定性高,永不漂移表面声波技术触摸屏表面声波技术是利用声波在物体的表面进行传输,当有物体触摸到表面时,阻碍声波的传输,换能器侦测到这个变化,反映给计算机,进而进行鼠标的模拟。主要特点:1. 清晰度较高,透光率好2. 高度耐久
15、,抗刮伤性良好3. 一次校正不漂移4. 反应灵敏缺点:易污损,需要经常维护电容技术触摸屏利用人体的电流感应进行工作 。用户触摸屏幕时 ,由于人体电场,用户和触摸屏表面形成以一个耦合电容, 对于高频电流来说,电容是直接导体,于是手指从接触点吸走一个很小的电流。这个电流分从触摸屏的四角上的电极中流出,并且流经这四个电极的电流与手指到四角的距离成正比, 控制器通过对这四个电流比例的精确计算,得出触摸点的位置。主要特点:1. 对大多数的环境污染物有抗力2. 人体成为线路的一部分,因而漂移现象比较严重3. 带手套不起作用4. 需经常校准5. 不适用于金属机柜6. 当外界有电感和磁感的时候,会使触摸屏失灵
16、JXARM9-2410的触摸屏控制电路触摸屏处理流程1. 触摸屏控制初始化,选择Separate X/Y位置转换模式或者Auto X/Y位置转换模式;2. 设置触摸屏接口到等待中断模式;3. 如果中断产生,相应的转换(Separate X/Y位置转换模式或者Auto X/Y位置转换模式)被激活;4. 在获取X/Y坐标值后,返回到等待中断模式。 实验步骤1. 建立一个touch工程。2. 创建一个touch.c并加入到工程touch中。3. 编写程序分别校正LCD左上角和右下角坐标4. 编写程序采集触摸屏坐标屏将其转换到LCD坐标并通过串口打印出来。5. 编译程序、下载运行并观察输出结果。实验报
17、告要求1. 常见的触摸屏有哪几种,说明各自的优缺点2. 以四线电阻式触摸屏为例,说明电阻式触摸屏的工作原理3. 举例说明触摸屏坐标与屏幕坐标之间的转换4. 简述RTC的作用5. 画出在串口显示时钟的流程图实验三 BootLoader及Linux内核移植实验实验目的1、 了解BootLoader在嵌入式系统中的作用2、 掌握u-boot的基本功能。3、 熟悉交叉编译环境的建立和使用。4、 熟悉Linux开发环境,掌握Linux内核的配置和裁剪。5、 了解Linux的启动过程试验内容一 学习u-boot的基础知识和常用命令,并按照实验步骤实际操作。预备知识掌握嵌入式系统软件开发基础知识。试验设备1
18、、 硬件:JXARM9-2410嵌入式试验箱,PC机Pentium500以上,硬盘10G以上。2、 软件:PC机操作系统Redhat Linux9.0,Linux开发环境。基础知识1、 BootLoader基本概念2、 u-boot基本程序结构3、 Linux文件系统实验步骤1、 启动uboot将串口线连接到计算机的串口和实验箱的UART0;在计算机中打开dnw串口超级终端工具,如下图所示:然后点击“Serial Port”的“Connect”菜单项,在标题栏将提示如下图所示:将实验箱上电,在dnw中将可以看到如下图所示界面,此界面即为uboot命令行操作界面。后续各个步骤的操作系统引导都需要
19、在uboot界面下进行。5.1Uboot基本命令实验1)分别在u-boot中输入如下命令,并观察实验结果JX2410 # helpJX2410 # flinfoJX2410 # help flinfoJX2410 # bdinfo2)uboot内存操作实验在uboot中输入如下命令,以实现将0x3000000开始的0x100字节数据复制到0x3100000处。JX2410 # md 30000000 100JX2410 # md 31000000 100JX2410 # cmp.b 30000000 31000000 100JX2410 #cp.b 30000000 31000000 100J
20、X2410 # cmp.b 30000000 31000000 100观察在输入cp.b命令前后的cmp.b命令执行结果。在uboot中输入如下命令,以实现内存修改JX2410 # md.b 30000000 10JX2410 # mm 300000000JX2410 # mw.b 30000000 ff 10JX2410 # md.b 30000000 10观察每次md.b命令的结果。在uboot中输入如下命令,以实现对0x30000000起始地址1M内存区域的自动测试JX2410 # mtest 300000000 301000003)tftp程序下载和引导操作实验在uboot中输入如下命
21、令,实现如下功能:将主机上的diag.bin程序通过tftp下载到0x30000000地址,并从该地址处运行diag.bin程序。JX2410 # tftp 30000000 diag.binJX2410 # go 300000004)uboot环境变量操作实验在uboot中输入如下命令,创建一个环境变量,并运行该环境变量。JX2410 # printenvJX2410 # setenv tent echo this is testJX2410 # printenvJX2410 # saveenvJX2410 # run test在u-boot中输入如下命令,创建一个环境变量,实验C的tftp
22、下载功能。JX2410 # printenvJX2410 # setenv text tftp 30000000 diag.bin; go 300000000;JX2410 # printenvJX2410 # saveenvJX2410 # run test在uboot中输入如下命令,实现自主引导,uboot启动后自动执行上一步中创建的test环境变量。JX2410 # setenv bootcmd run testJX2410 # saveenvJX2410 # reset5.2 uboot 文件系统实验1)uboot文件系统支持通过修改配置文件/home/cvtech/jx2410/u-
23、boot-1.1.1/include/configs/smdk2410.h中的宏定义进行文件系统配置支持。#define CFG_JFFS2_FIRST_BANK 0#define CFG_JFFS2_FIRST_SECTOR 2#define CFG_JFFS2_NUM_BANK 12) 制作JFFS2/CRAMFS文件系统A、制作JFFS2文件系统在PC中制作JFFS2文件系统使用mkfs.jffs2工具,下面示例将/home/cvtech/jx2410/root/jffs2目录下的内容制作成JFFS2文件系统,并保存为prog.jffs2文件。$ cd /home/cvtech/jx24
24、10/root$ /home/cvtech/jx2410/root/mkfs.jffs2 d jffs2 - o prog.jffs2$ ls prog.jffs2 - l-rw-r-r- 1 root root 5574656 11月18 09:50 prog.jffs2$ cp /home/cvtech/jx2410/root/prog.jffs2 /tftpbootB、制作CRAMFS文件系统在PC中制作CRAMFS文件系统使用mkfs.cramfs工具, 下面示例将/home/cvtech/jx2410/root/cramfs目录下的内容制作成CRAMFS文件系统,并保存为prog.
25、cramfs文件。$ cd /home/cvtech/jx2410/root$ /home/cvtech/jx2410/root/mkfs. cramfs cramfs/prog.cramfs$ ls prog. cramfs - l-rw-r-r- 1 root root 5574656 11月18 09:58 prog. cramfs$ cp /home/cvtech/jx2410/root/prog. cramfs /tftpboot3) 烧写JFFS2/CRAMFS文件系统文件系统映象文件制作完成后就可以通过uboot的FLASH烧写功能将其烧写到FLASH中,制作完成后的文件系统映像
26、文件分别为:prog. Cramfs和prog.jffs2,它们都保存在主机的/tftpboot目录下,通过tftp将这两个文件下载到目标机,然后烧写到FLASH的第66到95扇区,具体操作过程如下:A、烧写JFFS2文件系统jx2410 # erase 1: 66-95。jx2410 # tftp 30000000 prog.jffs2。jx2410 # cp.b 30000000 1080000 551000B、烧写CRAMFS文件系统jx2410 # erase 1: 66-95。jx2410 # tftp 30000000 prog.cramfs。jx2410 # cp.b 30000
27、000 1080000 5510004) 加载JFFS2/CRAMFS文件系统不管Flash中烧写的是JFFS2还是CRAMFS,启动后都可以使用ls命令查看文件系统内容,如下所列,如果看到如下信息表示文件系统加载正确。JX2410 # lsScanning JFFS FS: done-r-r-r 204 Wed Aug 29 10:56:35 2020 mounts试验内容二1、 了解Linux基础知识以及Linux的开发环境。2、 根据教学实验系统的硬件资源,配置并编译Linux核心。3、 下载并运行Linux核心,检查运行结果。预备知识1、 了解Linux的一些基本操作命令以及Linux
28、系统下用户环境的设置。2、 掌握Linux下的程序编译与交叉编译过程。试验设备1. 硬件:JXARM9-2410嵌入式试验箱,PC机Pentium500以上,硬盘10G以上。2. 软件:PC机操作系统Redhat Linux9.0,Linux开发环境。基础知识1) 编译Linux配置内核: 启动菜单配置工具后,选择“Load Alternate Configuration File”选项,然后确认。该选项载入jx2410的标准配置文件config-jx2410,该文件保存在/home/cvtech/jx2410/linux目录下,请不要修改这个文件。在提示框中键入config-jx2410配置
29、文件名,然后选择“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在嵌入式系统中的作用是什么?它有哪些基本功能进行如下实验:
30、将一个可以运行的二进制文件制作到JFFS2文件系统中,并在uboot中从文件系统加载该文件并运行(可以以提供的Linux内核映像文件ZImage为例,请将ZImage加载到内存0x30008000位置处)3交叉编译环境包括哪些工具?它们的作用是什么?4简述Linux的启动过程。实验四 Linux程序编写实验实验目的1、熟悉JXARM9-2410教学系统中的LINUX开发环境2、掌握简单的LINUX应用程序HELLOWORLD的编译3、掌握LINUX驱动程序编程4、掌握LINUX应用程序加载驱动程序的方法和动态加载驱动程序模块的方法。试验内容一1、 编写HELLOWORLD程序2、 编写Make
31、file文件3、 编译HELLOWORLD应用程序4、 下载并调试HELLOWORLD应用程序预备知识1、 C语言的基础知识2、 程序调试的基础知识和方法3、 LINUX的基本操作实验步骤1、 建立工作目录$ cd /home/cvtech/jx2410/example$ mkdir helloworld$ cd helloworld2、 编写程序源代码在LINUX下的文本编辑器有许多,最常用的是vim,Xwindow界面下的gedit等,在开发过程中推荐使用vi, 用户需要学习vi的操作方法。实际的源代码如下:#include int main( ) Printf(“Hello ,World
32、!n”); 3、 在主机端编译并运行helloworld程序$ gcc o helloworld helloworld.c$ ./helloworld请大家写出正确的显示结果。4、 下载/tftpboot/ 程序到JXARM9-2410中调试JXARM9-2410通过NFS将主机的/tftpboot/ 目录挂载到目标机的/mnt/nfs目录中。本实验将实验例程放置到/tftpboot/examples目录下。$ cp helloworld /tftpboot/examples/在目标机端输入如下命令将主机端/tftpboot/目录挂载到/mnt/nfs目录下:# mount 192.168.1
33、.180: /tftpboot/ /mnt/nfs运行helloworld程序#cd mnt/nfs/examples#./helloworld请大家写出正确的显示结果。5、 编写Makefile文件使用vi编辑工具编辑Makefile,请注意文件名的M必须大写,其余为小写。其中每行前面的空格位置必须使用Tab键CC=/usr/local/arm/2.95.3/bin/arm-linux-gccLD=/usr/local/arm/2.95.3/bin/arm-linux-ldEXEC= helloworldOBJS= helloworld.OCFLAGS+=LDFLAGS+=all: $(EX
34、EC)$(EXEC): $(OBJS) $(CC) $(LDFLAGS) o $ $(OBJS) $(LDLIBS $(LDLIBS_$)Clean: -rm -f $(EXEC) *.elf *.gdb *.o请大家使用make进行编译并写出试验结果。试验内容二1、 掌握drv驱动程序2、 编写Makefile文件3、 编写并编译drvtest应用程序4、 下载并调试drvtest应用程序实验步骤1、 建立工作目录$ cd /home/cvtech/jx2410/examples$ mkdir drvtest$ cd drvtest2、 编写drv驱动程序源代码在系统安装目录的example
35、s下的drvtest目录下复制drv.c、drv.h、drvtest.c和Makefile四个文件到drvtest目录下,drv.c为驱动程序源代码,drvtest.c为应用程序源代码。3、 编译Leddrv驱动程序$ make clean$ make$ cp drv.o /tftpboot/example4、 编译ledtest应用程序$ /usr/local/arm/2.95.3/bin/arm-linux-gcc o drvtest drvtest.c$ cp drvtest /tftpboot/examples5、请大家使用运行ledtest并写出实验结果。6、请使用mknod 命令注
36、册设备文件,设备名为Led,字符设备,主设备号为100,从设备号可以随意选取并写出实验结果。实验报告要求1、 简述Makefile文件的作用与基本组成2、 JXARM9-2410中怎样将编写的应用程序下载到Linux中?怎样在Linux中运行该程序。3、 简述Linux设备驱动的基本概念和编写方法。4、 简述Linux应用程序怎样访问设备驱动程序。实验五: Linux下串口及中断处理实验实验目的1. 了解Linux下串行端口程序设计的基本原理。2. 掌握终端的主要属性及设置方法,熟悉终端I/O函数的使用。3. 了解Linux下中断编程的基本方法。4. 掌握JXARM9-2410下的外部中断的编
37、程方法。试验内容一1、 编写serial应用程序。2、 编写Makefile文件。3、 下载并调试serial应用程序。预备知识1. C语言的基础知识。2. 程序调试的基础知识和方法。3. Linux的基本操作。4. 掌握Linux下的程序编译与交叉编译过程。 基础知识Linux操作系统从一开始就对串行口提供了很好的支持,为进行串行通信提供了大量的函数,本试验主要是为掌握在Linux中进行串行通信编程的基本方法。5、 串口编程相关头文件#include /*标准输入输出定义*/#include / *便准函数库定义*/#include /*Linux标准函数定义*/#include #incl
38、ude #include /*文件控制定义*/#include /*PPSIX终端控制定义*/#include /*错误号定义*/#include /*线程库定义*/6、 打开串口在Linux下,串口文件位于/dev下,串口1为/dev/ttyS0,串口2为/dev/ttyS1,打开串口是通过使用标准的文件打开函数操作:Intfd;/*以读/写方式打开串口*/fd=open(”/dev/ttyS0”, 0_RDWR);if(-1=fd) perror(“error“);7、 设置串口最基本的设置串口包括波特率设置,效验位和停止位设置。串口的设置struct termios结构体的成员值。str
39、uct termiounsigned short c_iflag;/*输入模式标志*/unsigned short c_oflag;/*输出模式标志/unsigned short c_cflag;/*控制模式标志*/unsigned short c_lflag;/*local mode flags*/unsigned char c_line;/*line discipline*/unsigned char c_ccNCC;/*control characters*/;(1)波特率设置下面是修改波特率的代码:struct termios Opt;tcgetattr(fd,&Opt);cfseti
40、speed(&Opt,B19200);/*设置为192 000 bps*/cfsetospeed(&Opt,B19200);tcsetattr(fd,TCANOW,&Opt);(2)校验位的设置无效验8位:Option.c_cflag &=PARENB;Option.c_cflag &=CSTOPBOption.c_cflag &=CSIZE;Option.c_cflag |=CS8;奇效验(Odd)7位:Option.c_cflag |=PARENB;Option.c_cflag &=PARODD;Option.c_cflag &=CSTOPBOption.c_cflag &=CSIZE;O
41、ption.c_cflag |=CS7;偶效验(Even)7位:Option.c_cflag &=PARENB;Option.c_cflag |=PARODD;Option.c_cflag &=CSTOPBOption.c_cflag &=CSIZE;Option.c_cflag |=CS7;Space效验7位:Option.c_cflag &=PARENB;Option.c_cflag &=CSTOPBOption.c_cflag &=&CSIZE;Option.c_cflag |=CS8;(3)设置停止位1位:Options.c_cflag &=CSTOPB;2位:Options.c_cf
42、lag |=CSTOPB;需要注意的是,如果不是开发终端之类,只是串口传输数据,从而不需要串口来处理,那么使用原始模式(Raw Mode)方式来通信,设置方式如下:Options.c_cflag &=(ICANON|ECHO|ECHOE|ISIG); /*Input*/Options.c_oflag &=OPOST; /*Output*/(4)读/写串口设置好串口之后,读/写串口变得很容易,就可以把串口当作文件读/写了。发送数据:char buffer1024;int Length=1024;int nByte;nByte=write(fd,buffer,Length);读取串口数据使用文件操
43、作read函数读取,如果设置为原始模式(Raw Mode)传输数据,那么read函数返回的字符数是实际串口收到的字符数。可以使用操作文件的函数来实现异步读取,如fcntl或者select等来操作。char buffer1024;int Len=1024;int readByte=read(fd,buffer,Len);(5)关闭串口关闭产口就是关闭文件。4、实验程序流程图实验程序流程图如图7-2所示。main打开串口设置波特率设置效验位和停止位从串口读数据打印从串口读到的数据结束图7-2 JXARM9-2410 Linux串口通信程序流程图实验步骤1、 建立工作目录。$cd /home/cvt
44、ech/jx2410/examples$mkdir serial$cd serial2、 编写serial程序源代码。参照程序流程图编写串口通信程序,从串口接受数据,并将接收到的数据打印出来。3、 编写Makefile文件。4、 编译serial程序。$make clean$make$cp serial /tftpboot/examples正确的话,将生成serial程序。5、 下载serial程序到JXARM9-2410中调试。#mount 80:/tftpboot/ /mnt/nfs/#cd /mnt/nfs/examples#./serial6、 修改一些参数,在此
45、运行调试,加深对串口编程的理解。试验内容二1、 编写外部中断驱动程序eintdrv。2、 编写Makefile文件。3、 编写中断测试程序interrupt。4、 下载并调试eintdrv和interrupt。预备知识1、 C语言的基础知识。2、 程序调试的基础知识和方法。3、 Linux的基本操作。4、 掌握Linux下的程序编译与交叉编译过程。5、 掌握Linux下基本的应用程序编写和驱动程序编写方法。基础知识一个“中断”仅仅是一个信号,当硬件需要获得处理器对它的关注时,就可以发送这个信号。在Linux操作系统中应用程序不能够直接处理中断,只有通过编写驱动程序处理中断。Linux处理中断方
46、式很大程度上与它在用户空间处理信号是一样的。大多数情况下,一个驱动程序只需为其设备的中断注册一个处理程序,并且在中断到达时进行正确的处理。如果没有一个真正的硬件设备产生中断,就很难示范中断的使用方法。因而,本实验利用ARM外部中断源触发中断,由外部中断按键触发外部中断。1、 安装中断处理程序Linux内核维护了一个中断信号线的注册表,它类似于I/O端口的注册表。模块在使用中断前要先申请一个中断通道(或者中断请求IRQ),然后在使用后释放该通道。下列在头文件中声明的函数实现了该接口:int request_irq(unsigned int irq, void (*handler)(int,voi
47、d*,struct pt_regs*), unsigned long falgs, const char *dev_name, void *dev_id); void free_irq(unsigned int irq,void *dev_id);通常,从request_irq函数返回到调用函数的值,为0时,表示申请成功;负值表示错误码。函数返回EBUSY表示已经有另一个驱动程序占用了要申请的中断信号线。该函数的参数如下:unsigned int irq这是要申请的中断号。void (*handler)(int, void*,struct pt_regs*)这是要安装的中断处理函数指针。uns
48、igned long flags这是一个与中断管理有关的位掩码选项,可以在标志中设置的位如下所示:SA_SHIRQ该位表示中断可以在设备之间共享。SA_SAMPLE_RANDOM该位指出产生的中断能对/dev/random设备和/dev/urandom设备使用的熵池有贡献。从这些设备中读取,将会返回真正的随机数,从而有助于应用软件选择用于加密的安全密钥。这些随机数是从一个熵池中得到的,各种随机事件都会对该熵池作出贡献,如果设备以真正随机的周期产生中断,就应该设置标志位。另一方面,如果没有中断是可预期的(例如,帧捕获卡德垂直消隐),就不值得设置这个标志位它对系统的熵池没有任何贡献。能受到攻击者影
49、响的设备不应设置该位,例如,网络驱动程序会被外部的事件影响到预定的数据包的时间周期,因而也不会对熵池有贡献。const char *dev_name传递给request_irq的字符串,用来在/proc/interrupts中显示中断的拥有者。void *dev_id这个指针用于共享的中断信号线。它是唯一的标识符,在中断信号线空闲时可以使用它,驱动程序也可以使用它指向驱动程序自己的私有数据区(用来识别哪个设备产生中断)。在没有强制使用共享方式时,dev_id可以设置为NULL,总之,用它来指向设备的数据结构是一个比较好的思路。下面的代码将在JXARM9-2410的Linux中注册外部中断2。eint_irq=IRQ_EINT2;set_exte
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 张湾区人民医院2026年度公开招聘专业技术人员备考题库完整参考答案详解
- 2025年重庆大学实验室及设备管理处劳务派遣工作人员招聘备考题库及一套答案详解
- 2025年梧州市龙投人力资源有限公司招聘备考题库带答案详解
- 高中生对机器人辅助物理实验的参与度研究课题报告教学研究课题报告
- 2025年昆明市盘龙区汇承中学招聘教师备考题库完整参考答案详解
- 2025年北京市朝阳区三环肿瘤医院招聘21人备考题库完整答案详解
- 2025年关于为山东省人民检察院公开招聘聘用制书记员的备考题库及答案详解参考
- 2025年西湖大学Vita编辑部招聘工作人员备考题库带答案详解
- 2025年云南开放大学第二批公开招聘人员备考题库有答案详解
- 2025年江苏盐城港控股集团有限公司招聘21人备考题库及完整答案详解一套
- 上海财经大学2026年辅导员及其他非教学科研岗位人员招聘备考题库带答案详解
- 2026湖北恩施州建始县教育局所属事业单位专项招聘高中教师28人备考笔试试题及答案解析
- 心肺康复课件
- 2025中原农业保险股份有限公司招聘67人笔试参考题库附带答案详解(3卷)
- 2026年内蒙古商贸职业学院单招职业技能测试题库及参考答案详解一套
- 退赃后赔偿协议书
- 骶部炎性窦道的护理
- 多元催化体系下羊毛脂转酯化制备胆固醇的工艺解析与效能探究
- 家庭农场的商业计划书(6篇)
- 高处安全作业培训
- 2023-2024学年北京市通州区数学九年级第一学期期末综合测试试题含解析
评论
0/150
提交评论