ARM40-A5应用程序——ledlike

ARM40-A5应用程序——ledlike

2019.3.2
版权声明:本文为博主原创文章,允许转载。

  Linux系统将控制LED灯的这部分功能整合起来,设计成了一个标准的LED子系统,对LED子系统的操作在shell环境中就能完成。
  由于蜂鸣器、继电器、用作输出的gpio、看门狗喂狗信号等都类似于LED,因此我们将此类设备称为ledlike。
  我们结合ARM40-A5看一下操作ledlike设备(蜂鸣器)的实例:

一、生成 /sys/class/leds/buzz

1.1、使用shell命令生成 /sys/class/leds/buzz

  ARM40-A5的PC31脚接蜂鸣器电路,我们操作蜂鸣器来了解LED子系统的用法。
在这里插入图片描述
  首先要生成 /sys/class/leds/buzz,未生成该文件前,/sys/class/leds/的内容可能如下:

root@ARM40:~# ls /sys/class/leds
heartbeat  vled    wdt

  生成 /sys/class/leds/buzz 后,/sys/class/leds/ 的内容如下:

root@ARM40:~# ls /sys/class/leds
buzz	heartbeat  vled    wdt

  在shell中生成/sys/class/leds/buzz 及类似ledlike文件的方法为:

echo buzz 95 > /sys/class/leds/vled/new_device

① buzz为新生成的ledlike(蜂鸣器)设备的名称,注意该名称不能与已经存在的ledlike设备的名称相同
② 该名称不能超过20个字符
③ 95为该ledlike设备使用的gpio_num,对应关系为:
· PA0-PA31   对应的gpio_num为  (0-31)
· PB0-PB31  对应的gpio_num为  (0-31)+32
· PC0-PC31  对应的gpio_num为  (0-31)+64
· PD0-PD31  对应的gpio_num为  (0-31)+96
· PE0-PE31  对应的gpio_num为  (0-31)+128
  注意gpio_num不能重复使用。

  若要撤销/sys/class/leds/buzz,重启系统即可。

1.2、上电即生成 /sys/class/leds/buzz

  若希望系统上电后,自动生成 /sys/class/leds/buzz,需要两个文件:

/etc/init.d/S01ledlike
/opt/user/user1ledlike.sh
    并且:
chmod 755 /etc/init.d/S01ledlike
chmod 755 /opt/user/user1ledlike.sh

  系统启动后会运行/etc/init.d/S01ledlike,在其中会调用/opt/user/user1ledlike.sh
  /etc/init.d/S01ledlike的部分内容为:

#!/bin/sh

set -e

start()
{
        /opt/user/user1ledlike.sh &
}

case "$1" in
  start)
        start
  ;;
  stop)
  ;;
  *)
  ;;
esac

# User program

  /etc/init.d/S01ledlike的部分内容为:

#!/bin/sh
set -e
#PE6=134, use as heartbeat(LED), it is native
#PD30=126, use as wdt(watchdog), it is native
#

echo "Starting ledlike..."
#PC31=95,use as buzz
echo buzz 95 > /sys/class/leds/vled/new_device
#PD16=112,use as stat
#echo stat 112 > /sys/class/leds/vled/new_device
#echo heartbeat > /sys/class/leds/stat/trigger

二、操作/sys/class/leds/buzz

  生成 /sys/class/leds/buzz 后,我们可以看到如下文件:

root@ARM40:~# ls /sys/class/leds/buzz/
brightness      max_brightness  subsystem       uevent
device          power           trigger
root@ARM40:~# cat /sys/class/leds/buzz/trigger          		#trigger支持的类型
[none] nand-disk mmc0 timer heartbeat gpio
root@ARM40:~# echo 1 > /sys/class/leds/buzz/brightness     		#PC31输出高电平,蜂鸣器长响
root@ARM40:~# echo 0 > /sys/class/leds/buzz/brightness     		#PC31输出低电平,蜂鸣器不响
root@ARM40:~# echo heartbeat > /sys/class/leds/buzz/trigger     #蜂鸣器"心跳"响
root@ARM40:~# echo timer > /sys/class/leds/buzz/trigger     	#蜂鸣器嘀...嘀...响
root@ARM40:~# ls /sys/class/leds/buzz/    	#蜂鸣器嘀...嘀...响时,可以设置响和不响的时间
brightness      device          subsystem
delay_off       max_brightness  trigger
delay_on        power           uevent
root@ARM40:~# cat /sys/class/leds/buzz/delay_on
500    //500ms
root@ARM40:~# cat /sys/class/leds/buzz/delay_off
500    //500ms
root@ARM40:~# echo 200 > /sys/class/leds/buzz/delay_on    	#减少蜂鸣器响的时间

  改为 timer后,PC31的波形为:(高电平时蜂鸣器响)
在这里插入图片描述

三、C语言操作ledlike

  参考《ARM40-A5应用程序——GPIO输出高低电平》。

  

参考文章:

LED configuration /etc/config/system
https://openwrt.org/docs/guide-user/base-system/led_configuration
BeagleBone Black板第四课:简单LED控制实验
http://blog.csdn.net/luyejie8888/article/details/38361525
How_to_use_GPIO_signals
http://blog.csdn.net/drivermonkey/article/details/20132241?utm_source=tuicool
内核中led触发器实例
https://blog.csdn.net/yuanlulu/article/details/6438847
GPIO应用于Linux LED子系统和输入事件侦测
https://blog.csdn.net/cdemtronix/article/details/82021359
荟聚计划:共商 共建 共享 Grant

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值