单片机学习小组
直播中

京五环以外

9年用户 3094经验值
擅长:EMC/EMI设计
私信 关注

NUC972如何添加LED驱动leds_gpio?

LED驱动的方式有多种,可以自定义驱动,然后通过/dev/myled 设备文件,来控制led。

也可以通过内核 led驱动架构来控制,通过/sys/leds/myled/ 里面的各种文件来控制。内核还提供了一个非常方便的方法,就是用过leds_gpio驱动来控制LED. 我们只需要配置相关引脚就新了。

步骤如下:

1.添加配置引脚

修改 dev.c 文件   在内核目录/arch/arm/mach-nuc970/ 中。

添加头文件


#include  // add by simon for leds_gpio driver

添加引脚配置

#if defined(CONFIG_LEDS_GPIO)
//================leds_gpio add by simon =============
static struct gpio_led gpio_leds[] = {  
    {  
        .name = "red",  
        .gpio = NUC970_PH12,
        .default_state = LEDS_GPIO_DEFSTATE_ON, // 默认LED亮  
        .active_low = 0, // 低电平亮  
        .default_trigger = "timer", // 触发器  
    },  
};  

static struct gpio_led_platform_data gpio_led_info = {  
     .leds          = gpio_leds,  
     .num_leds     = ARRAY_SIZE(gpio_leds),  
};

static struct platform_device leds_gpio = {  
    .name = "leds-gpio",  
    .id = -1,  
    .dev = {  
        .platform_data = &gpio_led_info,  
        //.release = platformdev_release,  
    },  
};  
//=====================================================
#endif




2.添加设备文件

把 leds_gpio 设备添加到 static struct platform_device *nuc970_public_dev[] __initdata 这个设备数组中。 系统启动时会自动加载设备。

static struct platform_device *nuc970_public_dev[] __initdata = {

...

#if defined(CONFIG_LEDS_GPIO)
    &leds_gpio,
#endif

...

};



回帖(1)

一曲作罢

2023-12-29 11:19:11
2.在平台设备中添加leds_gpio设备节点 设备节点定义需要在平台设备中进行添加,后面还需要在设备树中进行配置。在内核目录/arch/arm/mach-nuc970/board-nuc970.c文件中添加:  static struct resource leds_gpio_resource[] = {{IORESOURCE_MEM, 0xE7500400, 0x0010},};  static struct platform_device leds_gpio_device = {t.name     t= "leds-gpio",t.id     t= -1,t.resource   t= leds_gpio_resource,t.num_resources = ARRAY_SIZE(leds_gpio_resource),t}; int __init nuc970_init(void) { .... platform_device_register(    leds_gpio_device); }3.在设备树中添加leds_gpio节点接下来需要在设备树中进行相应的配置,具体如下:leds_gpio:leds-gpio {   tcompatible    t= "gpio-leds";   tleds         t=              {          ttcompatible   t= "gpio-led";          ttlabel            t= "nuc972-led";          ttgpios          t        t=               < pnm_gpio 12 4>;          t};};其中,pnm_gpio 12 4 对应的是Nuc972芯片的GPIOC12号引脚。4.编译内核并烧写至Nuc970开发板   参照NUC970开发板上的官方文档进行烧写即可。 5.测试通过/sys/class/leds/myled/可以进行led的操作了。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分