免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
Linux下AM335X的GPIO控制

作者:chenzhufly QQ36886052 ( 轉(zhuǎn)載請(qǐng)注明出處)
一路走來,熟悉硬件系統(tǒng),搭建軟件開發(fā)環(huán)境,編譯Linux系統(tǒng)等等,現(xiàn)在也該到對(duì)硬件做一些事情了,這是我這幾天的研究心得,與君共享。

1. GPIOchar型驅(qū)動(dòng),這里主要就是點(diǎn)個(gè)燈,感受一下驅(qū)動(dòng)的設(shè)計(jì)和硬件的控制驅(qū)動(dòng)程序:

復(fù)制內(nèi)容到剪貼板代碼:#include <linux/init.h>
#include <linux/module.h>
#include <linux/leds.h>
#include <linux/io.h>

#include <linux/semaphore.h>
#include <linux/kernel.h>
#include <linux/cdev.h>

#include <linux/types.h>
#include <linux/fs.h>
#include <mach/gpio.h>
#include <plat/mux.h>

#include <linux/gpio.h>

/*******************************************/
#define NAME \"leds\" 
#define GPIO_TO_PIN(bank, gpio) (32 * (bank) + (gpio))

static int major =251;//定義主設(shè)備號(hào) 
/*******************************************/
void led_on(void)

gpio_set_value(GPIO_TO_PIN(1,22), 1);
}

void led_off(void)

gpio_set_value(GPIO_TO_PIN(1,22), 0);
}

void led_init(void)

int result;
/* Allocating GPIOs and setting direction */
result = gpio_request(GPIO_TO_PIN(1,22), \"Leds\");//usr1
if (result != 0)
printk(\"gpio_request(1_22) failed!\n\");
result = gpio_direction_output(GPIO_TO_PIN(1,22), 1);
if (result != 0)
printk(\"gpio_direction(1_22) failed!\n\");

}

struct light_dev
{
struct cdev cdev;
unsigned char value;
};

struct light_dev *light_devp;

MODULE_AUTHOR(\"chenzhufly\");
MODULE_LICENSE(\"Dual BSD/GPL\");

// 打開和關(guān)閉函數(shù)
int light_open(struct inode *inode,struct file *filp)
{
struct light_dev *dev;

// 獲得設(shè)備結(jié)構(gòu)體指針
dev = container_of(inode->i_cdev,struct light_dev,cdev);
// 讓設(shè)備結(jié)構(gòu)體作為設(shè)備的私有信息
filp->private_data = dev;

return 0;
}

int light_release(struct inode *inode,struct file *filp)
{
return 0; 
}


// ioctl
int light_ioctl(struct file *filp,unsigned int cmd,
unsigned long arg)
{
struct light_dev *dev = filp->private_data;

switch(cmd)
{
case 0:
dev->value = 0;
led_off(); 
break;

case 1:
dev->value = 1;
led_on();
break;

default:

return -ENOTTY;
// break;
}

return 0;


struct file_operations light_fops = 
{
.owner = THIS_MODULE,
.unlocked_ioctl = light_ioctl,
.open = light_open,
.release = light_release,
};
// 模塊加載函數(shù)
int light_init(void)
{
int ret;
led_init();
printk(KERN_ALERT \"led modules is install\n\"); 
ret=register_chrdev(major,NAME,&light_fops); 
if(ret<0) 

printk(\"unable to register myled driver!\n\"); 
return ret; 

return 0; 

}

// 模塊卸載函數(shù)
void light_cleanup(void)
{
unregister_chrdev(major,NAME); 
printk(\"Goodbye,cruel world!\n\"); 
}

module_init(light_init);
module_exit(light_cleanup);


應(yīng)用程序:

復(fù)制內(nèi)容到剪貼板代碼:#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <linux/input.h>
#include <unistd.h>
#include <sys/ioctl.h>

int main(int argc, char * argv)
{
int i, n, fd;

fd = open(\"/dev/leds\", O_RDWR);
if (fd < 0)
{
printf(\"can't open /dev/leds!\n\");
exit(1);
}

while (1) {
ioctl(fd, 1, 1);
sleep(1);

ioctl(fd, 0, 1);
sleep(1);
}

close(fd);

return 0;
}


Makefile文件:

復(fù)制內(nèi)容到剪貼板代碼:ARCH=arm
CROSS_COMPILE=/home/chenzhufly/beaglebone/linux-devkit/bin/arm-arago-linux-gnueabi-
obj-m := leds.o
KDIR := /home/chenzhufly/beaglebone/board-support/linux-3.1.0-psp04.06.00.03.sdk
PWD := $(shell pwd)
default:
make -C $(KDIR) M=$(PWD) ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE) modules
app: leds_test.c
$(CROSS_COMPILE)gcc -o leds_test leds_test.c
clean:
$(MAKE) -C $(KDIR) M=$(PWD) clean


leds.sh腳本

復(fù)制內(nèi)容到剪貼板代碼:insmod leds.ko
mknod /dev/leds c 251 0
./leds_test


2. 使用echo命令,這個(gè)我在前面也說過

復(fù)制內(nèi)容到剪貼板代碼:點(diǎn)亮usr1
root@beaglebone:~# echo 1 >
/sys/class/leds/beaglebone::usr1/brightness

關(guān)閉usr1
root@beaglebone:~# echo 0 > /sys/class/leds/beaglebone::usr1/brightness


3. 做個(gè)應(yīng)用程序?qū)崿F(xiàn)流水燈功能吧

復(fù)制內(nèi)容到剪貼板代碼:#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/ioctl.h>
#include <fcntl.h> 
#define LED1 \"/sys/class/leds/beaglebone::usr1/brightness\" // usr1 led
#define LED2 \"/sys/class/leds/beaglebone::usr2/brightness\" // usr2 led
#define LED3 \"/sys/class/leds/beaglebone::usr3/brightness\" // usr3 led

int main(void)
{
int f_led1 = open(LED1, O_RDWR);
int f_led2 = open(LED2, O_RDWR);
int f_led3 = open(LED3, O_RDWR);

unsigned char dat1, dat2, dat3;
unsigned char i = 0;

if (f_led1 < 0)

printf(\"error in open %s\",LED1);
return -1;

if (f_led2 < 0)
{
printf(\"error in open %s\",LED2);
return -1;

if (f_led3 < 0) 
{
printf(\"error in open %s\",LED3);
return -1;

//add 10 times
for(i=1; i<30; i++)
{
dat1 = ((i%3) == 1) ? '1' : '0';
dat2 = ((i%3) == 2) ? '1' : '0';
dat3 = ((i%3) == 0) ? '1' : '0';
write(f_led1, &dat1, sizeof(dat1));
write(f_led2, &dat2, sizeof(dat2));
write(f_led3, &dat3, sizeof(dat3));
usleep(300000);

// all the bright
{
dat1 = '1';
dat2 = '1';
dat3 = '1';
write(f_led1, &dat1, sizeof(dat1));
write(f_led2, &dat2, sizeof(dat2));
write(f_led3, &dat3, sizeof(dat3));

}
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
LED子系統(tǒng)中的硬件驅(qū)動(dòng)層
字符設(shè)備驅(qū)動(dòng)之LED-平臺(tái)設(shè)備驅(qū)動(dòng)(platform設(shè)備驅(qū)動(dòng))
led燈驅(qū)動(dòng)測(cè)試
linux設(shè)備驅(qū)動(dòng)之led子系統(tǒng)<一>
使用input輸入子系統(tǒng)實(shí)現(xiàn)對(duì)tiny6410LED燈的控制
linux下 nm 命令
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服