嵌入式系统综合实验一

合集下载

arm嵌入式实验报告完整版

arm嵌入式实验报告完整版

arm嵌入式实验报告完整版篇一:ARM嵌入式系统实验报告1郑州航空工业管理学院嵌入式系统实验报告第赵成,张克新院姓专学系:名:业:号:电子通信工程系周振宇物联网工程 121309140电子通信工程系XX年3月制实验一 ARM体系结构与编程方法一、实验目的了解ARM9 S3C2410A嵌入式微处理器芯片的体系结构,熟悉ARM微处理器的工作模式、指令状态、寄存器组及异常中断的概念,掌握ARM指令系统,能在ADS1.2 IDE中进行ARM汇编语言程序设计。

二、实验内容1.ADS1.2 IDE的安装、环境配置及工程项目的建立;2.ARM汇编语言程序设计(参考附录A):(1)两个寄存器值相加;(2)LDR、STR指令操作;(3)使用多寄存器传送指令进行数据复制;(4)使用查表法实现程序跳转;(5)使用BX指令切换处理器状态;(6)微处理器工作模式切换;三、预备知识了解ARM嵌入式微处理器芯片的体系结构及指令体系;熟悉汇编语言及可编程微处理器的程序设计方法。

四、实验设备 1. 硬件环境配置计算机:Intel(R) Pentium(R) 及以上;内存:1GB及以上;实验设备:UP-NETARM2410-S嵌入式开发平台,J-Link V8仿真器; 2. 软件环境配置操作系统:Microsoft Windows XP Professional Service Pack 2;集成开发环境:ARM Developer Suite (ADS)1.2。

五、实验分析1.安装的ADS1.2 IDE中包括两个软件组件。

在ADS1.2中建立 ARM Executable Image(ARM可执行映像)类型的工程,工程目标配置为 Debug;接着,还需要对工程进行目标设置、语言设置及链接器设置;最后,配置仿真环境为ARMUL仿真方式。

2.写出ARM汇编语言的最简程序结构,然后在代码段中实现两个寄存器值的加法运算,给出运算部分相应指令的注释。

《嵌入式电子系统设计》课程实验指导书实验1:最小系统实验,(2014.7.11)

《嵌入式电子系统设计》课程实验指导书实验1:最小系统实验,(2014.7.11)

实验一最小系统实验一、实验目的熟悉最小系统的硬件构成,掌握复位电路、晶振电路、电源电路(尤其是滤波电容的应用),编写一个例程,并在最小系统上运行;了解嵌入式开发的基本思想和过程。

掌握最小系统的构成,在将来的项目运用中能根据不同的场合选择相应的复位电路。

二、实验原理本实验通过一个简短的 Boot 引导程序介绍 ARM 开发平台的启动过程,同时该引导程序也可其他章节程序引导的示例程序。

本程序主要为了让读者能够清晰理解启动程序的基本架构组成部分以及掌握ARM 引导程序的编写方法。

三、主要实验设备1.硬件:宿主机、ARM教学试验箱;2.软件:Windows操作系统、ADS1.2集成开发环境。

四、实验内容构建最小系统,用示波器观察一下晶振电路的波形,测一下晶振正常工作时的电压。

编写一个例程,编译并运行。

设置ARM仿真器的开发环境。

程序架构如下:1.程序头IMPORT MDCNFG ;声明 MDCNFG(读写寄存器)物理地址0x48000000IMPORT MDREFR ;声明 MDREFR(刷新寄存器)0x48000004IMPORT MDMRS ;声明 MDMRS(模式/设置寄存器 0x48000040IMPORT init_MDCNFG ; 声明 init_MDCNFG 0x02000ac9IMPORT init_MDREFR ; 声明 init_MDREFR 0x0011e018IMPORT init_MDMRS ; 声明 init_MDMRS 0x320032IMPORT StackSvc ; 声明 StackSvc 0xa0600000IMPORT StackIrq ; 声明 StackIrq 0xa0605000IMPORT StackFiq ; 声明 StackFiq 0xa060a000IMPORT StackAbt ; 声明 StackAbt 0xa060e000IMPORT StackUnd ; 声明 StackUnd 0xa0714000IMPORT StackUsr ; 声明 StackUsr 0xa0720000IMPORT mainIMPORT宏通知编译器本源码文件需要引用在其他文件中定义的变量或函数。

嵌入式系统 实验报告

嵌入式系统 实验报告

使能 IRQ 中断。
4 装载并使能外中断;
5 选用 DebugInExram 生成目标,然后编译连接工程。
6 选择【Project】->【Debug】,启动 AXD 进行 JTAG 仿真调试。
7 全速运行程序,LED 闪烁;
8 每一次按键 Key,蜂鸣器就会转换静音或鸣响状态。
四.测试数据及运行结果
1
五.总结
1.实验过程中遇到的问题及解决办法;
由于本次实验较简单,且我们之前学习的微机原理课程也进行了流水灯的设
计实验,所以对于本次实验,我完成地很顺利,在实验中没有遇到问题。
2.对设计及调试过程的心得体会。
本次实验是本学期该课程我们进行的第一次实验,总的来说,实验不是很难,
设计过程也相对简单,其主要目的是让我们熟悉一下实验环境,并且能在实验环
6
五.总结 1.实验过程中遇到的问题及解决办法;
实验第一次运行时,蜂鸣器一直处于鸣响状态,及时按了按键,蜂鸣器还是 一直鸣叫,不产生外中断。后来仔细检查了程序,发现原来是忘记使能 EINT0 中 断了,加上 VICIntEnable = 1<<0x0e 代码,程序就能正常运行了。 2. 对设计及调试过程的心得体会。
境下进行简单的实验操作,为之后的实验打下坚实的基础。
六.附录:源代码(电子版)
#include "config.h"
const uint32 LEDS8 = 0xFF << 18;//P1[25:18]控制 LED1~LED8,低电平点亮
const uint32 KEY = 1 << 16;
//P0.16 连接 KEY1
三.方案设计
① 启动 ADS1.2IDE 集成开发环境,选择 ARM Executable Image for lpc2131

中山学院嵌入式实验报告(一)参考模板

中山学院嵌入式实验报告(一)参考模板

电子科技大学中山学院电子信息学院学生实验报告课程名称嵌入式系统设计实验名称嵌入式开发平台和软件班级12信息工程实验时间2015年 4月1日姓名,学号指导教师顾菘报告内容一、实验目的和任务1.了解和熟悉嵌入式开发平台2.熟悉嵌入式开发平台的原理3..熟练掌握嵌入式开发平台的使用4.熟练掌握IAR Embedded Workbench应用程序的使用二、实验原理简介UP-TECH S2410 DVP开发板外观三、实验内容和数据记录①运行IAR Embedded Workbench应用程序②点击Open exiting workspace后找到相应实验所在的文件夹,如果看不到工程文件,请在文件类型中选择Workspace File(*。

Eww)③点击后打开相应的工程,如下图④选择工程文件后点击右键出现Rebuild All选项,点击后开始重新编译。

⑤重新编译完成后会有如下提示,没有警告和错误。

⑥在这之后就要开始相应的调试工作,就要进行H-Jtag的设置。

双击运行H-JTAG⑦选择菜单项Settings>Jtag Settings 修改选项配置如下图:⑧选择菜单项Settings>Port Settings选择ARM-JTAG仿真器所用的并口号,点击Port Testing按钮,已确认该并口是否可用,否则请检查BIOS设置。

⑨确定正常后,点击Options 菜单,检查Disable Semihosting和Disable Vector Catch是否为选中状态,若没有选中应将其勾选。

⑩使用UP-LINK接通开发板和主机,开启电源。

⑪在H-JTAG Server窗口中选择Operations> Detect Target 应该能够侦测目标板上的ARM 7~10内核如下图,如侦测不到请检测上述步骤。

⑫在H-JTAG检测到硬件后可以开始调试了,这时在EWARM下点击Download and Debug⑬点击之后出现调试界面,并且已经有运行到了main函数所在的位置。

嵌入式系统设计(实验一)

嵌入式系统设计(实验一)

工业控制
嵌入式系统被广泛应用于工业 自动化领域,如生产线控制、 机器人控制等。
医疗设备
嵌入式系统可以实现医疗设备 的自动化控制和数据采集,如 医疗监护仪、输液泵等。
其他领域
嵌入式系统还可以应用于通信、 能源、环保等领域,发挥着越 来越重要的作用。
03
硬件平台搭建与配置
硬件平台选择
ARM开发板
传感器与执行器
汇编语言
针对特定硬件平台,使用汇编语言可 以实现更高效的代码执行和更精确的 硬件控制。
软件架构设计
分层架构
将系统划分为多个层次,每个层次负责特定的功能,降低系统复 杂性并提高可维护性。
事件驱动架构
通过事件触发相应的处理函数,实现模块间的解耦和异步通信。
微内核架构
将核心功能集中在微内核中,通过插件或模块扩展系统功能,提高 灵活性和可扩展性。
嵌入式系统设计(实验一)
• 实验目的与要求 • 嵌入式系统概述 • 硬件平台搭建与配置 • 软件设计与实现 • 系统测试与验证 • 实验总结与展望
01
实验目的与要求
实验目的
掌握嵌入式系统基本概念
01
通过实验了解嵌入式系统的定义、特点、应用领域等基本概念。
熟悉嵌入式开发环境
02
学习搭建嵌入式开发环境,包括硬件平台、操作系统、开发工
THANKS
感谢观看
提交实验报告
按时提交完整的实验报告,展示实验成果和 收获。
02
嵌入式系统概述
嵌入式系统定义
01
嵌入式系统是一种专用的计算机 系统,它被设计为控制、监视或 者辅助操作机器和设备的运行。
02
与通用计算机系统不同,嵌入式 系统通常被嵌入到特定的设备中 ,执行特定的任务,并且不需要 人工干预。

嵌入式系统实验报告

嵌入式系统实验报告

嵌入式系统实验报告学号:姓名:班级:13电子信息工程指导老师:苏州大学电子信息学院2016年12月实验一:一个灯的闪烁1、实验要求实现PF6-10端口所连接的任意一个LED灯点亮2、电路原理图图1 LED灯硬件连接图3、软件分析RCC_Configuration(); /* 配置系统时钟*/GPIO_Configuration(); /* 配置GPIO IO口初始化*/ for(;;){GPIOF->ODR = 0xfcff; /* PF8=0 --> 点亮D3 */Delay(1000000);GPIOF->ODR = 0xffff; /* PF8=1 --> 熄灭D3 */Delay(1000000);4、实验现象通过对GPIOF8的操作,可以使LED3闪烁5、实验总结这是第一次使用STM32开发板,主要内容是对IO端口进行配置,点亮与IO端口相连接的LED灯,闪烁周期为2S。

通过本实验对STM32开发板的硬件原理有了初步了解。

实验二:流水灯1、实验要求实现PF6-10端口所连接的5个LED灯顺次亮灭2、电路原理图图1 流水灯硬件连接图3、软件分析int main(void){RCC_Configuration();/* 配置系统时钟*/GPIO_Configuration();/* 配置GPIO IO 口初始化*/for(;;){GPIOF->ODR = 0xffbf;/* PF6=0 --> 点亮LED1 */Delay(5000000);GPIOF->ODR = 0xff7f;/* PF7=0 --> 点亮LED2 */Delay(5000000);GPIOF->ODR = 0xfeff;/* PF8=0 --> 点亮LED3 */Delay(5000000);GPIOF->ODR = 0xfdff;/* PF9=0 --> 点亮LED4 */Delay(5000000);GPIOF->ODR = 0xfbff;/* PF10=0 --> 点亮LED5 */ }}4、实验现象LED1~LED5依次点亮,亮灭的时间间隔都为1S。

嵌入式系统实验报告

嵌入式系统实验报告

嵌入式系统设计实验报告班级: 20110612学号: ***********名:***成绩:指导教师:武俊鹏、刘书勇1. 实验一1.1 实验名称博创UP-3000实验台基本结构使用方法1.2 实验目的1.熟悉嵌入式系统开发式流程概述。

2.熟悉UP-net3000实验平台的核心硬件电路和外设。

3.熟悉ARM JTAG的安装与使用。

1.3 实验环境硬件:ARM 嵌入式开发平台、用于ARM7TDMI的JTAG仿真器、PC 机Pentium100以上、串口线。

软件:PC机操作系统win98、Win2000或WinXP、ARM SDT 2.51或ADS1.2集成开发环境、仿真器驱动程序、超级终端通讯程序。

1.4 实验内容及要求1.熟悉嵌入式系统开发式流程概述。

2.熟悉UP-net3000实验平台的核心硬件电路和外设。

3.熟悉ARM JTAG的安装与使用。

1.5 实验设计与实验步骤1.新建超级终端2.选择ARM 开发实验台串口。

完成新建超级终端的设置以后,可以选择超级终端文件菜单中的保存,将当前设置3.保存为一个特定超级终端到桌面上,以备后用。

用串口线将PC机串口和平台UART0 正确连接后,就可以在超级终端上看到程序输出的信息了。

4.启动开发板,按住任意键,使开发板进入BIOS设置状态。

5.在超级终端的界面上,显示BIOS版本信息,以及相应的测试指令。

操作时,要在PC机上输入小写的字母快捷键,进入到相应的功能中去。

6.按照超级终端上的提示信息,进行功能的测试。

1.6 实验过程与分析本次实验操作起来并不困难,因为此次实验属于验证型实验,按照实验资料所给的提示信息,以上面的步骤,即可得到实验的结果。

进入到BIOS界面后,按照超级终端上的提示信息来进行功能1.7 实验结果总结在实验过程中,我们进行的很顺利,没有遇到什么问题,在超级终端界面,按提示的快捷键来测试对应的功能。

如e:测试由ZLG7289 驱动的LED 显示,共分3 步,请看超级终端提示按任意键继续,同时观察LED 的变化,最后返回主菜单。

实验1-嵌入式Linux基础 答案

实验1-嵌入式Linux基础 答案
$ cd..
$ rm–rf test
(17)综合:根据各人学号or姓名,为自己新建一个工作目录,并利用pwd命令查看自己的工作目录,并记录如下:
工作目录是(请填写):
系统信息类命令:
(1)利用date命令显示系统当前时间
$ date
(2)利用free命令显示内存的使用情况
$ free
(3)利用df命令显示系统的硬盘分区及使用状况
$ cd..
$ tarzcvf test.tar.gz test
(12)将test.tar.gz改名为backup.tar.gz,并把文件backup.tar.gz移动到test目录下;显示当前目录下的文件和目录列表,确认移动成功。
$ mv test.进入test目录,显示目录中的文件列表;把文件backup.tar.gz解包
}
hello2.h
void test2(void);
makefile
CC=gcc
CFLAGS=
OBJS=hello1.o hello2.o
all: hello
hello: $(OBJS)
$(CC) $(CFLAGS) $^-o $@
hello1.o: hello1.c
$(CC) $(CFLAGS)–c $<-o $@
hello1.c
#include <stdio.h>
int main(){
printf(“Hello world!\n”);
test2();
return 1;
}
hello2.c
#include <stdio.h>
#include“hello2.h”
void test2(void){

实验一嵌入式系统网络安全基础

实验一嵌入式系统网络安全基础

实验一、嵌入式系统网络安全基础1.traceroute:可以使用traceroute命令显示数据包到达目的主机所经过的路由。

2.curl & wget: 使用curl或wget命令,不用离开终端就可以下载文件。

如你用curl,键入curl -O后面跟一个文件路径。

wget则不需要任何选项。

下载的文件在当前目录。

stat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态(InterfaceStatistics),masquerade 连接,多播成员(Multicast Memberships) 等等。

常见参数-a (all)显示所有选项,默认不显示LISTEN相关-t (tcp)仅显示tcp相关选项-u (udp)仅显示udp相关选项-n 拒绝显示别名,能显示数字的全部转化成数字。

-l 仅列出有在Listen (监听) 的服務状态-p 显示建立相关链接的程序名-r 显示路由信息,路由表-e 显示扩展信息,例如uid等-s 按各个协议进行统计-c 每隔一个固定时间,执行该netstat命令。

提示:LISTEN和LISTENING的状态只有用-a或者-l才能看到3.1列出所有端口netstat –a.3.2列出所有tcp 端口netstat –at3.3 只显示监听端口netstat –l3.4显示TCP 或UDP 端口的统计信息netstat -st 或–su3.5 netstat -p 可以与其它开关一起使用,就可以添加“PID/进程名称” 到netstat 输出中,这样debugging 的时候可以很方便的发现特定端口运行的程序。

3.6 找出程序运行的端口并不是所有的进程都能找到,没有权限的会不显示,使用root 权限查看所有的信息。

3.7显示网络接口列表3.8 IP和TCP分析查看连接某服务端口最多的的IP地址4.Whois信息下载最新版wget https:///pub/blfs/conglomeration/whois/whois_5.2.18.tar.xz #xz -d whois_5.2.18.tar.xz#tar xvf whois_5.2.18.tar# cd whois-5.2.18/#make#make install注意在linux命令终端里查询一个域名的注册信息时,要把前面的www去掉。

嵌入式系统实验报告-1-外部中断

嵌入式系统实验报告-1-外部中断

《嵌入式系统技术》实训报告1、实验目的z了解S3C2440A 外部中断的工作原理。

z掌握S3C2440A 外部中断的使用方法。

2、实验设备z PC 机、Multi-ICE 仿真器、2440A 实验箱。

3、实验内容z通过外部K1、K2、K3、K4、K5、K7 按键触发外部中断E INT1、EINT2、EINT3、EINT4、EINT5、EINT74、实验原理4.1 ARM 的异常中断类型在嵌入式系统中外部设备的功能实现主要是靠中断机制来实现的。

中断功能可以解决CPU 内部运行速度远远快于外部总线速度而产生的等待延时问题。

ARM 提供的FIQ 和IRQ 异常中断用于外部设备向C PU 请求中断服务,一般情况下都是采用I RQ 中断。

七种异常中断中断过程框图4.2 异常中断响应过程和返回过程异常中断的响应过程:1).保存处理器当前状态寄存器C PSR 的值到备份程序状态寄存器S PSR 中。

2).设置但前程序状态寄存器CPSR 的值,其中包括:设置CPSR 响应位的值,使处理器进入特定的处理器模式;按要求屏蔽中断,通常应该屏蔽I RQ 中断。

在F IQ 中断时屏蔽F IQ 中断。

3).设置L r 寄存器。

将相应中断模式的L r 寄存器的值设为异常中断的返回地址。

4).处理程序计数器PC,将PC 值设为相应的中断向量的地址,从而实现跳转以执行中断服务程序。

异常中断的返回当处理器执行完以上流程之后,处理器已经从中断向量进入异常处理的状态。

异常中断处理完毕之后,在异常中断程序的末端,处理器进入异常中断的返回状态,其流程如下:1).恢复状态寄存器。

将保存的备份程序状态寄存器SPSR 值赋给当前程序状态寄存器CPSR。

2).将返回地址赋值到程序计数器(PC)。

这样程序将返回到异常中断产生的下一条指令或出现问题的指令处执行。

需要注意的是:对于不同的异常中断,其返回地址的计算方法也是不同的,IRQ 和F IQ 异常中断产生时,程序计数器PC 已经更新,而SWI 中断和未定义指令中断时由当前指令自身产生的,程序计数器P C 尚未更新,所以要计算出下一条指令的地址来执行返回操作;指令预取指中指异常中断和数据访问中断要求,返回到出现异常的执行现场,重新执行操作。

嵌入式系统实验报告

嵌入式系统实验报告

嵌入式系统实验报告一、实验目的本次嵌入式系统实验的主要目的是深入了解嵌入式系统的基本原理和开发流程,通过实际操作和项目实践,提高对嵌入式系统的设计、编程和调试能力。

二、实验设备与环境1、硬件设备嵌入式开发板:_____计算机:_____调试工具:_____2、软件环境操作系统:_____开发工具:_____编译环境:_____三、实验内容1、基础实验熟悉开发板的硬件结构和接口,包括处理器、存储器、输入输出端口等。

学习使用开发工具进行程序编写、编译和下载。

2、中断实验了解中断的概念和工作原理。

编写中断处理程序,实现对外部中断的响应和处理。

3、定时器实验掌握定时器的配置和使用方法。

利用定时器实现定时功能,如周期性闪烁 LED 灯。

4、串口通信实验学习串口通信的协议和编程方法。

实现开发板与计算机之间的串口数据传输。

5、 ADC 转换实验了解 ADC 转换的原理和过程。

编写程序读取 ADC 转换结果,并进行数据处理和显示。

四、实验步骤1、基础实验连接开发板与计算机,打开开发工具。

创建新的项目,选择合适的芯片型号和编译选项。

编写简单的程序,如控制 LED 灯的亮灭,编译并下载到开发板上进行运行和调试。

2、中断实验配置中断相关的寄存器,设置中断触发方式和优先级。

编写中断服务函数,在函数中实现相应的处理逻辑。

连接外部中断源,观察中断的触发和响应情况。

3、定时器实验初始化定时器相关的寄存器,设置定时器的工作模式和定时周期。

在主程序中启动定时器,并通过中断或查询方式获取定时时间到达的标志。

根据定时标志控制 LED 灯的闪烁频率。

4、串口通信实验配置串口相关的寄存器,设置波特率、数据位、停止位等参数。

编写发送和接收数据的程序,实现开发板与计算机之间的双向通信。

使用串口调试助手在计算机上进行数据收发测试。

5、 ADC 转换实验配置 ADC 模块的相关寄存器,选择输入通道和转换精度。

启动 ADC 转换,并通过查询或中断方式获取转换结果。

嵌入式系统实验报告

嵌入式系统实验报告

嵌入式系统实验报告学院:计算机科学与工程姓名:学号:______________专业:指导老师:完成日期:实验一:流水灯案例、8位数码管动态扫描案例一、实验目的1.1进一步熟悉Keil C51集成开发环境调试功能的使用;1.2学会自己编写程序,进行编译和仿真测试;1.3利用开发板下载hex文件后验证功能。

二、实验原理2.1:实验原理图2.2:工作原理2.2.1:流水灯电路中有LO,1,L2,L3,4,L5,L6,L7 共八个发光二极管,当引脚LED_ SEL输入为1,对于A、B、C、D、E、F、G、H引脚,只要输入为1,则点亮相连接的发光二极管。

A~H引脚连接STM32F108VB芯片的PE8~PE15,程序初始化时,对其进行初始设置。

引脚LED_ SEL 为1时,发光二极管才工作,否则右边的数码管工作。

注意,LED SEL 连接于PB3,该引脚具有复用功能,在默认状态下,该引脚的I0不可用,需对AFIO_ MAPR寄存器进行设置,设置其为10可用。

2.2.2:8位数码管数码管中的A~G、DP段分别连接到电路图中的A~G、H线上,当某段上有一-定的电压差值时,便会点亮该段。

当E3输入为1,也就是LED_ SEL输入为0时,根据SELO~SEL2的值确定选中的数码管,即位选,再根据A~H引脚的高低电平,点亮对应段,即段选。

三、实验结果3.1:流水灯对于给出的流水灯案例,下载HEX文件后,在开发板上可观察到L0-L7从左至右依次点亮,间隔300ms。

当全部点亮八个发光二极管后,八个发光二极管同时熄灭,间隔300ms后,发光二极管再次从左至右依次点亮。

如此反复循坏。

3.2:8位数码管对于给出的8位数码管动态扫描案例,下载后,在开发板上可观察到8个数码管从左至右依次显示对应的数字,且每一个数码显示的数字在1-9之间循环。

可以通过加快扫描频率,使得八位数码管在人眼看上去是同时显示。

在后续的案例中可以看到该现象。

嵌入式实验一:LED灯点亮

嵌入式实验一:LED灯点亮

嵌⼊式实验⼀:LED灯点亮实验⼀:LED灯程序⼀、实验环境开发机环境操作系统:ubuntu 12.04交叉编译环境:arm-linux-gcc 4.3.26410板⼦内核源码:linux-3.0.1⽬标板环境:OK6410-A linux-3.0.1⼆、实验原理image.png图1-OK6410LED原理图image.png图2-LED原理图从上⾯的原理图可以得知,LED与CPU引脚的连接⽅法如下,低电平点亮。

LED1 -GPM0LED2 -GPM1LED3 -GPM2LED4 -GPM3image.png通过上⾯可以得知,需要先将GPM0设置为输出⽅式。

将相应的寄存器进⾏配置。

然后将GPMDAT寄存器的第0位置0灯亮,置1灯灭。

三、实验代码1.编写驱动程序#include <linux/module.h>#include <linux/kernel.h>#include <linux/fs.h>#include <asm/uaccess.h> /* copy_to_user,copy_from_user */#include <linux/miscdevice.h>#include <linux/pci.h>#include <mach/map.h>#include <mach/regs-gpio.h>#include <mach/gpio-bank-m.h>#include <plat/gpio-cfg.h>#define LED_MAJOR 240int led_open(struct inode *inode, struct file *filp){unsigned tmp;tmp = readl(S3C64XX_GPMCON);tmp = (tmp & ~(0x7U << 1)) | (0x1U);writel(tmp, S3C64XX_GPMCON);printk("#########open######\n");return 0;}ssize_t led_read(struct file *filp, char __user *buf, size_t count, loff_t *f_pos){printk("#########read######\n");return count;}ssize_t led_write(struct file *filp, const char __user *buf, size_t count, loff_t *f_pos) {char wbuf[10];unsigned tmp;printk("#########write######\n");copy_from_user(wbuf, buf, count);switch (wbuf[0]){case 0: //offtmp = readl(S3C64XX_GPMDAT);tmp |= (0xfU);writel(tmp, S3C64XX_GPMDAT);break;case 1: //ontmp = readl(S3C64XX_GPMDAT);tmp &= ~(0xfU);writel(tmp, S3C64XX_GPMDAT);break;default:break;}return count;}int led_release(struct inode *inode, struct file *filp){printk("#########release######\n");return 0;}struct file_operations led_fops = {.owner = THIS_MODULE,.open = led_open,.read = led_read,.write = led_write,.release = led_release,};int __init led_init(void){int rc;printk("Test led dev\n");rc = register_chrdev(LED_MAJOR, "led", &led_fops);if (rc < 0){printk("register %s char dev error\n", "led");return -1;}printk("ok!\n");return 0;}void __exit led_exit(void){unregister_chrdev(LED_MAJOR, "led");printk("module exit\n");return;}module_init(led_init);module_exit(led_exit);2.编写Makefile⽂件ifneq ($(KERNELRELEASE),)obj-m := driver_led.oelseKDIR := /work/linux-3.0.1all:make -C $(KDIR) M=$(PWD) modules ARCH=arm CROSS_COMPILE=arm-linux-clean:rm -f *.ko *.o *.mod.o *.mod.c *.symversendif3.编写测试⽂件#include <stdio.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>int main (void){int fd;char buf[10]={0,1,0,1};fd = open("/dev/my_led",O_RDWR);if (fd < 0){printf ("Open /dev/my_led file error\n");return -1;}while(1){write(fd,&buf[0],1);sleep(1);write(fd,&buf[1],1);sleep(1);}close (fd);return 0;}四、实验步骤1、编译驱动程序和测试程序在终端中运⾏:#make命令,编译成功⽣⽣下列⽂件在终端中运⾏:#arm-linux-gcc test.c -o test,编译成功⽣成⽂件2、将⽂件拷贝到SD卡3、将SD卡插⼊到OK6410开发板中4、在OK6410终端中运⾏程序加载驱动:#insmod sdcard/driver_led.ko创建设备⽂件:# mknod /dev/my_led c 240 0运⾏测试⽂件:#./sdcard/test卸载驱动程序:#rmmod sdcard/driver_led.ko5、运⾏结果此时可以看到OK6410开发板的4个LED灯⼀直同时点亮,然后熄灭。

哈工大 嵌入式系统实验指导01

哈工大 嵌入式系统实验指导01

实验一:汇编指令实验1.实验目的z了解Keil uVision集成开发环境及软件仿真功能使用。

z掌握ARM7TDMI汇编指令的用法,并能编写简单的汇编程序。

z掌握指令的条件执行和使用LDR/STR指令完成存储器的访问。

z掌握基本的汇编程序调试。

2.实验设备z硬件:PC机一台z软件:WindowsXP系统,Keil uVision 4.0集成开发环境3.实验内容(1)使用LDR指令读取0x40000100地址上的数据,将数据加1。

若结果小于10,则使用STR指令把结果写回原地址;若结果大于等于10,则把0写回原地址。

(2)使用Keil uVision软件仿真,单步、全速运行程序,设置断点,打开寄存器窗口监视R0和R1的值,打开存储器观察窗口监视0x40000100地址上的值。

4.实验预习要求(1)学习ARM指令系统的内容,重点掌握LDR/STR指令和指令条件执行;(2)查阅Keil uVision 软件的介绍,了解软件的功能和操作方法。

5.实验步骤(1)启动Keil uVision,新建一个工程ex01。

见图1-1、图1-2、图1-3。

图1-1 建立工程图1-2 选择目标芯片图1-3 不需要系统提供的Startup文件(2)建立汇编源文件ex01.s,编写实验程序,然后添加到工程中。

见图1-4、图1-5、图1-6、图1-7。

图1-4 建立新文件图1-5 保存扩展名为.s的汇编程序文件图1-6 把文件添加到工程图1-7 添加文件到工程后(3)设置工程选项,存储器映射。

见图1-8、图1-9。

图1-8 设置工程选项图1-9 设置存储器映射(4)编译链接工程。

见图1-10。

(5)进行软件仿真调试。

见图1-11、图1-12、图1-13、图1-14。

图1-11 调试运行图1-12 调试界面图1-13 设置断点图1-14 运行程序6.实验参考程序汇编指令实验的参考程序见程序清单1.1。

程序清单1.1 汇编指令实验参考程序COUNT EQU 0X40000100 ;定义一个变量,地址为0x40000100 AREA RESET, CODE, READONLY ;声明代码段RESETENTRY ;表示程序入口CODE32 ;声明32位ARM指令START LDR R1,=COUNT ;R1 ← COUNTMOV R0,#0 ;R0 ← 0STR R0,[R1] ;[R1] ← R0,即设置COUNT为0LOOP LDR R1,=COUNTLDR R0,[R1] ;R0 ← [R1]ADD R0,R0,#1 ;R0 ← R0 + 1CMP R0,#10 ;R0与10比较,影响条件码标志MOVHS R0,#0 ;若R0 >= 10, 则此指令执行,即R0 ← 0STR R0,[R1] ;[R1] ← R0,即保存COUNTB LOOPEND7.思 考(1)若使用LDRB/STRB代替程序清单中的所有加载/存储指令(LDR/STR),程序会得到正确的执行吗?(2)LDR伪指令与LDR加载指令的功能和应用有何区别,举例说明?(提示:LDR伪指令的形式为“LDR Rn,=expr”。

嵌入式控制系统综合实验

嵌入式控制系统综合实验
3.1 手写识别原理 ..................................................................................................... 4 3.2 手写识别程序设计 ............................................................................................... 6 3.3 手写识别硬件设计 ............................................................................................. 10 3.4 拼音九键输入原理 ............................................................................................. 10 3.5 拼音九键软件设计 ..............................................................................................11 3.6 拼音九键硬件设计 ............................................................................................. 13 4 编译调试.................................................................................................................... 14 4.1 手写识别、拼音输入法单项调试 ....................................................................... 14 4.2 手写识别、拼音输入法组合调试 ....................................................................... 18 5 总结............................................................................................................................ 19

西南科技大学嵌入式实验报告

西南科技大学嵌入式实验报告

西南科技大学嵌入式实验报告《嵌入式系统》
实验报告
姓名:
学号:
班级:
20xx年4月
实验一ARM汇编指令实验1
一、实验目的
1.初步学会使用ADS1.2 开发环境及ARM软件模拟器;
2.通过实验掌握简单ARM汇编指令的使用方法。

二.实验设备
1.硬件:PC机;
2.软件:ADS1.2集成开发环境。

Windows98/2000/NT/XP。

三.实验内容
1.熟悉开发环境的使用,并使用LDR/STR和MOV等指令访问寄存器或存储单元。

2.使用ADD/SUB/LSL/LSR/AND/ORR等指令,完成基本数学/逻辑运算。

四.实验原理
ARM处理器共有37个寄存器:31个通用寄存器,包括程序计数器(PC),这些寄存器都是32位;6个状态寄存器,这些寄存器
也是32位,但只使用了其中的12位。

1.ARM通用寄存器
通用寄存器(R0~R15)可分为3类,即不分组寄存器
R0~R7.分组寄存器R8~R14.程序计数器R15。

2.存储器格式
ARM体系结构将存储器看作是从零地址开始的字节的线性组合。

字节0~3存放第一个字,字节4~7存放第2个字,以此类推。

ARM体系结构可以用两种方法存储字数据,分别称为大端格式和小端格式。

五.实验程序
1. 实验A参考程序
X EQU 45 :定义变量x,并赋值为45
Y EQU 64 :定义变量y,并赋值为64
STACK_TOP EQU 0x1000 :定义栈顶0x1000
AREA Example,CODE,READONLY :声明代码段
ENTRY :标识入口。

【精品】嵌入式系统实验报告-1-外部中断

【精品】嵌入式系统实验报告-1-外部中断

【精品】嵌入式系统实验报告-1-外部中断实验名称:外部中断
实验目的:了解外部中断的概念和原理,学习在Keil中配置和使用外部中断,掌握外部中断的应用。

实验器材:Keil软件,STC89C52RC单片机,LED灯,按键开关。

实验原理:
外部中断是指单片机外部设备(如按键开关、定时器等)产生的中断请求信号,使得单片机能够在执行程序的过程中,根据需要接受来自外部设备的中断请求,并立即处理中断请求所需的相关程序,在处理完中断请求后再返回到原来程序的执行。

在Keil中使用外部中断需要用到的库函数有:
void EX0_init(void); //外部中断0(P3.2)初始化函数
void EX1_init(void); //外部中断1(P3.3)初始化函数
void INT0_ISR(void) interrupt 0; //外部中断0的中断处理函数
void INT1_ISR(void) interrupt 2; //外部中断1的中断处理函数
其中,EX0_init()和EX1_init()函数用于初始化外部中断0和外部中断1,将相应的引脚设置为中断请求引脚,并设置相应的中断触发方式;INT0_ISR()和INT1_ISR()函数用于处理外部中断0和外部中断1的中断请求。

实验结果:
在Keil中编译程序后,烧录程序到单片机中,并将单片机连接到外部电路中。

当按下按键时,会模拟产生外部中断请求信号,LED灯会闪烁3次后停止闪烁。

当按键松开后,LED灯将停止闪烁,恢复到初始状态。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

嵌入式系统综合实验一学号:装 订线实验报告课程名称: 嵌入式系统设计 指导老师:马永昌 成绩:________________实验名称:综合实验一dht11和人体感应传感器 实验类型:验证型 同组学生姓名:孙凡原三、主要仪器设备(必填) 四、操作方法和实验步骤五、实验数据记录和处理 六、实验结果与分析(必填) 七、讨论、心得一、实验目的和要求1.掌握字符设备驱动程序的基本结构和开发方法2.掌握用户空间调用设备驱动的方法3.掌握用户和内核的交互二、实验内容和原理专业:测控技术与仪器姓名:颜睿装订线1.编写温湿度传感器DHT11驱动,传输打印温湿度信息2.编写人体感应传感器驱动,控制LED灯亮灭原理:温湿度传感器DHT11:1.引脚图实际使用传感器没有NC引脚2.数据采集a.数据总时序用户主机发送一次开始信号后,DHT11 从低功耗模式转换到高速模式,待主机开始信号结束后,DHT11 发送响应信号,送出40bit 的数据,幵触发一次信采集。

b.主机发送起始信号连接DHT11的DATA引脚的I/O口输出低电平,且低电平保持时间不能小于18ms,然后等待DHT11 作出应答信号。

装线订c.检测从机应答信号DHT11 的DATA 引脚检测到外部信号有低电平时,等待外部信号低电平结束,延迟后DHT11 的DATA引脚处于输出状态,输出80 微秒的低电平作为应答信号,紧接着输出80 微秒的高电平通知外设准备接收数据。

装订线d.接收数据(1)数据判定规则位数据“0”的格式为:50 微秒的低电平和26-28 微秒的高电平,位数据“1”的格式为:50 微秒的低电平加70微秒的高电平。

接收数据时可以先等待低电平过去,即等待数据线拉高,再延时60us,因为60us大于28us且小于70us,再检测此时数据线是否为高,如果为高,则数据判定为1,否则为0。

(2)数据格式一次传送40 位数据,高位先出8bit 湿度整数数据+ 8bit 湿度小数数据+8bit 温度整数数据+ 8bit 温度小数数据+8bit 校验位。

(3)数据校正判断“8bit 湿度整数数据+ 8bit 湿度小数数据+8bit 温度整数数据+ 8bit 温度小数数据”的结果是否等于8bit校验位。

如果等于则数据接收正确,否则应该放弃这一次的数据,重新接收。

人体感应传感器HCSR-501:装线订1、全自动感应:人进入其感应范围则输出高电平,人离开感应范围则自动延时关闭高电平,输出低电平2、光敏控制(可选择,出厂时未设)可设置光敏控制,白天或光线强时不感应。

3、温度补偿(可选择,出厂时未设):在夏天当环境温度升高至 30~32℃,探测距离稍变短,温度补偿可作一定线的性能补偿。

4、两种触发方式:(可跳线选择)a、不可重复触发方式:即感应输出高电平后,延时时间段一结束,输出将自动从高电平变成低电平;b、可重复触发方式:即感应输出高电平后,在延时时间段内,如果有人体在其感应范围活动,其输出将一直保持高电平,直到人离开后才延时将高电平变为低电平(感应模块检测到人体的每一次活动后会自动顺延一个延时时间段,并且以最后一次活动的时间为延时时间的起始点)。

5、具有感应封锁时间(默认设置:2.5S 封锁时间):感应模块在每一次感应输出后(高电平变成低电平),可以紧跟着设置一个封锁时间段,在此时间段内感应器不接受任何感应信号。

此功能可以实现“感应输出时间”和“封锁时间”两者的间隔工作,可应用于间隔探测产品;同时此功能可有效抑制负载切换过程中产生的各种干扰。

(此时间可设置在零点几秒—几十秒钟)。

6、工作电压范围宽:默认工作电压 DC4.5V-20V。

7、微功耗:静态电流<50 微安,特别适合干电池供电的自动控制产品。

线8、输出高电平信号:可方便与各类电路实现对接。

三、主要仪器设备树莓派、PC机、温湿度传感器、人体感应传感器四、操作方法和实验步骤1.根据说明书编写传感器驱动2.编写可执行程序五、实验数据记录和处理1.传感器驱动demo.c#include<linux/init.h>#include<linux/module.h>#include<linux/device.h>#include<linux/gpio.h>#include<linux/interrupt.h>#include<linux/cdev.h>#include<linux/ioctl.h>线#include<linux/fs.h>#include<linux/delay.h>#include<asm/uaccess.h>#define DRIVER_NAME"Demo"#define DEVICE_NAME"Demo"static dev_t demo_devno; //设备号static struct class *demo_class;static struct cdev demo_dev;static struct gpio_config{int button_num;//人体传感器输出端int out_num;//温湿度传感器数据端int led_num;//人体红外传感器连接的ledint led1_num;//温湿度传感器连接的ledint humidity;//湿度值int temperature;//温度值}config;线static int i=0;static int flag = 0;//open 函数,应用程序调用open系统调用时会调用本函数static int demo_open(struct inode*inode,struct file *filp){printk(KERN_INFO"Demo open\n");return0;}//release 函数,应用程序调用close系统调用时会调用本函数static int demo_release(struct inode *inode, struct file *filp){线if(flag){gpio_free(config.button_num);gpio_free(config.led_num);flag = 0;}printk(KERN_INFO"Demo release\n");return0;}//ioctl 控制函数,应用程序调用ioctl系统调用时会调用本函数static long demo_ioctl(struct file*filp,unsigned int cmd,unsigned long arg) {int err = 0;int buff[40];int humi=0;int temper=0;线switch(cmd){case0://0 表示命令号,一般都用宏定义来控制{if(copy_from_user(&config,( void *)arg,sizeof(struct gpio_config))){ //从用户程序中获取配置数据printk(KERN_ERR"[%s %d] : copy_from userfailed !\n",__func__,__LINE__);return -EFAULT;}printk(KERN_INFO"[%s %d]: Get button gpio num: %d and led gpio num: %d\n ",__func__,__LINE__,config.button_num,confi g.led_num);err =gpio_request_one(config.button_num,GPIOF_IN ,"Light Button");if(err)线 {printk(KERN_ERR"[%s %d] :Request button gpiofailed\n",__func__,__LINE__);return -EFAULT;}err =gpio_request_one(config.led_num,GPIOF_OUT_I NIT_LOW,"LED light");if(err){printk(KERN_ERR"[%s %d] :Request led gpiofailed\n",__func__,__LINE__);gpio_free(config.button _num);return -EFAULT;}线 err =gpio_request_one(config.out_num,GPIOF_IN,"L ight Button");if(err){printk(KERN_ERR"[%s %d] :Request button gpiofailed\n",__func__,__LINE__);gpio_free(config.button _num);gpio_free(config.led_nu m);return -EFAULT;}err =gpio_request_one(config.led1_num,GPIOF_OUT_ INIT_LOW,"LED light");if(err){线printk(KERN_ERR"[%s %d] :Request led gpiofailed\n",__func__,__LINE__);gpio_free(config.out_nu m);gpio_free(config.button _num);gpio_free(config.led_nu m);}flag = 1;break;}case1:{gpio_direction_output(confi g.led_num,0);//设置led输出gpio_direction_input(config .button_num);//设置人体传感器输入线gpio_set_value(config.led_n um,0);//关ledif(gpio_get_value(config.bu tton_num)==0)//人体感应输入低电平,led灭{gpio_set_value(config.l ed_num,0);}elseif(gpio_get_value(config.button_num)==1)//人体感应输入高电平,led亮{gpio_set_value(config.l ed_num,1);}gpio_direction_output(confi g.led1_num,0);//设置led1输出(实际并未使用)线gpio_direction_output(confi g.out_num,1);//设置温湿度传感器数据端的引脚为输出gpio_set_value(config.led1_ num,0);gpio_set_value(config.out_n um,0);//根据dht11的数据传输规则进行操作mdelay(20);gpio_set_value(config.out_n um,1);udelay(40);gpio_direction_input(config .out_num);while(gpio_get_value(config .out_num)==0){}while(gpio_get_value(config .out_num)==1){}for(i=0;i<40;i++)线 {while(gpio_get_value(co nfig.out_num)==0){}udelay(50);if(gpio_get_value(confi g.out_num)==1)//获得的数据存入buff[40]数组 {buff[i]=1;while(gpio_get_valu e(config.out_num)==1){}}elsebuff[i]=0;}for(i=0;i<16;i++)//湿度移位相加{线 humi=humi*2+buff[i]; }for(i=16;i<32;i++)//温度移位相加{temper=temper*2+buff[i] ;}config.humidity=humi;config.temperature=temper;gpio_direction_output(confi g.out_num,1);//测量结束引脚置高电平gpio_set_value(config.out_n um,1);mdelay(2000);//延时一段时间再测量线if(copy_to_user((void*)arg,&config,sizeof(struct gpio_config)))//数据传入用户态{printk(KERN_ERR"[%s %d] : copy to user failed !\n",__func__,__LINE__);return -EFAULT;}flag=1;break;}default:printk(KERN_INFO"[%s %d]:In valid cmd", __func__,__LINE__);break;}return0;}线static struct file_operations demo_fops = { .owner = THIS_MODULE,.open = demo_open,.release = demo_release,.unlocked_ioctl = demo_ioctl,};static int __init demo_init(void){int err;printk(KERN_INFO"Demo Init \n");err =alloc_chrdev_region(&demo_devno,0,1,DRIVER_ NAME);if(err < 0){线goto err;}cdev_init(&demo_dev,&demo_fops);err = cdev_add(&demo_dev,demo_devno,1);if(err < 0){printk(KERN_ERR"[%s,%d]add cdev failed\n",__func__,__LINE__);goto FREE_DEVNO;}//自动生成设备文件在/dev目录下,文件名为DEVICE_NAMEdemo_class =class_create(THIS_MODULE,DEVICE_NAME);if(IS_ERR(demo_class)){printk(KERN_ERR"[%s,%d]class create failed\n",__func__,__LINE__);线goto DEV_FREE;}device_create(demo_class,NULL,demo_devn o,NULL,DEVICE_NAME);return0;DEV_FREE:cdev_del(&demo_dev);FREE_DEVNO:unregister_chrdev_region(demo_devno, 1); err:return err;}static void demo_exit(void){if(flag){gpio_free(config.button_num);gpio_free(config.led_num);线gpio_free(config.out_num);gpio_free(config.led1_num);}device_destroy(demo_class,demo_devno);class_destroy(demo_class);cdev_del(&demo_dev);unregister_chrdev_region(demo_devno, 1);printk(KERN_INFO"Demo exit\n");}module_init(demo_init);module_exit(demo_exit);MODULE_AUTHOR("hyg");MODULE_DESCRIPTION("BUTTON LED Driver"); MODULE_LICENSE("GPL");2.应用程序demo.c#include<stdio.h>线#include<stdlib.h>#include<unistd.h>#include<sys/types.h>#include<sys/ioctl.h>#include<sys/time.h>#include<sys/ioctl.h>#include<errno.h>#include<fcntl.h>struct gpio_config{int button_num;int out_num;int led_num;int led1_num;int humidity;int temperature;};int main(int argc, char **argv)线{int fd;float h;float t;struct gpio_config config;config.button_num = 26;//人体感应传感器引脚config.led_num = 3;//led引脚config.out_num = 5;//dht11引脚config.led1_num = 6;//未使用config.humidity = 0;//湿度config.temperature = 0;//温度fd = open("/dev/Demo", O_RDWR);if (fd < 0) {perror("/dev/Demo");exit(0);}ioctl(fd,0,&config);//分配引脚传入内核态线while(1){ioctl(fd,1,&config); //启动驱动进行数据采集h=(float)config.humidity/256;t=(float)config.temperature/256;printf("humidity: %0.2f %rh\n",h);printf("temperature: %0.2f C\n",t);sleep(0.5);}close(fd);return0;}3.makefile修改装 订线a 用户程序makefile 更改gcc 路径为本机路径: CC:=/home/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf-gcc b.驱动程序makefile修改linux 文件夹路径KERNELDIR:=/home/linux/4.硬件接线5.编译加载运行 a.环境变量装订线b.编译c.拷贝d.加载运行六、实验结果与分析人体传感器有反应,led灯亮装线订实验完成七、讨论、心得由于之前实现了超声波传感器的驱动,这次实验还是比较简单的,主要要看懂传感器说明书的流程,多调试几次就可以实现。

相关文档
最新文档