tiny6410 linux混杂设备 led驱动

发布者:VS821001最新更新时间:2020-03-09 来源: eefocus关键字:tiny6410  linux  混杂设备  led驱动 手机看文章 扫描二维码
随时随地手机看文章

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

 

#define DEVICE_NAME "led1"

unsigned long GPIOK_VA_BASE ;

 

#define GPIOK_CON0  GPIOK_VA_BASE 

#define GPIOK_CON1  GPIOK_VA_BASE+0X4

#define GPIOK_DAT   GPIOK_VA_BASE+ 0X8

#define GPIOK_PUD   GPIOK_VA_BASE +0XC

 

#define GPIOK_PA_BASE 0X7F008800

 

struct resource led_resource = {

.name  = "led io-mem ",

.start  = GPIOK_PA_BASE,

.end = GPIOK_PA_BASE +0X10,

.flags = IORESOURCE_MEM,

};

 

static void led_pin_setup(void)

{

unsigned long start = led_resource.start;

unsigned long size = led_resource.end - led_resource.start;

unsigned long tmp;

request_mem_region(start,size,led_resource.name);

GPIOK_VA_BASE = (unsigned long)ioremap(start,size);

printk ("<1> [GPIOK_VA_BASE = 0x%lx]n", GPIOK_VA_BASE);

 

tmp = readl(GPIOK_CON0);

tmp = (tmp & ~(0xffffu<<16))|(0x1111u<<16);

writel(tmp,GPIOK_CON0);

tmp = readl(GPIOK_DAT);

tmp |= (0xf <<4);

writel(tmp,GPIOK_DAT);

}

static void led_pin_release(void)

{

iounmap((void*)GPIOK_VA_BASE);

release_mem_region(led_resource.start,led_resource.end - led_resource.start);

}

static unsigned long led_getdata(void)

{

return ((readl(GPIOK_DAT)>>4)& 0XF);

}

 

static void led_setdata(int data)

{

unsigned long temp;

temp = readl(GPIOK_DAT);

temp = ~(0xF<<4) | ((data&0xF)<<4);

writel(temp,GPIOK_DAT);

}

static ssize_t led_read(struct file *filp, char __user *buf, size_t size, loff_t *ppos)

{

int ret = 0;

char buffer[1];

memset(buffer,0,sizeof(buffer));

buffer[0] = (char)led_getdata() ;

if(copy_to_user(buf,buffer,size))

{

ret = -EFAULT;

}

return size;

}

static ssize_t led_write(struct file *flip,const char __user *buf,size_t size,loff_t *ppos)

{

int ret = 0;

unsigned long buffer[1];

memset(buffer,0,sizeof(buffer));

if(copy_from_user(buffer,buf,size))

{

printk("errorn");

ret = -EFAULT;

}

else{

led_setdata(0x00);

led_setdata((int )buffer[0]);

}

return ret;

}

static struct file_operations dev_fops ={

.owner  = THIS_MODULE,

.read = led_read,

.write = led_write,

};

static struct miscdevice misc ={

.minor = MISC_DYNAMIC_MINOR,

.name = DEVICE_NAME,

.fops = &dev_fops,

};

static int __init dev_init(void)

{

int ret;

led_pin_setup();

ret  = misc_register(&misc);

printk(DEVICE_NAME"initialize minor =%dn",misc.minor);

return ret;

}

static void __exit dev_exit(void)

{

led_pin_release();

misc_deregister(&misc);

}

module_init(dev_init);

module_exit(dev_exit);

MODULE_LICENSE("GPL");

MODULE_AUTHOR("GOAT.ZHOU");

以上的是led的驱动文件,以write 向led里写数据,read读取led的状态。


以下的是测试程序 led_app.c



#include

#include

#include

#include

#include

#include

#include

 

char binstr_to_int(char *binstr)

{

    char ret = 0, i = 0;

    char bnum[5];

    memset(bnum, '0', 4);

    int len = strlen(binstr);

    if (len > 4) 

        strcpy(bnum, binstr+len-4); 

    else 

        strcpy(bnum+4-len, binstr);

    

    for (i=0; i<4; i++) {

        ret <<= 1;

        ret += (bnum[i]=='0'? 1: 0);

    }

    return ret;

}

 

int main(int argc, char *argv[])

{

int fd;

unsigned char buff[1];

fd = open("/dev/led1",O_RDWR);

if(fd == -1){

printf("open dev error");

_exit(EXIT_FAILURE);

}

buff[0] = binstr_to_int(argv[1]);

write(fd,buff,sizeof(buff));

memset(buff,0,sizeof(buff));

printf("%dn", read(fd,buff,sizeof(buff)));

printf("%d",(int)buff[0]);

close(fd);

return 0;

 

 

}

关键字:tiny6410  linux  混杂设备  led驱动 引用地址:tiny6410 linux混杂设备 led驱动

上一篇:s3c6410 uart 裸机 轮询 非fifo
下一篇:Linux内核模块驱动之---led驱动

推荐阅读最新更新时间:2024-11-05 13:22

Power Integrations推出全新的LYTSwitch-3 LED驱动器IC
美国加利福尼亚州圣何塞,2016年3月2日讯 高效率、高可靠性LED驱动器IC领域的世界领导者Power Integrations公司(纳斯达克股票代号:POWI)今日推出LYTSwitch -3产品系列 该公司LYTSwitch系列LED驱动器IC的最新成员。LYTSwitch-3非常适合于最大输出功率达20 W的灯泡、灯管和筒灯应用,无论使用前沿还是后沿可控硅调光器均可提供出色的调光性能,并且支持隔离和非隔离拓扑结构。 LYTSwitch-3 IC具有可设定的调光特性,可使设计师优化驱动器的调光范围和效率。深度调光响应也可进行设定,用以扩大调光范围或利用负载-关断模式来消除闪烁的可能性。当无调光器连接时或者调光器
[电源管理]
Power Integrations推出全新的LYTSwitch-3 <font color='red'>LED驱动</font>器IC
OLED驱动器和模块设计在手机屏中的应用
在发现电子发光机理的十年后,有机发光二极管(OLED)技术最终商用在手机,MP3和数码相机中。按Display Search的数据报告, 从2001年第一颗单芯片OLED驱动器起, 2003年有超过一千七百万颗IC用在手机显示上.今年,OLED也开始应用在手机的主显示屏上。OLED在手机显示上的应用正取得腾飞性的增长, 预计今年OLED模块的使用数量将超过3三千万片。 与OLED技术和发展相呼应,OLED的驱动器也日益扮演着重要的角色。不只是从低占空比上升到支持高占空比, 而且应用了诸如每个RGB电流的控制、更宽的IC工作温度 (-45到80℃) 、内部DC-DC升压、以及图形加速指令等一些特性。Solomon Systech的
[电源管理]
O<font color='red'>LED驱动</font>器和模块设计在手机屏中的应用
μC/OS—II的嵌入式串口通信模块设计
在嵌入式应用中,使用RTOS的主要原因是为了提高系统的可靠性,其次是提高开发效率、缩短开发周期。μC/OS-II是一个占先式实时多任务内核,使用对象是嵌入式系统,对源代码适当裁减,很容易移植到8~32位不同框架的微处理器上。但μC/OS-II仅是一个实时内核,它不像其他实时操作系统(如嵌入式Linux)那样提供给用户一些API函数接口。在μC/OS-II实时内核下,对外设的访问接口没有统一完善,有很多工作需要用户自己去完成。串口通信是单片机测控系统的重要组成部分,异步串行口是一个比较简单又很具代表性的中断驱动外设。本文以单片机中的串口为例,介绍μC/OS—II下编写中断服务程序以及外设驅动程序的一般思路。   1 μC/OS-I
[应用]
任天堂Wii U模拟器Cemu宣布今年开源,计划支持Linux
Cemu 作为流行的任天堂 Wii U 模拟器之一,计划在今年开源,并且还致力于 Linux 支持和相关的跨平台改进。   Cemu 是一款 Wii U 游戏机模拟器,自 2015 年以来一直适用于 Windows 平台,尽管因封闭源代码受到了批评,但已经取得了很大的成功。   近日,Cemu 官方发布了 2022 年路线图,宣布 2022 年将开源,并向社区贡献者开放其开发过程。   IT之家了解到,Cemu 还在开发其 Linux 版本,已经完成了大约“70%”,但需要解决其他问题。Cemu 一直致力于切换到与平台无关的构建,比如现代 C++ 代码库的 Makefile 构建系统、Cubeb 音频后端。   此外
[手机便携]
面向小型LCD背光的LED驱动电路设计技巧
彩色 LCD 显示屏 需要白色背光,以便用户在任何光照环境下都能正常地观看。这个背 光子 系统包括1个高 亮度 白光发光二极管( led )阵列、1个扩散器(diffuser)以扩散光线和1个背光 驱动 器将可用 电能 稳压为恒定电流以驱动LED。一块1到1.5英寸的显示屏可能包含2到4个LED,而一块3.5英寸显示屏则可能轻易地就包含6到10个LED。对于LED而言,其光输出与电流成正比,而且由于LED具有非常陡峭的电流-电压(I-V)曲线,流过LED的电流紧密匹配是非常重要,这样才能确保均衡背光,因为LED通常分布在LCD显示屏的一边。此外,也需要软件控制让用户调节亮度,以及针对周围光照环境作出补偿。根据流经LED电流
[电源管理]
面向小型LCD背光的<font color='red'>LED驱动</font>电路设计技巧
介绍几个隔离式LED驱动电源方案
   引言   在全球能源短缺、环保要求不断提高的背景下,世界各国均大力发展绿色节能照明。led照明作为一种革命性的节能照明技术,正在飞速发展。然而,LED驱动电源的要求也在不断提高。高效率、高功率因数、安全隔离、符合EMI标准、高电流控制精度、高可靠性、体积小、成本低等正成为LED驱动电源的关键评价指标。    1 LED驱动电源的具体要求   LED是低压发光器件,具有长寿命、高光效、安全环保、方便使用等优点。对于市电交流输入电源驱动,隔离输出是基于安全规范的要求。LED驱动电源的效率越高,则越能发挥LED高光效,节能的优势。同时高开关工作频率,高效率使得整个LED驱动电源容易安装在设计紧凑的LED灯具中。高恒流精
[电源管理]
介绍几个隔离式<font color='red'>LED驱动</font>电源方案
linux内核中的typeof
内核版本:2.6.14 今天分析内核时又看到了typeof,只知道它大概是返回变量的类型,后来上网查了下发现这个关键字在linux中用的非常多。如果你对sizeof很熟悉的话,那么大可进行类推,sizeof(exp)返回的是exp的数据类型大小,那么typeof(exp.)返回的就是exp的数据类型。下面是linux内核中typeof的一些例子。 include/linux/kernel.h view plain copy print ? /* * min()/max() macros that also do * strict type-checking.. See the * unnecessa
[单片机]
Linux嵌入式系统与硬件平台的关系
1嵌入式系统设计方法变化的背景 嵌入式系统设计方法的演化总的来说是因为应用需求的牵引和IT技术的推动。 随着微电子技术的不断创新和发展,大规模集成电路的集成度和工艺水平不断提高。硅材料与人类智慧的结合,生产出大批量的低成本、高可靠性和高精度的微电子结构模块,推动了一个全新的技术领域和产业的发展。在此基础上发展起来的器件可编程思想和微处理(器)技术可以用软件来改变和实现硬件的功能。微处理器和各种可编程大规模集成专用电路、半定制器件的大量应用,开创了一个崭新的应用世界,以至广泛影响着并在逐步改变着人类的生产、生活和学习等社会活动。 计算机硬件平台性能的大幅度提高,使很多复杂算法和方便使用的界面得以实现,大
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
更多往期活动

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved