亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ekii-led.c

?? 這是arm9上面的led在linux下的驅動程序,可以編譯下載到linux中
?? C
字號:
/*
* linux/deriver/led/ekii-led.c
* led driver for Embest EduKit II
* Copyright (C) 2005 Embest <www.embedinfo.com>
*/
#include <linux/module.h>
#include <linux/init.h>
#include <linux/sched.h>
#include <linux/kernel.h>
#include <linux/fs.h>
#include <linux/errno.h>	// error codes
#include <linux/types.h>	// size_t
#include <linux/delay.h>	// mdelay
#include <asm/uaccess.h>
#include <asm/arch-S3C44B0X/s3c44b0x.h>


#undef DEBUG
#ifdef	DEBUG
#define TRACE(str, args...)	printk("led: " str, ## args)
#else
#define TRACE(str, args...)
#endif


#define LED_MAJOR	60
#define LED_DEVNAME "led"

#define GPB_MASK	(3<<4)
#define GPF_MASK	(3<<3)
#define GET_DATA(b, f) ((u8)( ((~b&0x20)>>5) | ((~b&0x10)>>2) | ((~f&0x08)>>2) | ((~f&0x10)>>1) ))
#define SET_DATA(t, b, f) ( b = (((~t&0x01)<<5) | ((~t&0x04)<<2)), f = (((~t&0x02)<<2) | ((~t&0x08)<<1)) )

#define LED_LOCK(u) down(&u->lock);
#define LED_UNLOCK(u) up(&u->lock);

struct unit {
	struct semaphore lock;
	u32 *PCONB;		/* PCONB register */
	u32 *PDATB;		/* PDATB register */
	u32 *PCONF;		/* PCONF register */
	u32 *PDATF;		/* PDATF register */
	u32 *PUPF;		/* PUPF register */
	u32 b;			/* store LED 1 and LED 2 value */
	u32 f;			/* store LED 3 and LED 4 value */
};

static char *version = "Embest Edukit-II led driver version 1.0 (2005-04-18) <www.embedinfo.com>\n";

static struct unit led_unit = {
	.PCONB		= (u32 *)S3C44B0X_PCONB,
	.PDATB		= (u32 *)S3C44B0X_PDATB,
	.PCONF		= (u32 *)S3C44B0X_PCONF,
	.PDATF		= (u32 *)S3C44B0X_PDATF,
	.PUPF		= (u32 *)S3C44B0X_PUPF,
};


static void led_set_value(struct unit *unit, u8 val)
{
	u32 temp;

	SET_DATA(val, unit->b, unit->f);
	
	temp = *unit->PDATB;
	temp &= ~GPB_MASK;
	temp |= unit->b;
	*unit->PDATB = temp;
	
	temp = *unit->PDATF;
	temp &= ~GPF_MASK;
	temp |= unit->f;
	*unit->PDATF = temp;
}


static u8 led_get_value(struct unit *unit)
{
	u8 temp = GET_DATA(unit->b, unit->f);

	return temp;
}


static int led_open(struct inode *inode, struct file *file)
{
	TRACE("open\n");
	file->private_data = &led_unit;
	MOD_INC_USE_COUNT;

	return 0;
}


static int led_release(struct inode *inode, struct file *file)
{
	TRACE("release\n");
	MOD_DEC_USE_COUNT;

	return 0;
}


static ssize_t led_read(struct file *file, char *buf, size_t count, loff_t *offset)
{
	u8 temp;
	int ret;
	struct unit *unit = (struct unit *)file->private_data;

	TRACE("read\n");
	if(count > 1)
		count = 1;
	LED_LOCK(unit);
	temp = led_get_value(unit);
	ret = copy_to_user(buf, &temp, count) ? -EFAULT : count;
	LED_UNLOCK(unit);

	return ret;
}


static ssize_t led_write(struct file *file, const char *buf, size_t count, loff_t *offset)
{
	u8 temp;
	int ret;
	struct unit *unit = (struct unit *)file->private_data;

	TRACE("write\n");
	if(count > 1)
		count = 1;
	LED_LOCK(unit);
	ret = copy_from_user(&temp, buf, count) ? -EFAULT : count;
	if(ret)
		led_set_value(unit, temp);
	LED_UNLOCK(unit);

	return ret;
}


static struct file_operations led_ops = {
	owner:		THIS_MODULE,
	read:		led_read,
	write:		led_write,
	open:		led_open,
	release:	led_release,
};


/*
* led device init
*/
static void __init led_init(struct unit *unit)
{
	u32 temp;

	/* init device lock */
	init_MUTEX(&unit->lock);

	/* init io port */
	temp = *unit->PCONB;
	temp &= ~(3<<4);
	*unit->PCONB = temp;

	temp = *unit->PCONF;
	temp &= ~((3<<8) | (3<<6));
	temp |= ((1<<8) | (1<<6));
	*unit->PCONF = temp;

	temp = *unit->PUPF;
	temp |= (3<<3);
	*unit->PUPF = temp;
	
	/* init data and turn on led*/
	led_set_value(unit, 0x0f);

	/* delay some time */
	mdelay(100);

	/* turn off led */
	led_set_value(unit, 0x00);
}


/*
* module init
*/
int __init led_init_module(void)
{
	int res;

	TRACE("init_module\n");
	/* print version information */
	printk(KERN_INFO "%s", version);
	/* register led device */
	res = register_chrdev(LED_MAJOR, LED_DEVNAME, &led_ops);
	if(res < 0) {
		printk("ekii-led.o: unable to get major %d for led device.\n", LED_MAJOR);
		return res;
	}

	/* then call led_init() */
	led_init(&led_unit);

	return 0;
}


/*
* module cleanup
*/
void __exit led_cleanup(void)
{
	int res;

	TRACE("cleanup\n");
	/* unregister led device */
	res = unregister_chrdev(LED_MAJOR, LED_DEVNAME);
	if(res < 0)
		printk("ekii-led.o: unable to release major %d for led device.\n", LED_MAJOR);
}


module_init(led_init_module);
module_exit(led_cleanup);


MODULE_DESCRIPTION("EduKit-II led driver");
MODULE_AUTHOR("Embest tech&info Co.,Ltd. <www.embedinfo.com>");
MODULE_LICENSE("GPL");



?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品国产自产拍高清av| 亚洲国产视频在线| 国产日产欧美一区| 一个色在线综合| 亚洲视频你懂的| 亚洲人成精品久久久久| 亚洲综合丁香婷婷六月香| 美美哒免费高清在线观看视频一区二区 | 欧美手机在线视频| 日韩精品高清不卡| 亚洲成av人片一区二区三区 | 99免费精品视频| 大尺度一区二区| 六月婷婷色综合| 加勒比av一区二区| 成人不卡免费av| 91色婷婷久久久久合中文| 91官网在线观看| 亚洲欧美影音先锋| 在线视频综合导航| 欧美v国产在线一区二区三区| 国产精品美女久久久久av爽李琼 | 一区二区免费看| 91在线视频官网| 亚洲欧美福利一区二区| 色婷婷综合久久久中文字幕| 亚洲天堂网中文字| 在线成人午夜影院| 国产一区二区三区香蕉| 国产精品毛片无遮挡高清| 国产精品18久久久久| 日本一区二区视频在线| 色成年激情久久综合| 午夜精品久久久久久久| 日韩精品一区二区三区中文不卡| 成人深夜视频在线观看| 一区二区国产视频| 欧美优质美女网站| 国产一区二区三区视频在线播放| 欧美激情综合在线| 欧美午夜精品一区二区三区| 国产在线播放一区| 亚洲人成在线播放网站岛国| 7777精品伊人久久久大香线蕉的 | 久久99精品国产.久久久久| 欧美激情一区二区三区在线| 欧美精品丝袜久久久中文字幕| 日韩中文字幕亚洲一区二区va在线| 精品日韩一区二区三区免费视频| 国产不卡在线视频| 日韩在线卡一卡二| ...中文天堂在线一区| 欧美亚洲自拍偷拍| 国产成人精品免费看| 天天色 色综合| 国产精品素人一区二区| 日韩一二三区不卡| 97久久超碰国产精品| 国产在线国偷精品免费看| 亚洲最新在线观看| 国产精品私人影院| 久久综合久久99| 欧美精品在线一区二区三区| 波多野结衣中文字幕一区 | 在线欧美小视频| 91污在线观看| 国产成人av电影在线| 日本不卡视频在线观看| 亚洲精品日日夜夜| 中文字幕免费观看一区| 日韩免费性生活视频播放| av不卡免费电影| 成人综合婷婷国产精品久久免费| 免费在线看成人av| 亚洲激情图片qvod| 亚洲精品中文在线影院| 欧美国产精品一区二区| 在线成人免费观看| 777a∨成人精品桃花网| 91丨国产丨九色丨pron| 国产一区二区三区免费| 久久超碰97中文字幕| 日韩精品一二三四| 亚洲成人av一区二区三区| 国产女主播视频一区二区| 久久亚洲免费视频| 久久综合狠狠综合久久激情 | 26uuu亚洲| 欧美精品一区二区三区蜜臀| 精品久久久久久无| 日韩欧美在线网站| 日韩一级免费观看| 国产日韩欧美a| 国产欧美综合色| 欧美一级欧美三级| 欧美精品一区视频| 国产亚洲短视频| 久久久久久久久久久电影| 国产精品电影一区二区三区| 国产精品久久综合| 国产精品久久久久影院老司| 国产精品美女视频| 亚洲精选视频在线| 日韩福利电影在线观看| 日韩在线观看一区二区| 日本大胆欧美人术艺术动态| 日本aⅴ亚洲精品中文乱码| 免费xxxx性欧美18vr| 亚洲宅男天堂在线观看无病毒| 日韩精品三区四区| 久久国产免费看| 国产成人在线看| 在线观看av一区| 欧美一区三区二区| 日韩欧美综合在线| 亚洲欧美在线观看| 日韩精品福利网| 午夜a成v人精品| 福利一区二区在线| 色婷婷久久99综合精品jk白丝 | 91网站在线播放| 日本韩国一区二区| 日韩精品一区二| 亚洲三级小视频| 日韩不卡手机在线v区| 国产乱码精品1区2区3区| 奇米精品一区二区三区在线观看| 福利一区福利二区| 欧美日韩大陆在线| 日韩欧美激情在线| 亚洲激情在线播放| 久久激情五月婷婷| 成人免费黄色大片| 日韩免费高清电影| 亚洲欧美一区二区三区孕妇| 一区二区成人在线| 粉嫩嫩av羞羞动漫久久久| 欧美天堂亚洲电影院在线播放| 欧美mv日韩mv国产| 亚洲一区二区在线视频| 国产中文字幕精品| 欧美在线观看视频一区二区 | 在线不卡的av| 国产精品白丝在线| 免费日韩伦理电影| 337p亚洲精品色噜噜| 亚洲欧美日韩综合aⅴ视频| 男女视频一区二区| 色综合久久久久网| 国产精品精品国产色婷婷| 免费成人在线影院| 日本韩国欧美一区| 亚洲色图欧洲色图| 国产精品2024| 欧美在线免费观看视频| 亚洲精品视频在线看| 国产盗摄一区二区| 日韩欧美色综合网站| 三级欧美韩日大片在线看| 91在线观看成人| 欧美经典一区二区| 国产电影一区二区三区| 欧美一区在线视频| 亚洲香肠在线观看| 在线观看视频一区二区 | 视频在线观看91| 91色porny| 一区二区三区在线视频播放| 97se亚洲国产综合自在线不卡| 中文字幕乱码亚洲精品一区| 成人综合激情网| 国产精品美日韩| 91视视频在线直接观看在线看网页在线看| 久久青草欧美一区二区三区| 国产麻豆精品在线观看| 国产嫩草影院久久久久| 国产成人高清视频| 国产精品欧美极品| eeuss鲁片一区二区三区在线观看| 中文字幕av一区二区三区免费看| www.欧美色图| 亚洲综合激情网| 这里只有精品免费| 国产一区二区在线影院| 国产亚洲成aⅴ人片在线观看| 成人性视频免费网站| 亚洲精品你懂的| 制服丝袜中文字幕一区| 国内久久精品视频| 国产精品传媒入口麻豆| 在线一区二区三区四区五区| 丝袜美腿亚洲色图| 2023国产精品| 97超碰欧美中文字幕| 日韩电影在线免费观看| 欧美v国产在线一区二区三区| 成人综合激情网| 午夜欧美大尺度福利影院在线看| 精品日韩一区二区| www.亚洲人|