历史上的今天
返回首页

历史上的今天

今天是:2025年03月09日(星期日)

正在发生

2020年03月09日 | tiny6410 linux混杂设备 led驱动

2020-03-09 来源:eefocus

#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;

 

 

}

推荐阅读

史海拾趣

Babcock Inc公司的发展小趣事

Babcock深知技术创新是公司发展的核心动力。因此,公司始终保持着对技术研发的持续投入。通过不断引进先进设备、优化研发流程、加强团队建设等措施,Babcock的技术实力得到了不断提升。同时,公司还注重与高校和研究机构的合作,共同推动电子技术的创新发展。

Graseby Infrared公司的发展小趣事
电源电压不稳定或波动过大可能导致接触器吸合不稳定。
ConnectBlue公司的发展小趣事

在产品创新的基础上,ConnectBlue公司开始积极拓展市场。公司不仅在国内市场取得了良好的销售业绩,还积极开拓国际市场,与多家海外企业建立了合作关系。同时,公司还注重与产业链上下游企业的合作,与多家供应商和集成商建立了长期稳定的合作关系,共同推动无线通信技术的发展和应用。

FDI [Future Designs , Inc.]公司的发展小趣事

作为一家有社会责任感的企业,FDI公司始终关注社会公益事业。公司积极参与扶贫、教育、环保等领域的公益活动,为社会做出了积极贡献。同时,FDI还设立了奖学金和助学金,鼓励和支持年轻人投身电子科技事业。这些举措不仅提升了公司的社会形象,也为其赢得了广泛的赞誉。

Data Translation Inc公司的发展小趣事

Data Translation在追求企业发展的同时,也积极履行社会责任和推动可持续发展。公司关注环境保护和员工福利等方面的问题,通过采用环保材料、节能减排等措施降低生产过程中的环境污染和能源消耗;通过提高员工福利待遇、加强员工培训等方式提升员工的工作满意度和忠诚度。这些举措不仅为公司赢得了良好的社会声誉和形象,也为公司的长期发展奠定了坚实的基础。

请注意,以上故事仅为概述框架,并未详细展开每个故事的具体情节和细节。在实际编写时,你可以根据Data Translation Inc公司的具体发展历程和业务特点进行进一步的补充和完善。

ES Systems公司的发展小趣事

ES Systems在创立初期主要面向高端市场提供定制化服务。然而,随着市场竞争的加剧和客户需求的变化,公司意识到必须调整市场策略。于是,ES Systems开始加大在中低端市场的投入,推出了一系列性价比高的产品。这一策略的调整使得公司的市场份额迅速扩大,同时也提高了品牌知名度。

问答坊 | AI 解惑

开关电源中几种过流保护方式的比较

                                   开关电源中几种过流保护方 ...…

查看全部问答>

供应麦肯MDT单片机,PIC单片机,Freescale传感器,单片机,单片机开发

广州远景微电子有限公司从1999年至今专业从事麦肯MDT单片机,十速TENX单片机,美国MEAS传感器,Freescale单片机、传感器,自产IC的销售及产品方案单片机开发设计。公司技术力量雄厚,拥有专业的工程师队伍,专业承接各类单片机的开发与设计,坚持以 ...…

查看全部问答>

高手请进!

深圳知名通信企业,高薪诚聘底层软件设计师、工程师, 本科2年以上,硕士1年半以上嵌入式系统开发设计经验; 熟悉PowerPC/mips/ARM/X86至少一种或以上处理器架构; 熟悉CPU的多核、多线程、cache、MMU等常用硬件技术,深入了解嵌入式OS(VXWORKS ...…

查看全部问答>

高手帮我找个编译错误吧.

我用的是CE6.0 。 系统定制时编译出现一个错误,只能找到最后说 ; Build for Windows CE (Release 601) (Built on Aug 17 2006 15:18:52) File names: Build.log Build.wrn Build.err Build.dat CEBUILD: Running sysgen -p script preproc St ...…

查看全部问答>

三星6410/Wince6.0 环境下,Directshow显示

三星6410/Wince6.0 环境下,Directshow 的范例一般在什么目录下? 我想用Directshow 显示 Byte *pBuf(pBuf 是一个指向RGB数据 的指针) 中的数据应可以吧?…

查看全部问答>

关于编程控制电机转动的问题

我现在在学C++,想设计代码通过电脑远程控制电机的转动,可是脑子里连个概念都没有,希望各位大虾能详细指教一下该怎么实现,不是求代码,是想求得一个详细可行的方法以及实现的过程,我现在就是个程序设计初学者,对于串口之类还没有认识,希望您 ...…

查看全部问答>

Modesim错误

编译完,启动仿真后就出现这种错误。# Reading C:/altera/10.0/modelsim_ase/tcl/vsim/pref.tcl # do vga_nios_run_msim_rtl_vhdl.do # if {[file exists rtl_work]} {#         vdel -lib rtl_work -all# }# vlib r ...…

查看全部问答>

【原创】请教各位,F149有时候不能下载,有时可以,是什么原因?

能下和找不到没有任何规律。我看斑竹只顶的帖子说有可能是内、外部  电源冲突,不知道具体是什么意思?…

查看全部问答>

PSPICE仿真一个RC震荡电路的问题请教。

各位老大好,今天用PSPICE仿真一个RC震荡电路。有个问题没有想明白,请教各位高手,有劳指点一下。电路很简单,就是一个RC振荡电路。输入是一个1V的正弦波,输入是下面图中最右边的电容。见下。我首先是进行AC扫描,频率从80k到150k,得到的输出如 ...…

查看全部问答>

急救!!!!哪位大大帮看看我的HS9148红外解码程序哪儿除了问题?

这是源代码。//使用12M晶振 适用于HS9148芯片#include<reg52.h>#include<stdio.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intsbit led=P1^1;sbit in=P3^2;//红外接口标志uchar const tab[]={0x3f,0x06,0 ...…

查看全部问答>