日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux 433发送驱动

發(fā)布時(shí)間:2024/9/5 linux 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux 433发送驱动 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

驅(qū)動(dòng)代碼:

#include <linux/miscdevice.h> #include <linux/delay.h> #include <asm/irq.h> //#include <mach/regs-gpio.h> #include <mach/hardware.h> #include <linux/kernel.h> #include <linux/module.h> #include <linux/init.h> #include <linux/mm.h> #include <linux/fs.h> #include <linux/types.h> #include <linux/delay.h> #include <linux/moduleparam.h> #include <linux/slab.h> #include <linux/errno.h> #include <linux/ioctl.h> #include <linux/cdev.h> #include <linux/string.h> #include <linux/list.h> #include <linux/pci.h> #include <asm/uaccess.h> #include <asm/atomic.h> #include <asm/unistd.h>#include <mach/map.h> #include <mach/regs-clock.h> #include <mach/regs-gpio.h>#include <plat/gpio-cfg.h> #include <mach/gpio-bank-e.h> #include <mach/gpio-bank-k.h> #define DEVICE_NAME "433"static long t433_ioctl(struct file *filp, unsigned int cmd, unsigned int arg) {unsigned tmp, h, l, i, j, cmd1;tmp = readl(S3C64XX_GPKDAT);h = tmp |(0x01<<8);//把第8位也就是GBK8輸出1l = tmp &(~(0x01<<8));//把第8位也就是GBK8輸出0for(j=0; j<5; j++){cmd1=cmd;writel(h, S3C64XX_GPKDAT);//高電平起始位mdelay(3); //3mswritel(l, S3C64XX_GPKDAT);//低電平數(shù)據(jù)間隔mdelay(2); //800usfor(i=0; i<32; i++){if(cmd1&0x1){//寫1//printk("1");writel(h, S3C64XX_GPKDAT);//寫高電平mdelay(2); //2mswritel(l, S3C64XX_GPKDAT);//低電平數(shù)據(jù)間隔mdelay(2); //800us}else {//寫0//printk("0");writel(h, S3C64XX_GPKDAT);//寫高電平mdelay(1); //1mswritel(l, S3C64XX_GPKDAT);//低電平數(shù)據(jù)間隔mdelay(2); //800us}cmd1=cmd1>>1; //右移}msleep(8);//printk("\n\n");}//printk("t433_ioctl\n");//printk("cmd=%d\narg=%d\n",cmd,arg);return 0; }static struct file_operations dev_fops = {.owner = THIS_MODULE,.unlocked_ioctl = t433_ioctl, };static struct miscdevice misc = {.minor = MISC_DYNAMIC_MINOR,.name = DEVICE_NAME,.fops = &dev_fops, };static int __init dev_init(void) {int ret;{unsigned tmp;tmp = readl(S3C64XX_GPKCON1);tmp = (tmp & ~0xf)|(0x01); //設(shè)置GBK8為輸出狀態(tài)writel(tmp, S3C64XX_GPKCON1);tmp = readl(S3C64XX_GPKDAT);// tmp |= (0x01<<8);//把第8位也就是GBK8輸出1tmp &= ~(0x01<<8);//把第8位也就是GBK8輸出1//tmp &= 0x0;writel(tmp, S3C64XX_GPKDAT);}ret = misc_register(&misc);//應(yīng)該是在/dev下出那個(gè)DEVICE_NAMEprintk ("size unsigned = %d\n", sizeof(unsigned));printk (DEVICE_NAME"\tinitialized\n");return ret; }static void __exit dev_exit(void) {misc_deregister(&misc); }module_init(dev_init); module_exit(dev_exit); MODULE_LICENSE("GPL"); MODULE_AUTHOR("yangkun");
以上驅(qū)動(dòng)根據(jù)自己的協(xié)議發(fā)送的。就是一些時(shí)序

測(cè)試代碼:

#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/ioctl.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h>int main(int argc, char **argv) {int on;int led_no;int fd;if (argc != 3 || sscanf(argv[1], "%d", &led_no) != 1 || sscanf(argv[2],"%d", &on) != 1 ||on < 0 || on > 1 || led_no < 0 || led_no > 3) {fprintf(stderr, "Usage: leds led_no 0|1\n");exit(1);}fd = open("/dev/433", 0);if (fd < 0) {fd = open("/dev/433", 0);}if (fd < 0) {perror("open device leds");exit(1);}//char a[4]={0xc0, 0x00, 0x11, 0xee};//memcpy(&on, a, 4);if(on==1)on=0xee1101c0;elseon=0xee1100c0;printf("on=%x\n",on);ioctl(fd, on, led_no);close(fd);return 0; }
代碼是根據(jù)友善的改的。

總結(jié)

以上是生活随笔為你收集整理的linux 433发送驱动的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。