linux大作业1组 - 图文 下载本文

《嵌入式LINUX 应用程序开发

期末大作业》

课程名称: 嵌入式Linux应用程序开发

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

专 业: 计算机软件 班 级: 111 组 长: 王超--8000611112 组 员: 张凯刚--8000611110

柴守坤--8000611118 王昆明--8000611109 刘贵豪--8000611102 完成人数: 5人 起讫日期: 2014-05-20

任课教师: 李岚 职称: 副教授

摘要

随着嵌入式技术的不断发展,近年来嵌入式技术在国内得到了广泛应用,在消费电子中得到了普及性的应用,而学习嵌入式系统首先要掌握常用嵌入式处理器、嵌入式操作系统、嵌入式编程语言,即ARM处理器、嵌入式Linux系统、嵌入式C语言,有了这些基础就可以进行前入式Linux应用开发、系统开发、驱动开发等的学习。

本次作业是基于UP-CUP2440平台的驱动程序开发和QT程序开发两个部分,前者是对在所给出的硬件平台上,开发驱动程序,实现跑马灯的基本效果;后者是开发一个QT应用程序,这里我们是在QT上实现计算器。 我们在完成的过程中按照老师的要求,计算器实现了在开发板上和虚拟机上双重的演示效果,实现了知识的迁移,也是大学所学内容理论到实践为数不多的应用。

关键词:linux,QT,跑马灯,计算器。

团队成员

组长:王超

组员:张凯刚,柴守坤,刘贵豪,王坤明。

一、 基于UP-CUP2440平台的驱动程序开发 1、实验内容

学习在linux写针对S3C2440的LED驱动程序,实现跑马灯的效果,按下中断按钮后,开发板上的LED灯将会从左到右依次闪亮,然后从右向左依次闪亮,此为一个周期。LED灯将会周期闪烁。

2、实验原理

UP-CUP2440开发平台设置了 3 个 GPIO控制的 LED,和 1 个可直接产生外部硬件中断的按键。LED分别使用 S3C2410/S3C2440的 GPC5,GPC6,GPC7(PXA270 的 GPIO0,GPIO1,GPIO52)三个 GPIO,按键接到 INT5 中断(PXA270的 GPIO97)

3、实现过程

在实验八的基础上对代码进行适当的改进,具体实现源代码部分如下所示:

//#include #include #include #include

#include #include #include #include #include #include #include

#include #include #include

#include #include

#define SA_INTERRUPT IRQF_DISABLED #define DEVICE_NAME \#define S3C2440_IRQ5

//#define GPIO_key_int01 (GPIO_MODE_IN | GPIO_PULLUP_DIS | GPIO_F3)

#define led01_enable() \\

#define led01_disable() \\

#define led02_enable() \\

({ writel ((readl(S3C2410_GPCCON) & (~ 0x3000)),S3C2410_GPCCON); \\ writel ((readl(S3C2410_GPCCON) | 0x1000),S3C2410_GPCCON); \\

#define led02_disable() \\

({ writel ((readl(S3C2410_GPCDAT) & (~ 0x40)),S3C2410_GPCDAT); \\ writel ((readl(S3C2410_GPCDAT) | 0x40),S3C2410_GPCDAT); \\ })

#define led03_enable() \\ ({

writel ((readl(S3C2410_GPCCON) & (~ 0xC000)),S3C2410_GPCCON); \\ writel ((readl(S3C2410_GPCDAT) & (~ 0x80)),S3C2410_GPCDAT); \\

writel ((readl(S3C2410_GPCCON) | 0x4000),S3C2410_GPCCON); \\ writel ((readl(S3C2410_GPCDAT) | 0x0),S3C2410_GPCDAT); \\ })

#define led03_disable() \\ ({

writel ((readl(S3C2410_GPCDAT) & (~ 0x80)),S3C2410_GPCDAT); \\ })

writel ((readl(S3C2410_GPCDAT) | 0x80),S3C2410_GPCDAT); \\

writel ((readl(S3C2410_GPCDAT) & (~ 0x40)),S3C2410_GPCDAT); \\

writel ((readl(S3C2410_GPCDAT) | 0x0),S3C2410_GPCDAT);

})

({ writel ((readl(S3C2410_GPCDAT) & (~ 0x20)),S3C2410_GPCDAT); \\

writel ((readl(S3C2410_GPCDAT) | 0x20),S3C2410_GPCDAT); }) ({ writel ((readl(S3C2410_GPCCON) & (~0xc00)),S3C2410_GPCCON); \\

writel ((readl(S3C2410_GPCCON) | 0x400),S3C2410_GPCCON); \\ writel ((readl(S3C2410_GPCDAT) & (~ 0x20)),S3C2410_GPCDAT); \\ writel ((readl(S3C2410_GPCDAT) | 0x0),S3C2410_GPCDAT); } )

IRQ_EINT5

//IRQ_EINT3