嵌入式Linux应用程序开发实验报告期末作业

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

软件学院大作业设计报告课程名称:

题目:专业:班级:姓名学号:

基于UP-CUP2440平台的驱动程序开发和QT程序开发

计算机软件

计算机软件111班

鲁飞8000611038 卢惠民8000611021 戚成林8000611032 慕一聪8000611018 刘备8000611006

李岚职称:副教授

2014年6月11日

嵌入式Linux应用程序开发

任课教师: 完成时间:

一、小组成员分工

二、实验任务

三、主要仪器设备及耗材

四、实验步骤

、驱动

1. 基本知识:

2. 实验原理:

3. 具体实现:

二、QT计算器

1.QT程序设计

2. 虚拟机下进行编译:

3. 下载到开发板上运行:

六、实验数据及处理结果10 15

17

18

七、思考讨论题或体会或对改进实验的建议18

19

八、参考资料:

、小组成员分工

分工:

鲁飞:QT设计与设计报告卢惠民:QT设计与设计报告戚成琳:驱动与设计报告慕一聪、刘备:设计报告

二、实验任务

1•编写基于UP-CUP2440硬件平台的GPIO驱动程序

必选功能:使中断按键按下后,开发板上的LED灯能作如下闪动:

a)连续性闪动,跑马灯:如:1-2-3-1-2-3…或3-2-1-3-2-1

b)间隔性闪动:如:1-3-2-1-3-2…或3-1-2-3-1-2…

进阶功能:改变中断按键的控制功能,使中断按键按下后,LED灯不断闪亮,再

次按下后,LED灯灭。

2.QT计算器

三、主要仪器设备及耗材

PC, Windows Xp , H-JTAG,H-Flasher,DNW,开发实验箱。

四、实验步骤

、驱动

思路:

前后台思想:

在中断模块中设置一个计数的变量,每一次中断计数器加一。

然后在GP10驱动模块的ioctIO函数中分情况使跑马灯按要求闪动或熄灭。

1. 基本知识:

(3)

(4)

间的关

联。

(5)打开设备和释放设备,没什么要特别注意的。

(6)读写设备:把内核空间的数据复制到用户空间去,或者从用户空间复制到内核空间。

read()里面使用copy_to_user()就可以将内核空间的值传到用户空间去。这一点在本实验的驱动程序的实现中起着至关重要的作用。

(7)ioctl()则是对10寄存器的控制,在本实验中就要用ioctl()来实现不同的跑马灯亮灭。

2. 实验原理:

UP-「liP2轴】开发平3个【iPM】悴制的l.HD.和I个町白搖产乍外帑砸件中啊的技犍・LEU 井别惶用

S3C24HySJC2440 (JPLS GPLb, GPC7 (PXA27O 的

T

itf

10

Regilbr Adcfrwt R/用OaicrvtiQn A«t«t Vilwa

GPCCON Q«56000020FVW S'lgwM lhe pins of CKjrtC iQjiO

GPCDAT it50OOOO£-i R/W fne dalfl reg ster fty nqrt C Uhdert,

GPCJP Q>i5a0G002B R/W Pull-J p diMtrtr iifugaler feir pad C mo

BEservod脚500000比———

GPC7[15:14]00 = Input

10 = LCD'LPCREVB 01 = Output 11 = Reserved

GPC6[13:12]00 = Input

10 = LCD LPCREV 01 = Output 11 = Reserved

[11:10]00 = Input

10 = LCD_LPCOE 01 = Output 11 = Reserved

设备驱动程序可以使用模块的方式动态加载到内核中去。

模块的必需组成部分:

模块加载函数,insmod时调用。

模块卸载函数,rmmod时调用

模块许可证LICENSE说明

数据结构file_operation 中定义驱动程序会使用的函数。

在获得了系统分配的设备号之后,必须要通过注册才能实现设备号和驱动程序之

Q'fll

IfU Q

3. 具体实现:

(一)中断驱动模块:

该模块只需在老师给的实例的基础上加以修改就行。

(1)模块初始化函数中,请求中断处理函数:

ret = request_irq(S3C2440_IRQ5, s3c2440_IRQ3_fu n, SA_INTERRU PT,

"S3C2440_IRQ5", NULL);

中断处理函数为:

s3c2440_IRQ3_fu n()

在此中断处理函数中,用一个全局变量cou nt在每一次中断的时候加1,由于我们的开发板按一次会处理两次,所以计数到7的时候,必须使count恢复到1。

具体实现如下:

int coun t=0;

irqreturn_t s3c2440_IRQ3_fu n (int irq, void *dev_id, struct pt_regs *reg)

{

prin tk("e nter interrupt 5 !\n ”);

coun t++;

if(co un t==7)

coun t=1;

}

(2)设备初始化:

static int __init s3c2440_interrupt_in it(void)

{

in t ret; int flags; local_irq_save(flags);

// by sprife

s3c2410_g pio_cfgpin( S3C2410_G PF5, S3C2410_G PF 5_EINT5);

s3c2410_g pio_pullu p(S3C2410_G PF5,1);

// end

set_irq_ty pe(S3C2440_IRQ5,/*IRQT_FALLING*/IRQT_LOW);

local_irq_restore(flags);

ret = request_irq(S3C2440_IRQ5, s3c2440_IRQ3_fu n, SA_INTERRU PT,

相关文档
最新文档