现在的位置: 首页 > 综合 > 正文

三星 SMDKC210 开发板的最简单的LED驱动

2012年12月29日 ⁄ 综合 ⁄ 共 2045字 ⁄ 字号 评论关闭

转载请注明出处:http://blog.csdn.net/lihaoweiV   李浩炜的CSDN博客

三星 SMDKC210 开发板上 简单的LED驱动

步骤:

1. 因为LED灯的亮和灭是受GPIO控制的, 从SMDKC210板的schematics图中查出,LED4 对应的GPIO端口是 GPX1_4,这个详细可以看我另一篇LED驱动的文章《I/O
Ports中的GPFCON和GPFDAT寄存器

2. 添加必要的头文件

3. 实现模块的框架,比如init, exit, LICENSE等

4. 写led_on, led_off函数

    4.1 申请GPX1_4端口

    4.2 将GPX1CON[4] 设为OUTPUT, 以上两步这里用一个函数gpio_request_one完成

    4.3 将GPX1DAT[4] 设为 0 (亮)  1(灭)

5. 写Makefile

****************************************** led_test.c **********************************************************************

     

  #include <linux/init.h>
  #include <linux/module.h>
  #include <linux/delay.h>           // 将GPX端口设置数值的时候,需要等待一段时间让输出稳定,故用到mdelay函数
  #include <linux/gpio.h>             // 申请GPIO端口的函数, 三星定义的GPIO端口的地址等

  
  
  static int led_on(void)
  {
         int err;
         err = gpio_request_one(EXYNOS4_GPX1(4), GPIOF_OUT_INIT_HIGH, "GPX1");
         if(err){
                 printk(KERN_ALERT "failed to request GPX1 for led control\n");
                 return err;
         }
         mdelay(100);
 
         gpio_set_value(EXYNOS4_GPX1(4), 0);
         mdelay(100);
         gpio_free(EXYNOS4_GPX1(4));
 
         return 0;
 }
 
 static int led_off(void)
 {
 
         int err;
         err = gpio_request_one(EXYNOS4_GPX1(4), GPIOF_OUT_INIT_HIGH, "GPX1");
         if(err){
                 printk(KERN_ALERT "failed to request GPX1 for led control\n");
                 return err;
         }
         mdelay(100);
 
         gpio_set_value(EXYNOS4_GPX1(4), 1);
         mdelay(100);
         gpio_free(EXYNOS4_GPX1(4));
 
         return 0;
 }
 
 static int led_init(void)
 {
         printk(KERN_ALERT "led is on\n");
         led_on();             //让LED4 亮
         return 0;
 }
 

 static void led_exit(void)

 {

         printk(KERN_ALERT "led is off\n");
         led_off();             //让LED4灭
 }
  
 module_init(led_init);
 module_exit(led_exit);
 
 MODULE_AUTHOR("Alvin Lee");
 MODULE_LICENSE("GPL");
                                                                                                          

****************************************** Makefile **********************************************************************

  obj-m   := led_test.o
  
          KDIR    := /home2/alvinlee/v310_2/android-kernel-samsung-dev
          PWD     := $(shell pwd)
  
  default:
          $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
  
  clean:
          rm -rf *.ko
          rm -rf *.mod.*
          rm -rf .*.cmd
          rm -rf *.o       
                           

抱歉!评论已关闭.