电子科技大学微机实验报告 实验5

合集下载

电子科技大学实验报告

电子科技大学实验报告

电子科技大学实验报告电子科技大学实验报告电子科技大学作为中国一流的电子信息科学与技术学府,以其卓越的教育质量和科研实力备受瞩目。

在这所学校里,学生们不仅接受了丰富的理论知识,更重要的是能够通过实验来巩固和应用所学的知识。

实验报告作为实验课程的重要组成部分,对学生的实验能力、分析能力和表达能力都有一定的要求。

一、实验目的与背景每个实验报告都应该明确实验的目的和背景。

在电子科技大学的实验报告中,一般会先介绍该实验所涉及的相关知识和背景,然后明确实验目的。

以“电路实验”为例,可以介绍电路的基本概念和理论知识,然后明确实验目的是通过搭建电路,观察和分析电流、电压、电阻等参数的变化规律。

二、实验装置与步骤实验报告中应该详细描述实验所用的装置和仪器,并给出实验步骤。

例如,在电路实验中,可以列出所用的电源、电阻、电流表、电压表等装置,并详细说明实验的具体步骤,包括搭建电路的过程、调节参数的方法以及观察数据的记录方式。

三、实验结果与数据分析实验结果是实验报告的重要部分,学生需要将实验过程中所得到的数据进行整理和分析。

在电子科技大学的实验报告中,学生可以通过绘制图表、计算数据等方式来展示实验结果。

例如,在电路实验中,可以通过绘制电流与电压的关系曲线图来展示实验结果,并根据曲线的趋势和数据的变化来分析电路的特性和规律。

四、实验讨论与结论实验讨论是实验报告中的重要环节,学生可以在这一部分对实验结果进行讨论和解释。

例如,在电路实验中,学生可以通过比较实验数据和理论计算结果的差异,来分析实验误差的原因,并提出改进的方法。

最后,学生需要总结实验的结论,并对实验的意义和应用进行简要的说明。

五、实验心得与改进意见实验心得是学生对实验过程和结果的个人感悟和体会,可以在实验报告的最后部分进行阐述。

学生可以谈论自己在实验中遇到的困难和解决方法,以及对实验过程和结果的评价。

同时,学生还可以提出对实验的改进意见,以便于今后的实验能够更加顺利和有效地进行。

电子科技大学微机实验报告(含思考题)河畔下的哈】实验6

电子科技大学微机实验报告(含思考题)河畔下的哈】实验6

实验六基于ARM的键盘及数码管驱动实验1.掌握键盘及数码管驱动原理。

2.掌握ZLG7290芯片的使用方法。

3.掌握I2C总线的协议标准。

4.掌握Linux下键盘驱动的实现方法。

编写测试程序控制键盘和数码管。

1.了解ARM9处理器结构2.了解i2c协议硬件:ARM嵌入式开发平台,PC 机Pentium100 以上。

软件:PC机Linux操作系统+MINICOM +AMRLINUX开发环境1、ZLG7290寄存器介绍ZLG7290内部有16个8bits寄存器,访问这些寄存器需要通过I2C 总线接口来实现.访问内部寄存器要通过“I2C总线地址+子地址”的方式来实现。

ZLG7290B 的I2C 总线器件地址是70H(写操作)和71H(读操作)。

? 键值寄存器Key(地址:01H)如果某个普通键(K1~K56)被按下,则微控制器可以从键值寄存器Key中读取相应的键值1~56。

如果微控制器发现ZLG7290 的INT 引脚产生了中断请求,而从Key 中读到的键值是0,则表示按下的可能是功能键。

键值寄存器Key 的值在被读走后自动变成0。

? 显示缓冲区DpRam0~DpRam7(地址:10H~17H)DpRam0~DpRam7 这8 个寄存器的取值直接对应8个数码管的显示内容。

每个寄存器的8 个位分别对应数码管的a,b,c,d,e,f,dp 段,MSB 对应a,LSB 对应dp。

例如大写字母H 的字型数据为6EH(不带小数点)或6FH(带小数点)。

? 命令缓冲区CmdBuf0 和CmdBuf1(地址:07H 和08H)通过向命令缓冲区写入相关的控制命令可以实现段寻址、下载显示数据、控制闪烁等功能。

2、ZLG7290控制命令介绍寄存器CmdBuf0(地址:07H)和CmdBuf1(地址:08H)共同组成命令缓冲区。

通过向命令缓冲区写入相关的控制命令可以实现段寻址、下载显示数据、控制闪烁等功能。

?下载数据并译码(Download)在指令格式中,高4 位的0110 是命令字段;A3A2A1A0 是数码管显示数据的位地址(其中A3 留作以后扩展之用,实际使用时取0 即可),位地址编号依次为0,1,2,3,4,5,6,7,代表8个数码管,dp 控制小数点是否点亮,0-点亮,1-熄灭;flash 表示是否要闪烁,0-正常显示,1-闪烁;d4d3d2d1d0 是要显示的数据,包括10 种数字和21 种字母。

微机系统实验报告

微机系统实验报告

西安电子科技大学实验报告实验一汇编语言编程实验1 实验目的(1)掌握汇编语言的编程方法(2)掌握DOS功能调用的使用方法(3)掌握汇编语言程序的调试运行过程2 实验内容(1)将指定数据区的字符串数据以ASCII码形式显示在屏幕上,并通过DOS功能调用完成必要提示信息的显示。

(2) 在屏幕上显示自己的学号姓名信息。

(3)循环从键盘读入字符并回显在屏幕上,然后显示出对应字符的ASCII码,直到输入”Q”或“q”时结束。

(4)自主设计输入显示信息,完成编程与调试,演示实验结果。

3 实验结果任务一4 程序流程图5 程序代码任务一DATA SEGMENTNUMBER DB ' 03101214 SONG YUAN YUAN',0AH,0DH,'$'string1 DB 0AH,0DH,' input q/Q to exit ',0AH,0DH,0AH,0DH,'NUMBER AND NAME:','$' string2 DB 0AH,0DH,'Input: $'RESULT DB 0AH,0DH,'ASCII is :$'SD DB ''DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV DX,OFFSET string1MOV AH,09HINT 21HMOV DX,OFFSET NUMBERINT 21HC1: MOV DX,OFFSET string2MOV AH,09HINT 21HMOV AH,01HINT 21HCMP AL,'Q'JZ EXITCMP AL,'q'JZ EXITMOV SD,ALMOV DX ,OFFSET RESULTMOV AH,09HINT 21HMOV SI,OFFSET SDMOV AL,DS:[SI]AND AL,0F0HMOV CL,4SHR AL,CLCMP AL,0AHJB C2ADD AL,07HC2: ADD AL,30HMOV DL,ALMOV AH,02HINT 21HMOV AL,DS:[SI]AND AL,0FHCMP AL,0AHJB C3ADD AL,07HC3: ADD AL,30HMOV DL,ALMOV AH,02HINT 21Hloop C1EXIT: MOV AX,4C00HINT 21HCODE ENDSEND START实验二数码转换实验.1 实验目的(1)掌握不同进制数及编码相互转换的程序设计方法。

电子科技大学微机实验报告实验5

电子科技大学微机实验报告实验5

电子科技大学微机实验报告实验5第一篇:电子科技大学微机实验报告实验5实验五基于ARM的模块方式驱动程序实验【实验目的】 1.掌握Linux 系统下设备驱动程序的作用与编写技巧 2.掌握Linux 驱动程序模块加载和卸载的方法 3.了解Linux 内核中的makefile和kconfig文件【实验内容】1.基于s3c2440 开发板编写led 驱动程序。

2.将编写好的led驱动加入linux内核中,修改makefile和kconfig文件,配置和编译内核。

3.编写关于led 的测试程序,交叉编译后运行,控制led 灯的亮灭。

【预备知识】1.了解ARM9处理器结构和Linux 系统结构2.熟练掌握C语言。

【实验设备和工具】ν硬件:ARM嵌入式开发平台,PC机Pentium100 以上。

ν软件:PC机Linux操作系统+MINICOM+AMRLINUX 开发环境【实验原理】νlinux设备驱动程序ν驱动的模块式加载和卸载ν编译模块ν装载和卸载模块ν led 驱动的原理在本开发板上有八个led指示灯,从下往上分别为LED0-LED7。

这八个led灯都是接的芯片上的gpio口(通用功能输入输出口)。

在本实验的开发板硬件设计中,当led 灯对应的gpio的电平为低时,led灯被点亮;当led灯对应的gpio的电平为高时,led灯灭。

本驱动的作用就是通过设置对应gpio口的电平来控制led 的亮灭。

因为ARM 芯片内的GPIO口都是复用的,即它可以被配置为多种不同的功能,本实验是使用它的普通的I/O口的输出功能,故需要对每个GPIO口进行配置。

在内核中已经定义了对GPIO口进行配置的函数,我们只需要调用这些函数就可以完成对GPIO口的配置。

【实验步骤】实验程序运行效果:程序会提示:“pleaseenterthe led status”输入与希望显示的led状态对应的ledstatus值(输入十进制值即可),观察led 的显示情况。

电子科技大学中山学院微处理器实验报告 (11)

电子科技大学中山学院微处理器实验报告 (11)
if(Row)
Col |= 0x40; //显示第二行时DDRAM地址从40H开始
Col |= 0x80; //拼为DDRAM地址设置命令
LCD1602CmdWrite(Col); //发送DDRAM地址
while( *Str )
LCD1602DataWrite(*Str++); //连续发送每个字符的ASCII码
LCD1602_EN=1;
LCD1602_DATA=cmdByte; //发送命令字节
LCD1602_EN=0;
}
//*****************************LCD1602写数据函数*********************
void LCD1602DataWrite(uint8 DataByte)
//*****************************电子钟时间调整函数********************
void RTClockAdj()
{
if(++RTClock.Second< 60 ) return;
RTClock.Second=0;
if(++RTClock.Minute< 60 ) return;
{
TH0=(65536-45*1024)>>8; //设置50ms定时初值(对应晶振11.0592MHz)
TL0=(65536-45*1024)&0xFF;
if(++Timer50ms< 20 ) return;
Timer50ms=0; //已满1s,Timer50ms清0
RTClockAdj(); //时间调整
void Delay(uint16 ms)

电子科技大学实验报告

电子科技大学实验报告
五、实验内容:
(一)用WinDLX模拟器执行求阶乘程序fact.s。
这个程序说明浮点指令的使用。该程序从标准输入读入一个整数,求其阶乘,然后将结果输出。
该程序中调用了input.s中的输入子程序,这个子程序用于读入正整数。
(二)用WinDLX模拟器执行程序gcm.s。
该程序从标准输入读入两个整数,求他们的greatest common measure,然后将结果写到标准输出。
该程序中调用了input.s中的输入子程序。
(三)用WinDLX模拟器执行求素数程序prim.s。
这个程序计算若干个整数的素数。
六、实验器材(设备、元器件):
PC微机一台
七、实验步骤及操作:
1.双击WinDLX图标运行WinDLX。装入测试程序之前,先初始化WinDLX模拟器:点击File菜单中的Reset all菜单项,弹出一个“Reset DLX”对话框。然后点击窗口中的“确认”按钮即可。
1.2.选择File/Load Code or Data,按如下步骤操作,可将fact.s和input.s这两个程序装入主存:
◆点击fact.s
◆点击select按钮
◆点击input.s
◆点击select按钮
◆点击load按钮
3.点击主窗口中的Execution开始运行。
4.程序gcm.s和prim.s的运行过程同上。
八、实验数据及结果分析:
九、实验结论:
十、总结及心得体会:
十一、对本实验过程及方法、手段的改进建议:
报告评分:
指导教师签字:
电子科技大学
实验报告
学生姓名:
学号:
一、实验室名称:计算机学院计算心
二、实验项目名称:熟悉WinDLX的使用

电子科技大学实验报告

正常情况下A和C之间进行通讯,但是此时B向A发送一个自己伪造的ARP应答,而这个应答中的数据为发送方IP地址是192.168.10.3(C的IP地址),MAC地址是BB-BB-BB-BB-BB-BB(C的MAC地址本来应该是CC-CC-CC-CC-CC-CC,这里被伪造了)。当A接收到B伪造的ARP应答,就会更新本地的ARP缓存(A被欺骗了),这时B就伪装成C了。同时,B同样向C发送一个ARP应答,应答包中发送方IP地址四192.168.10.1(A的IP地址),MAC地址是BB-BB-BB-BB-BB-BB(A的MAC地址本来应该是AA-AA-AA-AA-AA-AA),当C收到B伪造的ARP应答,也会更新本地ARP缓存(C也被欺骗了),这时B就伪装成了A。这样主机A和C都被主机B欺骗,A和C之间通讯的数据都经过了B。主机B完全可以知道他们之间说的什么:)。这就是典型的ARP欺骗过程。
图4-19
说明:由于cain功能很多,此处仅对本实验中所用到的功能进行讲解,其余功能读者可以自己去了解、尝试。
2.绑定网卡
在IP地址为192.168.1.12的机器上运行cain,在cain运行界面上,按下“sniffer”图标,并点击“configuration菜单”,在“sniffer”选项卡下,选择恰当的网卡进行绑定,点击确定。如图4-20、图4-21
1.安装使用工具Cain
首先在局域网内某台机器上安装Cain(IP地址为192.168.1.12)。Cain是一个功能强大的软件,可以实现网络嗅探、网络欺骗、破解加密口令、分析路由协议等功能。使用它之前必须进行安装,安装过程只需要按照默认情况安装即可。双击“Cain v2.5”,运行Cain的操作界面如图4-19:
六、实验内容:
1.安装使用工具Cain。

微机实验 交通灯实验报告

微机实验交通灯实验报告微机实验交通灯实验报告引言交通灯作为城市交通管理的重要组成部分,对于保障交通安全和顺畅起着至关重要的作用。

本次实验旨在通过微机控制,模拟交通灯的工作原理,并实现交通灯的自动控制。

一、实验目的本次实验的主要目的是通过搭建一套微机控制系统,实现交通灯的自动控制,并通过实验验证交通灯在不同道路情况下的工作原理和效果。

二、实验原理1. 交通灯的工作原理交通灯通常由红、黄、绿三个信号灯组成。

红灯表示停止,黄灯表示准备,绿灯表示可以通行。

交通灯通过不同颜色的灯光变化,指示车辆和行人何时可以通行,以保障交通的有序进行。

2. 微机控制系统微机控制系统是利用计算机和相应的软硬件实现对设备、机器等的控制和管理。

在交通灯实验中,我们可以通过编程控制计算机输出不同的信号,从而实现交通灯的自动控制。

三、实验器材和步骤1. 实验器材- 微机控制系统:包括计算机、编程软件和控制接口等。

- 交通灯模型:模拟真实的交通灯,包括红、黄、绿三个信号灯。

2. 实验步骤- 连接交通灯模型和微机控制系统。

- 编写程序,设置交通灯的工作时间和信号灯变化规律。

- 运行程序,观察交通灯的工作状态和变化过程。

四、实验结果和分析通过实验,我们成功地实现了交通灯的自动控制。

在程序中,我们设置了红灯亮10秒,黄灯亮3秒,绿灯亮15秒的时间间隔,模拟了真实交通灯的工作规律。

在实验过程中,我们观察到交通灯按照预设的时间间隔循环变化,红灯亮起时车辆停止,绿灯亮起时车辆可以通行。

这样的交通灯控制方式可以有效地维持交通的有序进行,减少交通事故的发生。

五、实验总结通过本次实验,我们深入了解了交通灯的工作原理和微机控制系统的应用。

微机控制系统作为一种高效、精确的控制手段,可以广泛应用于各个领域,提高设备的自动化程度和工作效率。

在今后的学习和工作中,我们将继续深入学习微机控制系统的原理和应用,掌握更多的编程技巧和控制方法,为实现更多实际问题的自动化解决方案做出贡献。

电子科大实验报告

一、实验名称计算机组成原理实验二、实验目的1. 掌握计算机组成原理的基本概念和组成结构。

2. 理解计算机各部件之间的逻辑关系和功能。

3. 学习计算机指令系统的基本原理和应用。

4. 培养动手实践能力和分析问题的能力。

三、实验内容1. 计算机硬件系统组成实验2. 计算机指令系统实验3. 计算机寻址方式实验4. 计算机中断系统实验四、实验原理1. 计算机硬件系统组成实验:通过搭建计算机硬件系统,了解计算机各个部件的功能和相互关系,包括中央处理器(CPU)、存储器、输入输出设备等。

2. 计算机指令系统实验:学习计算机指令系统的基本原理,包括指令格式、寻址方式、指令执行过程等。

3. 计算机寻址方式实验:了解计算机寻址方式的基本概念,包括直接寻址、间接寻址、寄存器寻址等,并掌握不同寻址方式的应用。

4. 计算机中断系统实验:学习计算机中断系统的原理,包括中断源、中断控制器、中断处理程序等,以及中断处理过程。

五、实验设备及器材1. 计算机组成原理实验箱2. 示波器3. 数字万用表4. 计算机软件:Keil、Proteus等六、实验过程及数据记录1. 计算机硬件系统组成实验(1)搭建计算机硬件系统,包括CPU、存储器、输入输出设备等。

(2)观察各个部件之间的连接和信号传输。

(3)测试计算机硬件系统的基本功能。

2. 计算机指令系统实验(1)编写简单的汇编语言程序,实现加法、减法等运算。

(2)使用Proteus软件模拟程序执行过程,观察CPU的运行状态和寄存器的内容。

3. 计算机寻址方式实验(1)编写汇编语言程序,实现不同寻址方式的操作。

(2)使用Proteus软件模拟程序执行过程,观察不同寻址方式对指令执行的影响。

4. 计算机中断系统实验(1)编写汇编语言程序,实现中断请求和处理。

(2)使用Proteus软件模拟程序执行过程,观察中断处理过程。

七、实验结果分析1. 通过搭建计算机硬件系统,了解了计算机各个部件的功能和相互关系,掌握了计算机硬件系统的基本原理。

电子科技大学中山学院学生实验报告

电子科技大学中山学院学生实验报告学院:机电工程专业:课程名称:微机原理与应用实验电子科技大学中山学院学生实验报告学院:机电工程专业:课程名称:微机原理与应用实验电子科技大学中山学院学生实验报告学院:机电工程专业:课程名称:微机原理与应用实验电子科技大学中山学院学生实验报告学院:机电工程专业:课程名称:微机原理与应用实验班级:姓名:学号:组别:实验名称:实验四可编程并行接口8255(方式0)实验时间:成绩:教师签名:批改时间:一、实验目的和任务掌握8255方式0的工作原理及使用方法。

二、实验内容1.实验电路如图4-1,8255C口接逻辑电平开关K0~K7,A口接LED显示电路L0~L7。

2. 编程从8255C口输入数据,再从A口输出。

图4-1 图4-2编程提示:1)8255控制寄存器端口地址28BHA口的地址288HC口的地址28AH2)参考流程图(见图4-2)三、实验过程和数据记录1.源程序:电子科技大学中山学院学生实验报告学院:机电工程专业:课程名称:微机原理与应用实验班级:姓名:学号:组别:实验名称:实验五七段数码管实验时间:成绩:教师签名:批改时间:一、实验目的和任务掌握数码管显示数字的原理。

二、实验内容1.静态显示:按图5-1连接好电路,将8255的A口PA0~PA6分别与七段数码管的段码驱动输入端a~g相连,位码驱动输入端S1接+5V(选中),S0、dp接地(关闭)。

编程从键盘输入一位十进制数字(0~9),在七段数码管上显示出来。

2.动态显示:按图5-2连接好电路,七段数码管段码连接不变,位码驱动输入端S1,S0接8255 C口的PC1,PC0。

编程在两个数码管上显示“56”。

3.动态显示:使用图5-2的电路,编程在两个数码管上循环显示“00-99”。

图5-1 图5-2编程提示:1)实验台上的七段数码管为共阴型,段码采用同相驱动,输入端加高电平选中的数码管亮,位码加反相驱动器,位码输入端高电平选中。

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

实验五基于ARM的模块方式驱动程序实验【实验目的】1.掌握Linux 系统下设备驱动程序的作用与编写技巧2.掌握Linux 驱动程序模块加载和卸载的方法3.了解Linux 内核中的makefile和kconfig文件【实验内容】1.基于s3c2440 开发板编写led 驱动程序。

2.将编写好的led驱动加入linux内核中,修改makefile和kconfig文件,配置和编译内核。

3.编写关于led 的测试程序,交叉编译后运行,控制led 灯的亮灭。

【预备知识】1.了解ARM9处理器结构和Linux 系统结构2.熟练掌握C语言。

【实验设备和工具】⏹硬件:ARM嵌入式开发平台,PC机Pentium100 以上。

⏹软件:PC机Linux操作系统+MINICOM+AMRLINUX 开发环境【实验原理】⏹linux设备驱动程序⏹驱动的模块式加载和卸载⏹编译模块⏹装载和卸载模块⏹led 驱动的原理在本开发板上有八个led指示灯,从下往上分别为LED0-LED7。

这八个led灯都是接的芯片上的gpio口(通用功能输入输出口)。

在本实验的开发板硬件设计中,当led 灯对应的gpio的电平为低时,led灯被点亮;当led灯对应的gpio的电平为高时,led灯灭。

本驱动的作用就是通过设置对应gpio口的电平来控制led 的亮灭。

因为ARM 芯片内的GPIO口都是复用的,即它可以被配置为多种不同的功能,本实验是使用它的普通的I/O口的输出功能,故需要对每个GPIO口进行配置。

在内核中已经定义了对GPIO口进行配置的函数,我们只需要调用这些函数就可以完成对GPIO口的配置。

【实验步骤】实验程序运行效果:程序会提示:“p leaseenterthe led stat us”输入与希望显示的led状态对应的ledstatus值(输入十进制值即可),观察led 的显示情况。

例如:⏹输入数字“3”,对应的二进制数字为00000011故点亮LED2~LED7⏹输入数字“4”,对应的二进制数字为00000100故点亮LED0,LED1,LED3~LED7【实验结果和程序】C语言程序:#include<linux/config.h>#include<linux/module.h>#include<linux/kernel.h>#include<linux/devfs_fs_kernel.h>#include<linux/fs.h>#include<linux/init.h>#include<linux/device.h>#include<linux/cdev.h>#include<asm/hardware.h>#include<asm/delay.h>#include<asm/uaccess.h>#include<asm/arch/regs-gpio.h>#include<asm/arch/hardware.h>#defineDEVICE_NAME "s3c2440-led"static intLedMajor=231;staticintLedMinor=0;static charledstatus=0xff;staticstructclass*s3c2440_class;staticstructcdev *s3c2440_led_cdev;/******************************************************************************** ************************** Function name:Update_led()**Descriptions :update the led status**Input :NONE**Output :NONE******************************************************************************* *************************/staticvoid Update_led(void){if(ledstatus&0x01)s3c2410_gpio_setpin(S3C2410_GPC7,1); //LED0灭elses3c2410_gpio_setpin(S3C2410_GPC7,0); //LED0亮if(ledstatus&0x02)s3c2410_gpio_setpin(S3C2410_GPC5,1); //LED1灭elses3c2410_gpio_setpin(S3C2410_GPC5,0); //LED1亮if(ledstatus&0x04)s3c2410_gpio_setpin(S3C2410_GPH9,1); //LED2灭elses3c2410_gpio_setpin(S3C2410_GPH9,0); //LED2亮if(ledstatus&0x08)s3c2410_gpio_setpin(S3C2410_GPB4,1); //LED3灭elses3c2410_gpio_setpin(S3C2410_GPB4,0); //LED3亮if(ledstatus&0x10)s3c2410_gpio_setpin(S3C2410_GPG5,1); //LED4灭elses3c2410_gpio_setpin(S3C2410_GPG5,0); //LED4亮if(ledstatus&0x20)s3c2410_gpio_setpin(S3C2410_GPG6,1); //LED5灭elses3c2410_gpio_setpin(S3C2410_GPG6,0); //LED5亮if(ledstatus&0x40)s3c2410_gpio_setpin(S3C2410_GPG7,1); //LED6灭elses3c2410_gpio_setpin(S3C2410_GPG7,0); //LED6亮if(ledstatus&0x80)s3c2410_gpio_setpin(S3C2410_GPG8,1); //LED7灭elses3c2410_gpio_setpin(S3C2410_GPG8,0); //LED7亮}staticssize_ts3c2440_Led_write(structfile*file,constchar*buffer,size_tcount,loff_t*ppos) {copy_from_user(&ledstatus,buffer,sizeof(ledstatus));Update_led();printk("write: led=0x%x,count=%d\n",ledstatus,count);returnsizeof(ledstatus);}staticints3c2440_Led_open(structinode*inode,struct file *filp){printk("led device open\n");return 0;}staticints3c2440_Led_release(structinode*inode,struct file*filp){printk("led device release\n");return 0;}staticstructfile_operationss3c2440_fops={.owner=THIS_MODULE,.open=s3c2440_Led_open,.write=s3c2440_Led_write,.release=s3c2440_Led_release,};staticintinits3c2440_Led_init(void){int ret;dev_ts3c2440_leds_devno;/*configure the gpiofor leds*/s3c2410_gpio_cfgpin(S3C2410_GPG5,S3C2410_GPIO_OUTPUT);s3c2410_gpio_cfgpin(S3C2410_GPG6,S3C2410_GPIO_OUTPUT);s3c2410_gpio_cfgpin(S3C2410_GPG7,S3C2410_GPIO_OUTPUT);s3c2410_gpio_cfgpin(S3C2410_GPG8,S3C2410_GPIO_OUTPUT);s3c2410_gpio_cfgpin(S3C2410_GPC7,S3C2410_GPIO_OUTPUT);s3c2410_gpio_cfgpin(S3C2410_GPC5,S3C2410_GPIO_OUTPUT);s3c2410_gpio_cfgpin(S3C2410_GPH9,S3C2410_GPIO_OUTPUT);s3c2410_gpio_cfgpin(S3C2410_GPB4,S3C2410_GPIO_OUTPUT);Update_led();/*registerthe devnumber*/s3c2440_leds_devno=MKDEV(LedMajor,LedMinor);ret=register_chrdev_region(s3c2440_leds_devno, 1,DEVICE_NAME);/*registerthe chardevice*/s3c2440_led_cdev=cdev_alloc(); if(s3c2440_led_cdev!= NULL){cdev_init (s3c2440_led_cdev, &s3c2440_fops);s3c2440_led_cdev->owner=THIS_MODULE;if(cdev_add(s3c2440_led_cdev, s3c2440_leds_devno, 1))printk(KERN_NOTICE "Something wrong when addings3c2440_led_cdev!\n");elseprintk("Success addings3c2440_led_cdev!\n");}/*create the device node in /dev*/s3c2440_class =class_create(THIS_MODULE, "led_class");class_device_create(s3c2440_class, NULL, s3c2440_leds_devno, NULL, DEVICE_NAME);printk(DEVICE_NAME " initialized\n");return 0;}staticvoid exits3c2440_Led_exit(void){cdev_del(s3c2440_led_cdev);class_device_destroy(s3c2440_class, MKDEV(LedMajor,LedMinor));class_destroy(s3c2440_class);printk(DEVICE_NAME " removed\n");}module_init(s3c2440_Led_init);module_exit(s3c2440_Led_exit);【思考题】1. 设备驱动程序的功能是什么?答:设备驱动的功能就是将系统提供的调用映射到作用于实际硬件的和设备相关的操作上。

相关文档
最新文档