历史上的今天
今天是: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; }
史海拾趣
|
供应麦肯MDT单片机,PIC单片机,Freescale传感器,单片机,单片机开发 广州远景微电子有限公司从1999年至今专业从事麦肯MDT单片机,十速TENX单片机,美国MEAS传感器,Freescale单片机、传感器,自产IC的销售及产品方案单片机开发设计。公司技术力量雄厚,拥有专业的工程师队伍,专业承接各类单片机的开发与设计,坚持以 ...… 查看全部问答> |
|
我用的是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++,想设计代码通过电脑远程控制电机的转动,可是脑子里连个概念都没有,希望各位大虾能详细指教一下该怎么实现,不是求代码,是想求得一个详细可行的方法以及实现的过程,我现在就是个程序设计初学者,对于串口之类还没有认识,希望您 ...… 查看全部问答> |
|
各位老大好,今天用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 ...… 查看全部问答> |




