- 1、本文档共20页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
嵌入式Linux应用程序开发实验报告-期末作业
软件学院大作业设计报告
课程名称: 嵌入式Linux应用程序开发
题 目: 基于UP-CUP2440平台的驱动程序开发和QT程序开发
专 业: 计算机软件
班 级: 计算机软件 111 班
姓名 学号:鲁 飞8000611038 卢惠民8000611021
戚成林8000611032 慕一聪8000611018
刘 备8000611006
任课教师: 李岚 职称: 副教授
完成时间: 2014年6月11日
目 录
一、小组成员分工 2
二、实验任务 2
三、主要仪器设备及耗材 3
四、实验步骤 3
一、驱动 3
1.基本知识: 3
2.实验原理: 4
3.具体实现: 4
二、QT计算器 9
1.QT程序设计 9
2.虚拟机下进行编译: 15
3.下载到开发板上运行: 17
六、实验数据及处理结果 18
七、思考讨论题或体会或对改进实验的建议 18
八、参考资料: 20
一、小组成员分工
分工:
鲁飞:QT设计与设计报告
卢惠民:QT设计与设计报告
戚成琳:驱动与设计报告
慕一聪、刘备:设计报告
二、实验任务
1.编写基于UP-CUP2440硬件平台的GPIO驱动程序
必选功能:使中断按键按下后,开发板上的LED灯能作如下闪动:
连续性闪动,跑马灯:如:1-2-3-1-2-3…或 3-2-1-3-2-1
间隔性闪动:如: 1-3-2-1-3-2…或 3-1-2-3-1-2…
进阶功能:改变中断按键的控制功能,使中断按键按下后,LED灯不断闪亮,再次按下后,LED灯灭。
2.QT计算器
三、主要仪器设备及耗材
PC,Windows Xp,H-JTAG,H-Flasher,DNW,开发实验箱。
四、实验步骤
一、驱动
思路:
前后台思想:
在中断模块中设置一个计数的变量,每一次中断计数器加一。
然后在GPIO驱动模块的ioctl()函数中分情况使跑马灯按要求闪动或熄灭。
1.基本知识:
设备驱动程序可以使用模块的方式动态加载到内核中去。
模块的必需组成部分:
模块加载函数,insmod时调用。
模块卸载函数,rmmod时调用
模块许可证LICENSE说明
数据结构file_operation中定义驱动程序会使用的函数。
在获得了系统分配的设备号之后,必须要通过注册才能实现设备号和驱动程序之间的关联。
打开设备和释放设备,没什么要特别注意的。
读写设备:把内核空间的数据复制到用户空间去,或者从用户空间复制到内核空间。
read()里面使用copy_to_user()就可以将内核空间的值传到用户空间去。这一点在本实验的驱动程序的实现中起着至关重要的作用。
ioctl()则是对IO寄存器的控制,在本实验中就要用ioctl()来实现不同的跑马灯亮灭。
2.实验原理:
3.具体实现:
(一)中断驱动模块:
该模块只需在老师给的实例的基础上加以修改就行。
(1)模块初始化函数中,请求中断处理函数:
ret = request_irq(S3C2440_IRQ5, s3c2440_IRQ3_fun, SA_INTERRUPT, S3C2440_IRQ5, NULL);
中断处理函数为:
s3c2440_IRQ3_fun()
在此中断处理函数中,用一个全局变量count在每一次中断的时候加1,由于我们的开发板按一次会处理两次,所以计数到7的时候,必须使count恢复到1。
具体实现如下:
int count=0;
irqreturn_t s3c2440_IRQ3_fun (int irq, void *dev_id, struct pt_regs *reg)
{
printk(enter interrupt 5 !\n);
count++;
if(count==7)
count=1;
}
设备初始化:
static int __init s3c2440_interrupt_init(void)
{
int ret;
int flags;
local_irq_save(flags);
// by sprife
s3c2410_gpio_cfgpin( S3C2410_GPF5, S3C2410_GPF5_EINT5);
s3c2410_gpio_pullup(S3C2410_GPF5,1
文档评论(0)