免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 784 | 回复: 0
打印 上一主题 下一主题

FS2410 led_driver example [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-07-25 13:38 |只看该作者 |倒序浏览

                                                                                               
Step 1. led_driver.c
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include


MODULE_LICENSE("Dual BSD/GPL");/* declare the license of the module ,it is necessary */
/* before is some decription of the model,not necessary */
MODULE_AUTHOR("j wei");
MODULE_DESCRIPTION("This is an example of programming driver!");

// GPIO_LED DEVICE MAJOR
#define GPIO_LED_MAJOR    97 //定义设备号
static struct file_operations gpio_ctl_fops={
owner: THIS_MODULE,
};
#define LED1_ON( ) __raw_writel(__raw_readl(S3C2410_GPFDAT) & (~0x10), S3C2410_GPFDAT)      
#define LED2_ON( ) __raw_writel(__raw_readl(S3C2410_GPFDAT) & (~0x20), S3C2410_GPFDAT)   
#define LED3_ON( ) __raw_writel(__raw_readl(S3C2410_GPFDAT) & (~0x40), S3C2410_GPFDAT)   
#define LED4_ON( ) __raw_writel(__raw_readl(S3C2410_GPFDAT) & (~0x80), S3C2410_GPFDAT)  
#define LED1_OFF( ) __raw_writel(__raw_readl(S3C2410_GPFDAT) | 0x10, S3C2410_GPFDAT)  
#define LED2_OFF( ) __raw_writel(__raw_readl(S3C2410_GPFDAT) | 0x20, S3C2410_GPFDAT)  
#define LED3_OFF( ) __raw_writel(__raw_readl(S3C2410_GPFDAT) | 0x40, S3C2410_GPFDAT)   
#define LED4_OFF( ) __raw_writel(__raw_readl(S3C2410_GPFDAT) | 0x80, S3C2410_GPFDAT)
static void LedSet ( unsigned char led )
{
unsigned char LedStatus;
LedStatus = led;
if ( LedStatus & 1)
   LED1_ON();
else
   LED1_OFF();
if ( LedStatus & 2)
   LED2_ON();
else
   LED2_OFF();
if ( LedStatus & 4)
   LED3_ON();
else
   LED3_OFF();
if ( LedStatus & 8)
   LED4_ON();
else
   LED4_OFF();
}
static void LedDisp ( void )
{
LedSet(0x08);
mdelay(1000);
LedSet(0x04);
mdelay(1000);
LedSet(0x02);
mdelay(1000);
LedSet(0x01) ;
mdelay(1000);
LedSet(0x00);
mdelay(1000);
LedSet(0x01) ;
mdelay(1000);
LedSet(0x02);
mdelay(1000);
LedSet(0x04);
mdelay(1000);
LedSet(0x08);
mdelay(1000);
LedSet(0x00);
mdelay(1000);
}
static int __init gpio_init(void)
{
int err=0;
int arg=5;
__raw_writel(0x5500, S3C2410_GPFCON); //GPFCON = 0x5500;
   __raw_writel(0xff, S3C2410_GPFUP);   //GPFUP = 0xff ;
printk("gpio_init\n");
err=register_chrdev(GPIO_LED_MAJOR,"gpio",&gpio_ctl_fops);
if(errStep 2. Makefile
obj-m := led_driver.oKERNELDIR ?= /usr/src/kernels/linux-2.6.8.1-zzmPWD    := $(shell pwd)all:    $(MAKE) -C $(KERNELDIR) M=$(PWD)clean:    rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions
step 3. make、loading board、insmod (see attachments)
you will find the LED circularly turn on... Cheer!





               
               
               
               
               
               
               
               
               
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/74310/showart_1091878.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP