1. 程式人生 > >linux 讓led閃爍起來,by timer,device tree

linux 讓led閃爍起來,by timer,device tree

[email protected]{
compatible="cma9,jaguar_led";
led-gpios=<&gpio_cs 0 1>;
cma9,default-trigger = "timer";
status = "okay";
};

本章主要講述非標準(相對於PC而言)硬體介面程式設計。像通常的串列埠和網口,都是標準介面,有通用的程式設計規範,而這章講述的如LED、GPIO、SPI和I2C這樣的介面,在嵌入式系統中非常普通,由於這些介面的特殊性,沒有統一的程式設計規範。而在實際應用中,往往又不可缺少,所以這章的內容很重要。

本章的內容與具體的開發平臺結合比較緊密,如果在非對應的平臺上使用這些範例,可能需要根據實際情況進行修改和調整。

15.1 點亮一個LED燈

本節介紹如何使用命令列或C程式來控制LED燈點亮或熄滅。開發板上的可控LED燈通常都是一端接高電平或GND,另一端接GPIO。通過操作GPIO來控制其點亮和熄滅。


圖15.1 LED硬體連線示意圖

如圖15.1所示,兩個LED是由發光二極體組成,一端接高電平,另一端若接入高電平,則二極體不導通,LED不會發光。另一端若接入低電平,則二極體導通,LED發光。高低電平一般由GPIO輸出。

15.1.1 LED的操作介面

LED操作介面位於/sys/class/leds目錄下。此目錄下包含了關於LED操作的目錄,如下所示:

# ls/sys/class/leds/

beep led-err led-run

其中led-err目錄是ERR LED的操作介面,led-run目錄是RUN LED操作介面。以RUN LED為例,進入led-run目錄,該目錄的內容為:

# ls/sys/class/leds/led-run/

brightness max_brightness subsystem uevent

device power trigger

各個檔案作用介紹如表15.1所示。

表15.1 LED屬性檔案用途

檔名

作用

brightness

用於控制LED亮滅(需要將LED燈設定為使用者控制)

Subsystem

符號連結,指向父目錄。

trigger

寫入“none”可以將指示燈設定為使用者控制

寫入“heartbeat”可以將指示燈設定為心跳燈

寫入“nand-disk”可以將指示燈設定為NAND Flash讀寫燈

power

裝置供電方面的相關資訊

15.1.2 LED控制

以led_run燈為例,點亮命令如下:

# echo none > /sys/class/leds/led-run/trigger #將LED RUN設定為使用者控制

#echo 1 > /sys/class/leds/led-run/brightness #控制 LED 點亮

#echo 0 > /sys/class/leds/led-run/brightness #控制 LED 熄滅

15.1.3 在C程式中操作LED

C程式中操作LED,首先需要設定trigger屬性。如下程式碼片段,將LED燈設定為使用者控制方式:

#define TRIGGER_NONE "none"

int fd = open(path, O_RDWR); //path為trigger路徑

...

ret = write(fd, TRIGGER_NONE, strlen(TRIGGER_NONE));

...

然後操作brightness屬性,設定LED點亮或熄滅:

char data[2]; int fd;

...

fd = open(path, O_WRONLY); //path為brightness路徑

data[0] = '0';

ret = write(fd, data, 1); //熄滅LED

...

下面給出的程式清單15.1,首先設定LED trigger屬性為“none”,然後設定brightness屬性交替為0和1。實現了LED每隔1s點亮一次。

程式清單15.1 LED操作

#include <stdio.h>

#include <sys/types.h>

#include <sys/stat.h>

#include <fcntl.h>

#include <string.h>

#define TRIGGER"trigger"

#define LED_PATH "/sys/class/leds/"

#define LED_STATUS"brightness"

#define TRIGGER_NONE"none"

int main(int argc,char **argv)

{

char path[20],data[2];

int fd, ret, flag;

if(argv[1] == NULL) {

printf("usage : ./led led_run");

return 0;

}

strcpy(path, LED_PATH);

strcat(path, argv[1]);

strcat(path, "/" TRIGGER);

fd = open(path, O_RDWR);

if(fd < 0) {

perror("open");

return -1;

}

ret = write(fd, TRIGGER_NONE, strlen(TRIGGER_NONE));

if(ret < 0) {

perror("write");

return -1;

}

close(fd);

strcpy(path, LED_PATH);

strcat(path, argv[1]);

strcat(path, "/" LED_STATUS);

fd = open(path, O_WRONLY);

if(fd < 0) {

perror("open");

return -1;

}

for(;;)

{

data[0] = flag ? '0': '1';

ret = write(fd, data, 1);

if(ret < 0) {

perror("write");

return -1;

}

flag = !flag;

sleep(1);

}

return 0;

}

my code : #include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>
#define DEVICENAME "/sys/class/leds/jaguar_led/trigger"
#define TRIGGER_NONE "none"
int main(int argc, char **argv)
{
int ret;
int fd;
const char buffer[10]={0x31,0x30};
char path[100];
//char i=0;
//int ret =0;
strcpy(path,DEVICENAME);
printf("Path is %s \n",path);
fd = open(path,O_RDWR);
ret = write(fd,TRIGGER_NONE,strlen(TRIGGER_NONE));
printf("ret is %d\n",ret);
close(fd);
return 0;

}

echo timer > trigger,echo none > trigger
   echo 500 > delay_on

相關推薦

linux led閃爍起來by timerdevice tree

[email protected]{compatible="cma9,jaguar_led";led-gpios=<&gpio_cs 0 1>;cma9,default-trigger = "timer";status = "okay";};

[MSP430DriverLib-3]使用Timer_ALED閃爍

cloc void b- put output period div 清除 開始 使用Timer_A。代碼如下: #include "./DriverLib/driverlib.h" int main() { WDT_A_hold( WDT_A_BASE );

[MSP430DriverLib-2]使用延時LED閃爍

gpio class 簡單 hold won out lib aso include      簡單地使用__delay_cycles來達到延時效果。 #include "./DriverLib/driverlib.h" int m

[dpdk] TSC HPET Timer Event TimerRDTSCP

chm end power cpu ont ctu tor 可能 映射 關於dpdk timer跨越CPU core調度的準確性問題 首先dpdk的timer接口裏邊使用 cpu cycle來比較時間。根據之前的內容 [dpdk] dpdk --lcores參數 當一個E

插上翅膀Excel飛起來——xlwings(一)

圖片 pos 取數據 數組 並保存 () 讀取 pda 取數 python操作Excel的模塊,網上提到的模塊大致有:xlwings、xlrd、xlwt、openpyxl、pyxll等,他們提供的功能歸納起來有兩種:一、用python讀寫Excel文件,實際上就是讀寫有

插上翅膀Excel飛起來——xlwings(四)

列表 gin 修改名稱 udfs imp 前言 百度網盤 解決 而不是 前言 當年看《別怕,Excel VBA其實很簡單》相見恨晚,看了第一版電子版之後,買了紙質版,然後將其送人。而後,發現出了第二版,買之收藏。之後,發現Python這一編程語言,簡直是逆天,業余非程

有人想汽車無人化但有人想汽車飛起來

常用 不同的 規範化 lin 難題 style 分享 耗時 -h 未來的出行方式,應該是生活幻想中空間最廣闊的一種。有人認為未來出行全靠一輛輛無主的自動駕駛汽車,有人認為未來可以通過粒子傳送實現瞬間移動……既然是幻想,那麽多離譜都不過分,比如說我就認為巨型的鋼鐵蜘蛛才是最適

插上翅膀Excel飛起來——xlwings(二)

數組 百度 激活 true sting com 修改 file href 常用函數和方法 Book 工作簿常用的apiwb=xw.books[‘工作簿名稱‘] wb.activate()激活為當前工作簿 wb.fullname 返回工作簿的絕對路徑 wb.name 返

必看|Linux運維中必用的工具你輕松10倍

1.0 接收 RoCE linux系統中 小天 刻度尺 捕獲 https 網絡流量 A:“A辦公區的網絡不太好咦”   B:“今天C區這邊網速好快呀”    C:“上傳這麽快,咋下載這麽慢呢?”    以上場景,作為Linux運維剛入門的同學來講,這些問題應該會經常

基礎知識漫談(3) 組合基礎知識設計遊戲框架 如何畫面動起來

如何讓畫面動起來? 都知道動畫的原理,想想看跑馬燈,在任意時刻把跑馬燈按停,面對眼睛的那附圖,它叫做幀(Frame)。 幀,就是一串兒連貫動畫裡的單個截面。 玩兒遊戲的人知道,要達到基本流暢的水準,30fps(frame per second)就夠了,達到毫無察覺的流暢,可能要到60fp

這樣玩雲函式路由你看起來很高階

歡迎大家前往騰訊雲+社群,獲取更多騰訊海量技術實踐乾貨哦~ 本文由李成熙heyli發表於雲+社群專欄 概念回顧 在掘金開發者大會上,在推薦實踐那裡,我有提到一種雲函式的用法,我們可以將相同的一些操作,比如使用者管理、支付邏輯,按照業務的相似性,歸類到一個雲函式裡,這樣比較方便管理、排查問題以及

這樣玩雲函數路由你看起來很高級

開發者 實戰 技術分享 ctr login 發布 以及 new t github 歡迎大家前往騰訊雲+社區,獲取更多騰訊海量技術實踐幹貨哦~ 本文由李成熙heyli發表於雲+社區專欄 概念回顧 在掘金開發者大會上,在推薦實踐那裏,我有提到一種雲函數的用法,我們可以將相同

【小白看的Java教程】第十四章陣列動起來

基本操作(重點) int[] nums = new int[]{1,3,5,7}; + 獲取陣列長度,語法:int size =  陣列名.length; int size = nums.length; -> 輸出結果4 + 獲取元素值,

JVM堆記憶體引數優化效能飛起來

JVM堆記憶體引數優化,讓效能飛起來 堆記憶體是Java程序的重要組成部分,幾乎所有與應用相關的記憶體空間都和堆有關。現在主要介紹與堆記憶體相關的引數設定,這些引數對Java虛擬機器中非常重要的,也是對程式效能有著重要的影響。讓你徹底脫離OOM記憶體溢位等等帶來

python自定義字典的擴充套件類字典操作起來更容易

python自定義的一個字典擴充套件類,可以讓字典操作起來更簡單, 比如: 原來需要這樣用:dic['website'] = 'sharejs.com' 有了這個類,你可以這樣用:dic.websites = 'sharejs.com' 是不是更簡單。 類定義如下 clas

10大最適合程式設計的字型推薦下載程式碼看起來更美更舒服!

現在有事沒事就喜歡寫寫程式碼的人越來越多了,對於成天盯著螢幕工作的開發人員來說,程式設計程式碼可能是每天見得最多的東西了。可是絕大部分人都一直使用編輯器預設的字型,其實,換一套適合自己的程式設計字型不僅能讓程式碼看得更舒服,甚至還能提高工作效率的!         如果你有

css怎麼div動起來實現動畫效果一直在動

<!DOCTYPE html> <html> <head> <style> div { width:100px; height:100px; background:red; position:relative; anim

一個代替linux的fetion的軟體起來挺方便的而已可以在控制下就能使用。

 以前一直用pidgin來寫簡訊,最好的是可以把資訊往自己手機上發,能將資訊發到手機上,呵呵。後來因為移動的升級,就無法登陸了,按照http://www.linuxsir.org/bbs/thread320802.html上的方法做過了,就是不行,我的版本是pidgin2.4

create-react-app原始碼解析(一)npm run start如何專案跑起來

    小編花了點時間,大致弄懂npm run start如何執行專案的原理了,現在給大家分享下心得!npm run start是通過node跑js檔案,從而專案得以執行,小編通過npm run eject拿到了所有配置,然後通過解析原始碼,明白瞭如果通過webpack等讓專

假如我們等不到對的人就趁孤單自己優秀起來。單身是最好的升值期

01為什麼單身?因為想變成更好的自己啊 曾經發起過一個話題“你單身嗎?單身多久了?在你單身的這段時間裡,最大的改變是什麼?”收到了成千上百條回覆。 本來我以為,絕大多數人會覺得單身是件悲傷的事情,會因為單身直接或間接地給自己帶去很多負面情緒,覺得自己孤獨寂寞,心無所依。 但