嵌入式中断实验报告

2024-08-27

嵌入式中断实验报告(共5篇)

嵌入式中断实验报告 篇1

——中断按键点亮LED实验

一、中断控制设计流程

<1>由中断控制器汇集各类外设发出的中断信号,然后向CPU发出处理请求。

<2>CPU保存当前程序的运行环境,调用中断服务程序(ISR,Interrupt Service Rout)处理这些中断。

<3>在ISR中通过读取中断控制器、外设相关寄存器来识别当前中断是哪个中断,并进行相应处理。

<4>清除中断:通过读写中断控制器和外设的相关寄存器来实现。

<5>最后恢复被中断程序的运行环境(即前面保存的各个寄存器等),继续执行。

二、程序设计组成框架

程序由head.s、init.c、interrupt.c、makefile四个程序模块组成head.s:初始化,设置中断模式、系统模式的栈,设置中断处理函数,设置

各类异常的向量地址。

init.c: 关看门狗(WATCHDOG),否则CPU会不断重启。初始化LED、初始化外部中断、使能外部中断、设置外设中断的触发方式。interrupt.c:设计代码根据识别出来的中断(即按键)点亮LED,然后清除

中断。写上主函数,主函数只是个不做任何工作的无限循环。Makefile: Linux中使用make命令编译程序以提高编译效率,makefile既是

make所要执行的命令。

三、程序设计结果

嵌入式实验报告 篇2

黄强

41050176

嵌入式实验报告

实验一 建立并编译WinCE平台

【实验目的】

掌握PB下WinCE平台的定制 【实验内容】

开始利用Platform Builder定制平台并编译 【实验流程】

1. 将OURS-PXA270-EP实验箱的电源线、串口、网线、同步线、鼠标等全部连接。

2. 由于已经安装好了BSP,我们可以直接打开Platform Builder5.0。3. 新建Platform Builder工程,在建立向导中进行名称、路径、BSP选择、设计模板、可选项目等的设置,完成WinCE平台的建立。

北京科技大学

黄强

41050176 4. 设置编译平台的参数。

5. 构建新建里的WinCE平台的运行时映像。整个过程大约持续20分钟,构建成功后得到操作系统运行时的映像。【实验结果】 见nk.bin 【小结】

通过这个实验,我们初步接触了PXA270EP实验箱,并通过Platform的建立,对Platform Builder有了一个初步了解,同时也对嵌入式开发的过程有了一个初步认识,掌握了PB下WinCE平台的定制。

实验二 定制增强型内核

【实验目的】

1.熟悉Platform Builder集成开发环境以及相关配置

·使用模板创建新平台 ·添加和删除组件 ·配置和运行平台

2.利用Platform Builder定制一个增强型内核,并下载到内存中。【实验内容】

参照本实验指导书的步骤,定制一个包括Word(支持中文输入法)、图片浏览器、MediaPlayer、支持USB鼠标、键盘,并能通过USB从设备接口进行宿主机与目标版通信的内核。

北京科技大学

黄强

41050176 【实验流程】

1.打开已创建好的PB,在PB右边的Catalog中添加其他组件。这里我们所做的与实验指导书上的不同,为了更好的配合我们的实验,我们所添加的内容有: ·Third Party-BSPs-OURS PXA270-Device Drivers-OEM Devices下所有内容。·Platform Manager ·Third Party-BSPs-OURS PXA270-Device Drivers-USB Host-USB Host Controllers-PXA270x USB Host{OHC} ·Core OS-Windows CE devices-Core OS Services-USB Host Support-USB HID-USB HID Keyboard and Mouse ·Third Party-BSPs-OURS PXA270-Device Drivers-Input Devices-Keyboard/Mouse-OURS270 KEYPAD Driver ·Third Party-BSPs-OURS PXA270-Device Drivers-Networking-LAN devices-OURS270 LAN91C111 Driver 2.选择Build OS|Sysgn开始构建,编译的结果生成了Eboot和NK.bin映像文件。

3.在终端进行配置。打开“超级终端”进行连接端口、波特率、数据流控制等的设置,此时会弹出名为11520的超级终端的窗口。

4.打开实验箱电源,此时窗口里会出现字符,快速按空格键。

5.当完成Eboot配置后,按下D,准备下载内核的映像文件NK.bin到实验箱上。6.再进行PB里面的目标设备的配置。7.对映像文件进行下载。

映像文件传输完成后,Eboot会根据设置,自动烧写到内存中,完成烧写以后,WinCE会自动启动。至此,一个功能较强的内核定制成功了。【实验结果】 略 【小结】

经过这个实验,我熟悉了Platform Builder集成开发环境以及相关配置,虽然刚开始不知道这些配置有什么用,后来在老师的讲解下才渐渐明白,这些配置是为了后续的编程做准备的。

北京科技大学

黄强

41050176

实验三 定制SDK并建立EVC下的开发环境

【实验目的】

熟悉SDK的概念,配置EVC下的开发环境 【实验内容】

生成SDK并安装,配置Embedded Visual C++的开发环境 【实验流程】

1. 在已经建立好的PB中,新建一个SDK文件。2. 按步骤完成SDK的配置

3. 点击Build SDK 这个过程大概要3分钟,在指定目录下生成SDK文件。4. 安装刚生成的SDK,之后即可在此模拟器上运行开发好的应用程序。【实验结果】

北京科技大学

黄强

41050176 见SDK文件

【小结】

SDK的概念其实对我们来说还是相对陌生的,在实验的过程中由于概念不了解我们并不太清晰的知道我们在做什么,直到我们查阅并了SDK的相关概念后才有所收获。SDK实际上是一个开发工具包,我们根据自己的开发需要,针对于自己的PB定制了一个专用开发工具包来便于我们的模拟开发。经过这个实验,我们了解了更多关于软件开发的知识,接触到了许多课堂上所学不到的内容,受益匪浅。

实验五 建立宿主机与实验箱的连接

【实验目的】

学习并掌握利用SMSC91C111网口建立宿主机与实验箱的连接 【实验内容】

利用SMSC91C111网口建立宿主机与实验箱的连接 【实验设备】

1.OURS-PXA270-EP实验仪,烧录有WINCE的Flash,交叉网线,USB数据线。2.PC操作系统,Platform Builder5.0集成开发环境。【实验步骤】

1.在PB的菜单下,点Remote File Viewer击。

北京科技大学

黄强

41050176 2.在弹出的“Windows CE Remote File Viewer”界面中,选择“Configure Connection”按钮,进入下一个画面。

3.选好目标设备,并单击右边的“Properties”按钮。

4.在弹出的对话框“Device Properties”中如下图所示设置,单击“Transport”下拉框右边的“Configure...”按钮。

5.在弹出的对话框“Transport Configuration”中可以设置超时值、端口号、主机IP等。

6.设置完毕后,打开实验箱电源,启动WinCE平台,将宿主机与实验箱网口用交叉线连接号,点击“Text”按钮。

7.点击Text按钮后,出现所示窗口,它的意思是说,在试验箱的命令行中键入“CEMGRC.EXE/S /T:TCPIPC.DLL /Q /D:192.168.0.21:5000”(其中IP地址是自己宿主机的IP地址),完成此项操作后,点击OK。

8.在实验箱的CE系统中,设置IP地址与宿主机地址在同一网段内。具体操作为:在实验箱的CE系统“开始”菜单中点击运行命令,键入命:CEMGRC.EXE/S /T:TCPIPC.DLL /Q /D:192.168.0.21:5000,然后点击OK。如果PC机上再出现运行CEMGRC.EXE/S /T:TCPIPC.DLL /Q /D:192.168.0.21:5000的提示,重复上述步骤,便会出现如下界面,点击Export按钮(黄色按钮),可上传文件。9.如下图所示,可浏览远程文件,并指定上传文件,选中文件后,点击“打开”按钮。

10.成功上传文件,可以在实验设备上看到上传的文件。11.至此,利用SMSC91C111网口建立连接完毕。【实验结果】

实验失败 【小结】

通过这次试验,我们掌握了利用SMSC91C111网口建立宿主机与实验箱的连接的方法,实验中要求IP地址与宿主机地址在同一网段,实验中解决了这个问题,让我们对网络相关的概念也加深了理解。经过多次试验,我们还是无法连通宿主机与实验箱,我认为我们的步骤没有问题,可能是设备有故障。

北京科技大学

黄强

41050176

实验六 USB Device建立宿主机与实验箱的连接

【实验目的】

学习并掌握利用USB Device建立宿主机与实验箱的连接 【实验内容】

利用USB Device建立宿主机与实验箱的连接 【实验设备】

1.OURS-PXA270-EP实验仪,烧录有WINCE的Flash,交叉网线,USB数据线。2.PC操作系统,Platform Builder5.0集成开发环境。【实验步骤】

北京科技大学

黄强

41050176 1.ActiveSync安装

Microsoft ActiveSync允许您使用电缆、底座或红外线在移动设备和桌面计算机之间建立合作关系。建立合作关系后,如果您的设备支持调制解调器或(以太网)卡,就可以使它们同步数据。通过ActiveSync还可以使用现有计算机连接其他资源,也可以使用ActiveSync保持两台计算机上拥有最新信息。

首先在主机端安装ActiveSync程序。该程序安装在D:科大目录下的ActiveSyncsetup.smi。双击该文件开始安装。

2.用USB延长线连接试验箱和PC,当PC发现新设备时安装附带的驱动,安装完成后,打开Microsoft ActiveSync窗口进行连接。

选择“否”然后点击行“下一步”按钮。

3.在“我的电脑”中添加“我的设备”,它对应于目标系统的WINCE文件系统。注意:

如果WINCE运行以前USB线已经连接到PC机的USB插座,可能导致连接不上,此时,请将USB线拔下然后重新插入即可。4.通讯

在上图我的电脑中双击“我的设备”将打开WINCE同步目录,可以和操作WINDOWS其他目录一样操作该目录,包括拷贝文件到该目录或见文件从该目录拷贝到PC机。

文件拷贝成功,可以成功将应用程序下载到试验箱运行,这样我们就完成了宿主机与实验箱的通讯连接。【实验结果】

北京科技大学

黄强

41050176

【小结】

通过实验,我们掌握了利用USB Device建立宿主机与实验箱的连接的具体方法,并且连接成功,与上一个方法比较,该方法简单实用,成功率高,适合我们选用。

实验七 在实验箱的WinCE平台上的Hello World实验

【实验目的】

北京科技大学

黄强

41050176 1.熟悉EVC集成开发环境以及相关配置。2.利用EVC编写WinCE的应用程序。【实验内容】

参照本实验指导书的步骤,一步一步完成实验,编写、编译并运行HelloWorld程序 【实验设备】

1.OURS-PXA270—EP实验仪,交叉网线。

2.PC操作系统,Platform Builder4.2集成开发环境,eMbedded Visual C++集成开发环境。【实验结果】

【小结】

这是我首次接触EVC集成开发环境,感觉有点陌生,但按照实验指导书一步一步做下去之后,我终于对EVC集成开发环境有了初步的了解,收获很大。

实验八 LED数码管驱动

【实验目的】

北京科技大学

黄强

41050176 1.熟悉EVC集成开发环境以及相关配置 2.利用EVC编写一个针对实际硬件的驱动程序 【实验内容】

编写一个针对硬件的驱动程序,硬件是LED 【实验设备】

PC机操作系统,Platform Builder集成开发环境,OURS—PXA270-EP实验箱。

【实验步骤】

1.使用前面实验所制作的内核 2.按照实验指导书上添加窗口及代码 3.测试与调试 【实验结果】

北京科技大学

黄强

41050176

【小结】

嵌入式系统实验报告 篇3

实 验 报 告

课程名称: 嵌入式系统

指导教师: 刘瑞琪 班 级: 自动化101 姓 名: 杨杰 学 号: 20102787 成绩评定: 指导教师签字:

2013年5月25日

实验一

简单的程序

一 实验目的:、动手实践一个简单的字符型设备驱动程序。、学习Linux 驱动程序构架。、学习在应用程序中调用驱动。

二 实验内容:

编写简单的字符型设备驱动程序。编写相应的应用程序。

三 实验设备:、一套S3C2410RP 嵌入式实验箱。、安装Redhat9的宿主PC机,并且配置好 ARM Linux 的开发环境。

四 实验步骤

实验二 CPU GPIO 驱动程序及测试程序

一、实验目的:

编写第一个针对实际硬件的驱动程序,进一步了解驱动程序构架。

二、实验内容:、编写S3C2410 GPIO驱动程序。、编写S3C2410 GPIO应用程序。、在 LINUX系统中插入自己的驱动程序,调用它。实现用 CPU GPIO 控制外部LED,利用S3C2410 核心板上的 LED 验证我们的工作。

三、实验设备、一套S3C2410RP 嵌入式实验箱。、安装Redhat9的宿主PC机,并且配置好 ARM Linux 的开发环境。

四、实验步骤

1、复制Experiment_KeyHello_driverapl_test文件下的simple_test_driver.c文件到Experiment_KeyGPIO文件夹下,将文件名更改为test.c。

2、打开test.c,在else语句后更改函数语句如下:

3、复制Experiment_KeyADapl_test文件夹下的Makefile到Experiment_KeyGPIO文件夹下,打开并将中的ADC删除。

4、打开Experiment_KeyGPIOdriver文件下的gpio_led.c文件。

5、在ssize_t SIMPLE_GPIO_LED_ioctl函数下添加如下语句:

if(cmd==0)GPBDAT &= ~(0xf<<5);

if(cmd==1)GPBDAT |=(0xf<<5);如下图所示:

6、在int __init HW_GPIO_LED_CTL_init函数下屏蔽for循环,如下图所示:

保存并关闭。

7、打开终端,并编译test.c文件和gpio_led.c文件。

8、重新打开一个终端,并按步骤输入如下语句:

9、依次输入如下语句:

1、cd..2、ls

3、mknod /dev/hello_ctl c 97 1

4、./test

实验三 中断实验及LED显示

一、实验目的:

学习Linux 系统是如何处理中断。

二、实验内容:

编写获取和处理外中断的驱动程序。

三、实验设备:、一套S3C2410RP 嵌入式实验箱。、安装Redhat9的宿主PC机,并且配置好 ARM Linux 的开发环境。

四、实验步骤

1、打开Experiment_KeyGPIOdriver文件下的gpio_led.c文件。

2、在ssize_t SIMPLE_GPIO_LED_ioctl函数下添加如下语句:

if(cmd==0)GPBDAT &= ~(0xf<<5);

if(cmd==1)GPBDAT |=(0xf<<5);如下图所示:

3、在int __init HW_GPIO_LED_CTL_init函数下屏蔽for循环,如下图所示:

保存并关闭。

4、打开Experiment_KeyInterruptdriver下的Interrupt.c文件,并在其interrupt函数下添加for语句,如下图所示:

5、打开终端,并编译Interrupt.c文件和gpio_led.c文件。

6、重新打开一个终端,并按步骤输入如下语句:

7、依次输入如下语句:

1、cd /mnt/2410RP_linux/Experiment_Key/Interrupt/driver

2、ls

3、insmod Interrupt.o

实验四 数码管显示实验

一、实验目的:

学习串并转换的相关知识,并编写驱动程序。

二、实验内容:

编写针对zlg7289A 的驱动程序。

三、实验设备:、一套S3C2410RP 嵌入式实验箱。、安装Redhat9的宿主PC机,并且配置好 ARM Linux 的开发环境。

四、实验步骤

1、打开Experiment_KeySpi_leddriver文件夹下的spi_led.c

2、并在spi_ledInit函数下添加如下语句:

保存并关闭。

3、打开终端,并编译spi_led文件。

4、重新打开一个终端,并输入如下语句:

实验五

AD 驱动实验

一 实验目的:、了解模数转换的基本原理;、掌握模数转换的编程方法。

二 实验内容:、编程对模拟量输入进行采集和转换,并将结果显示在超级终端上。、通过改变模拟量输入,观察显示结果。

三 实验设备:、一套S3C2410RP 嵌入式实验箱。、安装Redhat9的宿主PC机,并且配置好 ARM Linux 的开发环境。

四 实验步骤

1、在spi_led..c中的simpled ioctl中加入以下程序

2、在testADC中复制以下程序并修改如下

3、挂载程序

cd /mnt/2410RP_linux/Experiment_Key/spi_led/driver

ls insmod spi_led.o

cd /mnt/2410RP_linux/Experiment_Key/ad/driver

insmod adc.o cd /mnt/2410RP_linux/Experiment_Key/ad/apl_test

ls

mknod /dev/spi c 104 1

ls

嵌入式系统ARM实验报告 篇4

实验报告

实验名称:实验一基于ADS开发环境的设计

实验二嵌入式Linux交叉开发环境的建立 实验三嵌入式Linux环境下的程序设计

课程名称嵌入式系统B

班级学号B13010711 姓名马俊民

开课时间 2015/2016学年第1学期

实验一基于ADS开发环境的程序设计

一、实验目的

1、学习ADS开发环境的使用;

2、学习和掌握ADS环境下的汇编语言及C语言程序设计;

3、学习和掌握汇编语言及C语言的混合编程方法。

二、实验内容

1、编写和调试汇编语言程序;

2、编写和调试C语言程序;

3、编写和调试汇编语言及C语言的混合程序;

4、编写程序测试多寄存器传送指令的用法。

三、实验原理

ADS全称为ARM Developer Suite,是ARM公司推出的新一代ARM集成开发工具。现在常用的ADS版本是ADS1.2,它取代了早期的ADS1.1和ADS1.0。

ADS用于无操作系统的ARM系统开发,是对裸机(可理解成一个高级单片机)的开发。ADS具有极佳的测试环境和良好的侦错功能,它可使硬件开发工作者更深入地从底层去理解ARM处理器的工作原理和操作方法,为日后自行设计打基础,为BootLoader的编写和调试打基础。

1.ADS软件的组成

ADS由命令行开发工具、ARM运行时库、GUI开发环境(CodeWarrior和AXD)、实用程序、支持软件等组成。

2.GUI开发环境

ADS GUI开发环境包含CodeWarrior和AXD两种,其中Code Warrior是集成开发工具,而AXD是调试工具。

使用汇编语言进行编程简单、方便,适用于初始化硬件代码、启动代码等。汇编语言具有一些相同的基本特征:

1.一条指令一行。

2.使用标号(label)给内存单元提供名称,从第一列开始书写。3.指令必须从第二列或能区分标号的地方开始书写。4.注释必须跟在指定的注释字符后面,一直书写到行尾。

在ARM汇编程序中,每个段必须以AREA作为段的开始,以碰到下一个AREA作为该段的结束,段名必须唯一。程序的开始和结束需以ENTRY和END来标识。嵌入式C语言设计是利用基本的C语言知识,面向嵌入式工程实际应用进行程序设计。为了使单独编译的C语言程序和汇编程序之间能够相互调用,必须为子程序之间的调用规定一定的规则。ATPCS就是ARM程序和Thumb程序中子程序调用的基本规则。

四、实验过程与关键代码分析

1.创建项目工程

在File菜单中选择New命令,打开一个新建工程对话框。在Project选项卡下,选择ARM Executable Image, 然后在Project name文本框里输入项目名称,点击确定。弹出工程窗口。

选择File菜单中的New命令,选择File标签页,在File name文本框中输入要创建的文件名。汇编程序以.s结尾,c程序以.c结尾。在Location文本框中指定文件的存放位置,选中Add to Project,在Targets中选中DebugRel,单击确定关闭窗口。

2.用汇编语言设计程序实现10的阶乘

AREA EXAMPLE, CODE, READONLY ENTRY start MOV R0, #10 MOV R1, #1 LOOP MUL R0, R0, R1 SUB R0, R0, 1 CMP R0, #1 BHI LOOP END 在这个程序中,我们首先对R0和R1赋值,将R0作为一个变量,而R1作为一个存贮阶乘值的寄存器。在每进行一次乘法之后,将R0减1。同时在做完减法后进行判断,如果此时R0大于1,则返回继续乘法,否则结束程序,输出结果。

3.用调用子程序的方法实现1!+2!+3!+„+10!,代码如下: asmp.s

AREA JC, CODE, READONLY

EXPORT JCP

ENTRY JCP

ADD R3, R0, #1

MOV R2, #1

MOV R1, #1 LOOP MUL R0, R1, R2

MOV R1, R0

ADD R2, R2, #1

CMP R2, R3

BNE LOOP

NOP

NOP

MOV PC, LR

END

PROGC.c #include Extern int JCP(int N)

int main(){ int res=0;int m=10;int i;for(i=1;i<=m;i++)

res=res+JCP(i);printf(“The result =%dn”,res);return 0;} 在这个程序中,主程序由c语言完成作求和,子程序由汇编语言写成作阶乘。

5.实现字符串的逆序复制TEXT1=“HELLO”=>TEXT2=“OLLEH”

AREA invstring, CODE, READONLY start

ADR R1,TEXT1

ADR R2,TEXT2

MOV R3, #0 LOOP

LDRB R0,[R1], #1

ADD R3,R3,#1

CMP R0,#0

BNE LOOP

SUB R1,R1,#2

LOOP1

LDRB R0,[R1], #-1

STRB R0,[R2], #1

SUB R3,R3, #1

CMP R3,#1

BNE LOOP1

MOV R5,#&55

TEXT1

TEXT2 NOP =“HELLO”,0 ALIGN =“OELLH” END

五、实验小结

在这次实验中,学会了如何使用汇编程序进行编程。对汇编程序编程一些基本的要求有了一定的了解,学习了C语言的语法和在其中调用汇编程序的方法。学会了利用CodeWarrior IDE开发C和ARM汇编代码。学会了在AXD中进行代码调试的方法和过程,对AXD的调试有初步的了解。,实验二嵌入式Linux交叉开发环境的建立

一、实验目的

1、掌握嵌入式Linux交叉开发环境的建立方法

2、学习和掌握Linux常用命令

3、学习和掌握vi编辑器的使用

二、实验内容

1、搭建嵌入式Linux交叉开发环境

2、熟悉Linux的常用命令

3、熟悉vi编辑器的常用命令

三、实验原理

Linux系统是UNIX系统的分支,是UNIX的微机版。Linux具有异常丰富的驱动程序资源,支持各种主流的硬件设备与技术。Linux包含了现代的UNIX操作系统的所有功能特性,这些功能包括多任务、虚拟内存、虚拟文件系统、进程间通信、对称所处理器、多用户支持等。

Vi编辑器是所有UNIX和Linux下的标准编辑器。它包含3种工作模式。嵌入式系统是专用的计算机系统,它对系统的功能、可靠性、成本、体积、功耗等有严格的要求。大部分嵌入式系统没有大容量存储设备,一般不能安装大型开发软件,系统的开发需要采用交叉开发模式。

四、实验过程与关键代码分析

实验用的是UP-NetARM2410-S试验箱,里面配有三星的芯片S3c2410X。打开电脑上VMWare软件,在Windows系统下启动虚拟机里的Linux系统。接着需要

1.宿主机的环境搭建

下载并运行VMWare,根据向导创建一台新虚拟机并选择Linux作为客户操作系统,再根据向导安装RedHat Linux 9.0。

2.虚拟机中启动Linux操作系统

使用root登陆,用户名为root,密码为123456。之后对共享文件设置进行调整:打开settings界面,打开shared folders功能,同时将路径设置到有课前下载的软件的目录下。

3.开发工具软件的安装(1)安装gcc 打开Linux后,打开终端窗口,在共享的目录下找到install.sh并运行,命令如下: ls./ install.sh 安装程序将自动建立/arm2410s目录,并将所有的开发软件包安装到/arm2410s 目录下,同时自动配置编译环境,建立合适的符号链接。安装完成后在目录/opt/host/armv4l/bin/下应该能看到主编译器。(2)配置PATH路径

vi.bash.profile 将里面PATH变量改为PATH=$PATH:$HOME/bin:/opt/host/armv41/bin/;存盘后执行

source.bash_profile 以后armv4l-unknown-linux-gcc将被自动搜索到

4.宿主机上的开发环境配置(1)配置IP地址

ifconfig eth0 192.168.0.121 命令配置了宿主机的IP地址。然后打开网络配置窗口,重新探测MAC地址。重新激活。(2)关闭防火墙

单击“Red”菜单→“系统设置”→“安全级别”→打开“安全级别配置”窗口,选择“无防火墙选项。”(3)配置NFS。

单击“Red”菜单→“系统设置”→“服务器设置”→“服务”,在“服务配置”窗口中勾选nfs,单击“开始”(4)NFS设置

单击“Red”菜单→“系统设置”→“服务器设置”→“NFS服务器”,打开“NFS服务器配置”窗口,设置NFS共享。

然后在NFS服务器中增加主机IP地址的链接许可和目录。完成配置。

5.目标机的信息输出

Windows系统下,“开始”→“所有程序”→“附件”→“通讯”→“超级终端”,新建一个通信终端。区号、电话号码随意输入。设置每秒位数为“115200”,数据位为“8”,无奇偶校验,停止位为“1”,无数据流控制。单击“确定”。

6.程序的运行

打开超级终端,启动Linux,屏幕显示:

[/mnt/yaffs] 在超级终端上执行挂载命令:

[/mnt] mount –t nfs 192.168.0.121:/arm2410s /mnt/nfs 挂载成功后可执行程序。

五、实验小结

在这次实验中,学会建立Linux交叉开发环境,学会了ls和vi,cd等常用的Linux命令,并掌握了Vi编辑器的使用方法。同时知道了如何在搭建失败时寻找错误进行排错。

实验三嵌入式Linux环境下的程序设计

一、实验目的

1、掌握嵌入式Linux环境下的程序设计方法

2、学会编写Makefile文件

二、实验内容

1、熟悉嵌入式教学实验箱的使用

2、编写C程序和Makefile文件

3、编译程序产生可执行程序

4、完成主机的挂载和程序的执行

三、实验原理

在嵌入式Linux环境下的程序设计方法有一下几个步骤:

1.编写源程序

2.编写Makefile文件 3.编译程序

4.运行和调试程序

5.将生产的可执行文件加入文件系统。

前三个步骤在宿主机上完成,后面的步骤在目标机上完成。

四、实验过程与关键代码分析

1.建立工作目录

mkdir hello cd hello

2.编写源程序

用vi编辑器编辑Hello.c文件

vi Hello.c 在Vi中输入源程序如下:

#include main(){

printf(“hello world n”);}

3.编写Makefile文件

vi Makefile 在vi中编辑Makefile文件如下:

CC= armv4l-unknown-linux-gcc EXEC = hello OBJS = hello.o CFLAGS += LDFLAGS+=-static all: $(EXEC)$(EXEC):(OBJS)$(CC)$(LDFLAGS)–o $@ $(OBJS)clean:

-rm –f $(EXEC)*.elf *.gdb *.o

4.编译程序

在hello目录下运行“make”来编译程序。

make clean

make 编译成功后,生成可执行文件Hello.o。

5.下载调试

在宿主机上启动nfs服务,并将/arms2410s设置为共享目录。接下来启动超级终端,建立通讯,挂载。

[/mnt] mount –t nfs 192.168.0.121:/arm2410s /mnt/nfs 挂载成功后,进入/mnt/nfs,再进入/mnt/nfs/hello,直接运行刚刚编译生成的可执行文件Hello.o,查看运行结果

cd hello./hello 可以看见“Hello world”

只需要挂载一次便可,只要实验箱没有重启,就可以一直保持连接。反复修改、编译、调试,直至程序调试通过。

6.可执行文件加入文件系统

程序调试通过后,可以把可执行文件拖放到usr/bin目录下,然后使用mkcramfs制作工具生成新的文件系统。当系统启动后,就可以在相应目录下执行可执行程序hello.五、实验小结 在这次实验中,学会了在嵌入式Linux环境下设计程序。同时知道了如何对目标机进行挂载。以及如何在发现挂载不成功寻找错误进行修改。另外在编译文件时需要注意的也都有所了解。

实验四多线程程序设计

一、实验目的1、2、二、实验内容1、2、3、4、三、实验原理

四、实验过程与关键代码分析

五、实验小结

嵌入式中断实验报告 篇5

姓名: 学号: 学院: 日期:

实验一 熟悉嵌入式系统开发环境

一、实验目的

熟悉 Linux 开发环境,学会基于S3C2410 的Linux 开发环境的配置和使用。使用Linux的armv4l-unknown-linux-gcc 编译,使用基于NFS 方式的下载调试,了解嵌入式开发的基本过程。

二、实验内容

本次实验使用 Redhat Linux 9.0 操作系统环境,安装ARM-Linux 的开发库及编译器。创建一个新目录,并在其中编写hello.c 和Makefile 文件。学习在Linux 下的编程和编译过程,以及ARM 开发板的使用和开发环境的设置。下载已经编译好的文件到目标开发板上运行。

三、实验设备及工具

硬件::UP-TECH S2410/P270 DVP 嵌入式实验平台、PC 机Pentium 500 以上, 硬盘10G 以上。

软件:PC 机操作系统REDHAT LINUX 9.0+超级终端(或X-shell)+AMR-LINUX 开发环境。

四、实验步骤

1、建立工作目录

[root@localhost root]# mkdir hello [root@localhost root]# cd hello

2、编写程序源代码

我们可以是用下面的命令来编写hello.c的源代码,进入hello目录使用vi命令来编辑代码:

[root@localhost hello]# vi hello.c 按“i”或者“a”进入编辑模式,将上面的代码录入进去,完成后按Esc 键进入命令状态,再用命令“:wq!”保存并退出。这样我们便在当前目录下建立了一个名为hello.c的文件。hello.c源程序: #include int main(){ char name[20];scanf(“%s”,name);printf(“hello %s”,name);return 0;}

3、编写Makefile

要使上面的hello.c程序能够运行,我们必须要编写一个Makefile文件,Makefile文件定义了一系列的规则,它指明了哪些文件需要编译,哪些文件需要先编译,哪些文件需要重新编译等等更为复杂的命令。使用它带来的好处就是自动编译,你只需要敲一个“make”命令整个工程就可以实现自动编译。Makefile源程序:

CC= armv4l-unknown-linux-gcc EXEC = hello OBJS = hello.o CFLAGS += LDFLAGS+= –static all: $(EXEC)$(EXEC): $(OBJS)$(CC)$(LDFLAGS)-o $@ $(OBJS)clean:-rm-f $(EXEC)*.elf *.gdb *.o 下面我们来简单介绍这个Makefile 文件的几个主要部分: CC 指明编译器

EXEC 表示编译后生成的执行文件名称 OBJS 目标文件列表 CFLAGS 编译参数 LDFLAGS 连接参数 all: 编译主入口

clean: 清除编译结果

注意:“$(CC)$(LDFLAGS)-o $@ $(OBJS)”和“-rm-f $(EXEC)*.elf *.gdb *.o”前空白由一个Tab 制表符生成,不能单纯由空格来代替。

与上面编写 hello.c的过程类似,用vi来创建一个Makefile文件并将代码录入其中。

[root@localhost hello]# vi Makefile

4、编译应用程序

在上面的步骤完成后,我们就可以在hello 目录下运行“make”来编译我们的程序了。如果进行了修改,重新编译则运行: [root@localhost hello]# make clean//编译应用程序 [root@localhost hello]# make//下载调试

注意:编译、修改程序都是在宿主机(本地PC 机)上进行,不能在超级终端下进行。

5、下载调试

在宿主PC计算机上启动NFS服务,并设置好共享的目录,(这里将刚生成的根目录/arm2410cl作为共享目录,以下实验同理)具体配置请参照前面第一章第四节中关于嵌入式Linux 环境开发环境的建立。在建立好NFS共享目录以后,我们就可以进入超级终端中建立开发板与宿主PC机之间的通讯了。

[/mnt/yaffs] mount-t nfs-o nolock 192.168.0.56:/arm2410cl /host //超级终端中执行

如果不想使用我们提供的源码的话,可以再建立一个NFS 共享文件夹。如/root/share,我们把我们自己编译生成的可执行文件复制到该文件夹下,并通过超级终端挂载到开发板上。

[root@localhost hello]# cp hello /root/share //虚拟机中

[/mnt/yaffs] mount-t nfs-o nolock 192.168.0.56:/root/share /host //超级终端中 再进入/host目录运行刚刚编译好的hello程序,查看运行结果。[/mnt/yaffs] cd /host //超级终端中 [/host]./hello hello world(1)在PC计算机上启动NFS 服务,并设置好共享的目录。

启动 Red Hat Linux –>点击“主菜单”->选择“系统设置”->“服务器设置”->“NFS服务器”->“增加”->“基本”下:点击“浏览”选择“/”下的“arm2410cl/”;“确定”;“主机:192.168.0.* ”;“基本权限”选择“读/写”;“确定”。->“常规选项”下:选择:“允许来自高于1024的端口的连接”,其他不选;确定。(2)在建立好NFS共享目录以后,进入minicom 中建立开发板与宿主PC机之间的通讯

新建终端

[root@localhost root]# minicom//服务器 新建终端

[root@localhost root]#ifconfig eth0 192.168.0.10 //设置主机地址 [root@localhost root]#ifconfig //查看地址 在服务器下:

[/mnt/yaffs] mount-t nfs –o nolock 192.168.0.56:/arm2410cl /var 注意:开发板挂接宿主计算机目录只需要挂接一次便可,只要开发板没有重起,就可以一直保持连接。这样可以反复修改、编译、调试,不需要下载到开发板。

6、实验截图

7、测试结果

测试挂载成功,用mplayer xyz.avi命令播放视频 [root@localhost /]#cd /mnt/yaffs/mm [root@localhost /]#mplayer xyz.avi

五、实验心得

本次实验比较简单,旨在让我们熟悉Linux开发环境,学会基于S3C2410的Linux开发环境的配置和使用。实验中我们创建了一个新目录,并在其中编写hello.c和Makefile文件。我们学习在Linux下的编程和编译过程,以及ARM开发板的使用和开发环境的设置,下载已经编译好的文件到目标开发板上运行。学会使用Linux的armv4l-unknown-linux-gcc编译和基于NFS方式的下载调试,了解嵌入式开发的基本过程。实验二 S3C2410处理器A/D模块硬件设计

一、实验目的

1.熟悉硬件电路设计

2.掌握简单的S3c2410处理器的电路设计。3.掌握protel软件的使用。

二、实验内容

使用protel 99se 做s3c2410处理器最小系统电路设计,A/D数据采集模块电路设计。

三、实验设备及工具

硬件:UP-TECH S2410/P270 DVP 嵌入式实验平台、PC 机Pentium 500 以上, 硬盘10G以上。

软件:PC 机操作系统REDHAT LINUX 9.0、超级终端(或X-shell)、ARM-LINUX 开发环境

五、实验原理

1、A/D 转换器

A/D 转换器是模拟信号源和CPU 之间联系的接口,它的任务是将连续变化的模拟信号转换为数字信号,以便计算机和数字系统进行处理、存储、控制和显示。在工业控制和数据采集及许多其他领域中,A/D 转换是不可缺少的。

A/D 转换器有以下类型:逐位比较型、积分型、计数型、并行比较型、电压-频率型,主要应根据使用场合的具体要求,按照转换速度、精度、价格、功能以及接口条件等因素来决定选择何种类型。常用的有以下两种:(1)双积分型的 A/D 转换器;(2)逐次逼近型的 A/D 转换器。

2、A/D 转换的重要指标(1)分辨率(Resolution)

(2)精度(Accuracy)

(3)ARM 自带的十位A/D 转换器(4)A/D 转换器在扩展板的连接(A/D 转换器在扩展板的接法如图2.4.2 所示,前三路通过电位器接到3.3v 电源上。)

图 2.4.2 A/D 转换器在扩展板上的接法

六、实验步骤

1、阅读理解源码

进入/arm2410cl/exp/basic/04_ad 目录,使用vi 编辑器或其他编辑器阅读理解源代码。

2、编译应用程序

运行make产生ad可执行文件

[root@localhost /]# cd /arm2410cl/exp/basic/04_ad/ [root@localhost 04_ad]# make armv4l-unknown-linux-gcc-c-o main.o main.c armv4l-unknown-linux-gcc-o../bin/ad main.o-lpthread armv4l-unknown-linux-gcc-o ad main.o-lpthread [root@localhost 04_ad]# ls ad hardware.h main.o Makefile.bak s3c2410-adc.h bin main.c Makefile readme.txt src

3、下载调试

到超级终端窗口,使用 NFS mount 开发主机的/arm2410cl 到/host 目录。[/mnt/yaffs] mount-t nfs-o nolock 192.168.0.56:/arm2410cl /host [/mnt/yaffs]insmod ad/s3c2410-adc.o [/mnt/yaffs]cd /host/exp/basic/04_ad [/host/exp/basic/04_ad]./ad Press Enter key exit!a0= 0.0032 a1= 3.2968 a2= 3.2968 我们可以通过调节开发板上的三个黄色的电位器,来查看a0、a1、a2 的变化。

4、原理图

5、实验截图

七、实验心得

通过本次试验,我学会了A/D接口原理,了解实现A/D系统对于硬件要求。阅读ARM芯片文档,掌握ARM的A/D相关寄存器的功能,熟悉ARM系统硬件的A/D相关接口,还了解在Linux环境下对S3C2410芯片的8通道10位A/D模块的硬件设计。实验三

Kernel与root的设计和烧写

一、实验目的

1.掌握Linux内核配置与裁剪的方法 2.理解根文件系统配置。

3.掌握嵌入式系统内核和根文件系统的烧写的过程。

二、实验内容

对嵌入式Linux系统进行裁剪、配置和编译,生成自己需要的操作系统映像文件,并将其烧写到flash中。

三、实验设备及工具

硬件:UP-NETARM2410-S嵌入式实验仪、PC机pentumn500以上、硬盘40G以上、内存大于256M。

软件:PC机操作系统REDHAT LINUX 9.0、MINICOM、AMRLINUX开发环境.四、实验步骤

1、设计过程:

2、烧写过程:

(一)、超级终端设置

1、运行Windows 系统下开始→所有程序→附件→通讯→超级终端(HyperTerminal),新建一个通信终端。如果要求输入区号、电话号码等信息请随意输入,出现如图1.5.1 所示对话框时,为所建超级终端取名为arm,可以为其选一个图标。单击“确定”按钮。

2、在接下来的对话框中选择ARM 开发平台实际连接的PC 机串口(如COM1),按确定后出现如图1.5.2 所示的属性对话框,设置通信的格式和协议。这里波特率为115200,数据位8,无奇偶校验,停止位1,无数据流控制。按确定完成设置。

3、完成新建超级终端的设置以后,可以选择超级终端文件菜单中的另存为,把设置好的超级终端保存在桌面上,以备后用。用串口线将PC 机串口和平台UART0 正确连接后,就可以在超级终端上看到程序输出的信息了。

(二)、串口下载烧写

在 Windows xp平台下通过超级终端烧写vivi(bootloader)、内核(Kernel)、根文件系

统(root)的步骤如下:

1、格式化flash 打开超级终端,先按住PC 机键盘的Back Space 键,然后启动2410-S,进入vivi,按照以下命令格式化flash,重新分区。

vivi>bon part 0 128k 192k 1216k 4288k:m 64704k 回车

2、烧写vivi 这时已格式化flash,运行的是SDRAM 中的vivi.vivi>load flash vivi x 回车 此时超级终端提示:

Ready for downloading using xmodem...Waiting...点击超级终端任务栏上“传送”下拉菜单中的“发送文件”,选择协议为Xmodem,选择

镜像文件vivi,点击“发送”,10 秒左右vivi 就烧写到flash 里了.这时要复位2410-S,重新进入vivi>来烧写kernel,root.3、烧写内核映象zImage vivi>load flash kernel x 回车 出现提示:

Ready for downloading using xmodem...Waiting...点击超级终端任务栏上“传送”下拉菜单中的“发送文件”,选择镜像文件zImage,协议

为Xmodem,点击“发送”,4 分钟左右zImage 传输完毕,zImage先传输到SDRAM中,再把数据从SDRAM 复制到flash 里,请等待这一过程结束到出现vivi>,再烧写root,否则会导致烧写kernel 失败。

4、烧写根文件系统(root)vivi>load flash root x 回车

Ready for downloading using xmodem...Waiting...点击超级终端任务栏上“传送”下拉菜单中的“发送文件”,选择镜像文件root.cramfs,协议为Xmodem,点击“发送”,8 分钟左右root.cramfs 烧写完毕;

5、烧写应用程序

用2410-S 实验箱配套网线连接好2410-S 的NIC-1 网口和PC 机的网口,重启2410-S 进

入linux 操作系统的[/mnt/yaffs]下,注意配置IP 在同一网段,执行以下指令: [/mnt/yaffs]ifconfig --查看IP [/mnt/yaffs]ifconfig eth0 192.168.0.111 --配置eth0 IP [/mnt/yaffs]inetd --启动ftp

打开ftp 软件FlashFXP(在光盘中/img/flashvivi 目录中提供),点击界面中上部黄色闪

电符号,建立快速连接,输入地址192.168.0.111,用户名:root,密码:无。连接进入ftp 服务,上传“yaffs.tar.bz2”到2410-S 的/var 文件夹下,3 分钟左右上传完毕。

这时不能重启2410-S,否则上传过程白费。接下来在超级终端中输入: [/mnt/yaffs]cd..--转换到/mnt 下 [/mnt]rm-rf /yaffs/* --删除/yaffs 下文件 [/mnt]cd /var --转到var 目录下

[/var]tar xjvf yaffs.tar.bz2 –C /mnt/yaffs --解压yaffs.tar.bz2 到mnt/yaffs 目录下

如图1.5.9 所示,注意大小写(C 为大写),需5 分钟左右

解压缩结束,整个烧写实验就完成了。

五、实验心得

了解了Linux内核与root的知识,能够利用串口通讯下载方式完成它们的烧写过程。实验四 嵌入式软件设计与交叉编译

一、实验目的

1.掌握嵌入式Linux软件设计方法原理 2.掌握Makefile文件设计方法。

3.熟悉Linux下静态库和共享库的设计。

二、实验内容

(1)编写一个带输入、输出的由5个文件组成的嵌入式软件;(2)写好makefile文件,并上机调试;(3)用变量指明两种编译器。

三、实验设备及工具

硬件:UP-NETARM2410-S嵌入式实验仪、PC机pentumn500以上、硬盘40G以上、内存大于256M。

软件:PC机操作系统REDHAT LINUX 9.0、MINICOM、AMRLINUX开发环境.四、程序分析

input.h: #define N 10 void input(char *s);

input.c:

#include #include Void input(char *s){ Printf(“input your name please:”);Scanf(“%s”, s);} output.h #define M 5 Void output(char *s)output.c #include #include Void output(char *s){ Printf(“hello %s!n”, s);} main.c #include #include #include “input.h” #include “output.h” int main(){ int i = 0;char name[N];input(name);for(i=0;i

CC=armv4l-unknown-linux-gcc EXEC=zc OBJS=main.o input.o output.o $(EXEC):$(OBJS)$(CC)-o $(EXEC)$(OBJS)install: $(EXP_INSTALL)$(EXEC)$(INSTALL_DIR)clean:-rm-f $(EXEC)&.o

五、实验结果

pc机上执行时 # make //若已执行过,则用# make clean 清除后再执行# make #./zc 结果:

[/mnt/yaffs]cd /host/exp/basic/zc/ [/host/exp/basic/zc]./zc input your name,please:zc hello zc!hello zc!hello zc!hello zc!hello zc!

六、实验心得

初步了解了交叉编译原理,GUN开发套件包括一系列开发测试工具,主要组件为Gcc。实验详细说明了基于ARM和Linux的嵌入式系统的交叉编译环境的建立方法,并给出了具体的步骤。实验结果表明,可以在x86平台编译调试ARM平台上运行的程序。并通过实验认识嵌入式系统上C语言编程与普通PC机上C语言编程的不同点,掌握使用交叉编译环境编译嵌入式系统程序的方法。实验五

嵌入式驱动程序设计

一、实验目的

1.学习在LINUX下进行驱动设计的原理。

2.掌握使用模块方式进行驱动开发调试的过程。

二、实验内容

在PC 机上编写简单的虚拟硬件驱动程序并进调试,实验驱动的各个接口函数的实现,分析并理解驱动与应用程序的交互过程。

三、实验设备及工具

硬件:UP-NETARM2410-S嵌入式实验仪、PC机pentumn500以上、硬盘40G以上、内存大于256M。

软件:PC机操作系统REDHAT LINUX 9.0、MINICOM、AMRLINUX开发环境

四、实验步骤

1、在PC(宿主机)上编译调试驱动程序。(1)阅读和理解源代码

进入/arm2410cl/exp/drivers/01_demo,使用vi 编辑器或其他编辑器阅读理解源代码。

(2)编译驱动模块及测试程序

上面介绍了在Makefile 中有两种编译方法,可以在本机上使用gcc 也可以使用交叉编 • 确定

• # KERNELDIR = /arm2410cl/kernel/linux-2.4.18-2410cl • KERNELDIR = /usr/src/linux(3)测试驱动程序

如果使用gcc 编译的话,需要通过下面的命令来建立设备节点,如果使用交叉编译器的话,不需要建立设备节点。#mknod /dev/demo c 254 0 首先要插入驱动模块demo.o,然后可以用lsmod 命令来查看模块是否已经被插入,在不使用该模块的时候还可以用rmmod 命令来将模块卸载。• insmod demo.o • lsmod demo.o •./test_demo

2、使用arm编译器在实验箱调试驱动程序。

五、实验结果分析

1.编译demo.c 为demo.o;编译test_demo.c 为test_demo。

gcc-c demo.c gcc-o test_demo test_demo.c 2.若编译器选择的是gcc(请查看Makefile文件),需要用以下命令建立节点:

#mknod /dev/demo c 254 0 若编译器选择的是armv4l-unknown-linux-gcc 则不需要mknod命令建立节 点。

3.使用insmod demo.o插入模块,使用lsmod 列出所有插入的模块。查看demo的插入情况: #insmod demo.o 6.运行test程序测试驱动的各个接口运行情况。

#./test_demo 结果:

PC机上的运行结果: 实验箱上的运行结果:

7.运行ad程序测试驱动的各个接口运行情况

六、实验心得

掌握了在Linux下常用编译器的使用,进一步掌握了Makefile的编写和使用以及Linux下的程序编译与交叉编译的过程。实验六

触摸屏驱动程序设计

一、实验目的

1、了解在 UP-TECH S2410/P270 DVP平台上实现触摸屏Linux 驱动程序的基本原理。

2、了解 Linux 驱动开发的基本过程。

二、实验内容

以一个简单字符设备驱动程序为原型,剖析其基本结构。进行部分改写之后并编译实现其相应功能。

三、预备知识

1、掌握在 Linux 集成开发环境中编写和调试程序的基本过程。

2、了解 ARM 芯片(本实验是针对ARMS3C2410 系列)的基本结构。

3、了解 Linux 内核中关于设备控制的基本原理。

四、实验设备及工具

硬件:UP-NETARM2410-S嵌入式实验仪,PC机pentumn500以上, 硬盘40G以上,内存大于128M。软件::PC 机操作系统REDHAT LINUX 9.0 +超级终端(或X-shell)+ AMRLINUX 开发环境

五、实验原理

1、Linux 设备驱动概述

Linux 设备驱动程序属于Linux 内核的一部分,并在Linux 内核中扮演着十分重要的角色。它们像一个个“黑盒子”使某个特定的硬件响应一个定义良好的内部编程接口,同时完全隐蔽了设备的工作细节。用户通过一组标准化的调用来完成相关操作,这些标准化的调用是和具体设备驱动无关的,而驱动程序的任务就是把这些调用映射到具体设备对于实际硬件的特定操作上。

我们可以把设备驱动作为内核的一部分,直接编译到内核中,即静态编译,也可以单独作为一个模块(module)编译,在需要它的时候再动态的把它插入到内核中。在不需要时也可把它从内核中删除,即动态连接。显然动态连接比静态连接有更多的好处,但在嵌入式开发领域往往要求进行静态连接,尤其是像S3C44B0 这种不带MMU 的芯片。但在S3C2410等带MMU 的ARM 芯片中我们依然可以使用动态连接。目前Linux 支持的设备驱动可分为三种:字符设备(character device),块设备(blockdevice),网络接口设备(network interface)。当然它们之间的也并不是要严格的加以区分。

2、Linux 关于字符设备的管理

驱动程序在 Linux 内核中往往是以模块形式出现的。与应用程序的执行过程不同,模块通常只是预先向内核注册自己,当内核需要时响应请求。模块中包含两个重要的函数:init_module 和cleanup_module。前者是模块的入口,它为模块调用做好准备工作,而后者则是在模块即将卸载时被调用,做一些清扫工作。

驱动程序模块通过函数: int register_chrdev(unsigned int major, const char *name, struct file_operations *fops);来完成向内核注册的。其中unsigned int major 为主设备号,const char *name 为设备名,至于结构指针struct file_operations *fops 它在驱动程序中十分重要。

在我们编写好一个驱动程序模块后,按传统的主次设备号的方法来进行设备管理,则我们应手工为该模块建立一个设备节点。命令: mknod /dev/ts c 254 0

其中/dev/ts 表示我们的设备名是ts,“C”说明它是字符设备,“254”是主设备号,“0”是次设备号。一旦通过mknod 创建了设备文件,它就一直保留下来,除非我们手工删除它。

3、触摸屏的控制

本系统触摸屏的控制是使用的 S3c2410 处理器自带的触摸屏控制器,这部分的开发主要参考S3c2410 处理器的芯片手册的第416 页到第419 页,具体详见流程图。这部分的控制主要是设置触摸屏的采样模式,处理器提供的模式: 1.正常的转换模式

2.手动的x/y 位置转换模式 3.自动的x/y 位置转换模式

我们这里使用的是第3 种转换模式。需要注意的是在完成一次x/y 坐标采样的过程中需要一次模式转换即在点击触摸屏之前是等待中断模式,当有触摸动作产生触摸屏中断以后,在x/y 的坐标采集驱动中设置成自动的x/y 位置转换模式,在完成采集以后再转换回等待中断。ADC控制寄存器 ADC触摸屏控制寄存器

注意:在自动模式,ADC触摸屏控制寄存器要在开始读之前重新配置ADC开始延迟寄存器

ADC转换数据寄存器(ADCDAT1)

4.触摸屏相关电路图

六、实验步骤

1、改写该驱动程序,在其基础上实现一些你想要的简单功能。由于驱动程序的复杂性,不容易上手且又容易出问题,所以建议你先只对其中的调试信息做一些改动,在运行该驱动程序时看看其在屏幕上的打印信息。在你对整个过程及相关硬件有较多的一些了解之后再动手做一些功能上的调整。

2、结合 ARM-Linux 的移植实验中的相关内容,把改动的驱动程序编译进内核,并下载内核验证结果。你只要把该驱动在必要地方修改后(注意修改前的代码一定要做备份)保存代码,回到内核目录,make bzImage 编译内核,然后下载编译好的内核。

进入expbasic4_ad目录,使用vi编辑main.c: #include #include #include #include #include #include

#include #include “s3c2410-adc.h” #define ADC_DEV “/dev/adc/0raw” static int adc_fd =-1;static int init_ADdevice(void){ if((adc_fd=open(ADC_DEV, O_RDWR))<0){ printf(“Error opening %s adc devicen”, ADC_DEV);return-1;} } static int GetADresult(int channel){ int PRESCALE=0XFF;int data=ADC_WRITE(channel, PRESCALE);write(adc_fd, &data, sizeof(data));read(adc_fd, &data, sizeof(data));return data;} static int stop=0;static void* comMonitor(void* data){ getchar();stop=1;return NULL;} int main(void){ int i;float d;pthread_t th_com;void * retval;//set s3c44b0 AD register and start AD if(init_ADdevice()<0)return-1;/* Create the threads */ pthread_create(&th_com, NULL, comMonitor, 0);printf(“nPress Enter key exit!n”);while(stop==0){ for(i=0;i<=2;i++){

//采样0~2 路A/D 值 d=((float)GetADresult(i)*3.3)/1024.0;printf(“a%d=%8.4ft”,i,d);} usleep(1);printf(“r”);} /* Wait until producer and consumer finish.*/ pthread_join(th_com, &retval);printf(“n”);return 0;}

七、实验结果与分析

在PC机终端

[ root @ localhost / ]# cd /arm2410cl/exp/basic/04_ad/ [ root @ localhost 04_ad]# make armv4l-unknown-linux-gcc-c-o main.o main.c armv4l-unknown-linux-gcc-o../bin/ad main.o-lpthread armv4l-unknown-linux-gcc-o ad main.o-lpthread [root@ localhost 04_ad]# ls ad hardware.h main.o Makefile.bak s3c2410-adc.h bin main.c Makefile readme.txt src 把makefile文件中cc=gcc改为cc=arm4vl-unknown-linux-gcc用于机箱上,[ root @ localhost 04_ad]# make clean [ root @ localhost 04_ad]# make 新建终端

[root@ localhost root]# minicom [/mnt/yaffs] mount-t nfs 192.168.0.10:/arm2410cl /host [/mnt/yaffs] cd /host/exp/basic/04_ad/ [/host/exp/basic/04_ad]./ad Press Enter key exit!a0= 0.6316 a1= 2.3880 a2= 1.9594

七、实验心得

上一篇:应急响应管理规定下一篇:3~6岁儿童学习与发展指南的心得体会