TinySCLinux下LED灯驱动移植过程.doc
文本预览下载声明
UT-S3C6410 ARM11 Linux 下的LED驱动
一 、实验环境
????操作系统:
交叉编译环境:arm-Linux-gcc 或以上,?6410板子内核源码路径在:
硬件平台S3C6410开发板(其他类型的开发板也可以注意配置GPIO)二 、实验原理
????控制LED是最简单的一件事情,就像学C语言时候写的“hello world”程序一样,是一个入门的程序。
????首先来了解一下相关的硬件知识:
??????????????????????????????????????????UT-S3C6410? LED原理图????
??????????????????????????????????????? ??????UT-S3C6410? LED外部引脚图
?
从上面的原理图可以得知,LED与CPU引脚的连接方法如下,电平点亮。
?????LED1?-GPM0
?????LED2 -GPM1
?????LED3?-GPM2
?????LED4?-GPM3
????
从数据手册可以找到相应的控制方法。这里我们以LED1为例,介绍一下LED1的操作方法,其他的类似,请大家自行分析。
通过上面可以得知,需要先将GPM0设置为输出方式。将寄存器。
然后将GPMDAT寄存器的第0位置灯亮,置灯。
三、实验步骤
1、编写驱动程序
mini6410_leds.c#include linux/miscdevice.h
#include linux/delay.h
#include asm/irq.h
//#include mach/regs-gpio.h
#include mach/hardware.h
#include linux/kernel.h
#include linux/module.h
#include linux/init.h
#include linux/mm.h
#include linux/fs.h
#include linux/types.h
#include linux/delay.h
#include linux/moduleparam.h
#include linux/slab.h
#include linux/errno.h
#include linux/ioctl.h
#include linux/cdev.h
#include linux/string.h
#include linux/list.h
#include linux/pci.h
#include asm/uaccess.h
#include asm/atomic.h
#include asm/unistd.h
#include mach/map.h
#include mach/regs-clock.h
#include mach/regs-gpio.h
#include plat/gpio-cfg.h
#include mach/gpio-bank-e.h
#include mach/gpio-bank-k.h
#define DEVICE_NAME leds
static long sbc2440_leds_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
{
switch(cmd) {
unsigned tmp;
case 0:
case 1:
if (arg 4) {
return -EINVAL;
}
tmp = readl(S3C64XX_GPKDAT);
tmp = ~(1 (4 + arg));
tmp |= ( (!cmd) (4 + arg) );
writel(tmp, S3C64XX_GPKDAT);
//printk (DEVICE_NAME: %d %d\n, arg, cmd);
return 0;
default:
return -EINVAL;
}
}
static struct file_operations dev_fops = {
.owner = THIS_MODULE,
.unlocked_ioctl = sbc2440_leds_ioctl,
};
static struct miscdevice misc = {
.minor = MISC_DYNAMIC_MINOR,
.name = DEVICE_NAME,
.fops = dev_fops,
};
static int __init dev_init(void)
{
int ret;
{
unsigned tmp;
tmp = readl(S3C64XX_GPKCON);
tmp = (tmp ~(0xffffU16))|(0x1111U1
显示全部