嵌入式Linux应用程序开发实验报告期末作业
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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,