linux 433发送驱动
来源:互联网 发布:套号学历知乎 编辑:程序博客网 时间:2024/06/05 06:13
驱动代码:
#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输出1 l = tmp &(~(0x01<<8));//把第8位也就是GBK8输出0for(j=0; j<5; j++){cmd1=cmd;writel(h, S3C64XX_GPKDAT);//高电平起始位mdelay(3); //3mswritel(l, S3C64XX_GPKDAT);//低电平数据间隔mdelay(2); //800usfor(i=0; i<32; i++){if(cmd1&0x1){//写1//printk("1");writel(h, S3C64XX_GPKDAT);//写高电平mdelay(2); //2mswritel(l, S3C64XX_GPKDAT);//低电平数据间隔mdelay(2); //800us}else {//写0//printk("0");writel(h, S3C64XX_GPKDAT);//写高电平mdelay(1); //1mswritel(l, S3C64XX_GPKDAT);//低电平数据间隔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); //设置GBK8为输出状态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);//应该是在/dev下出那个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");
以上驱动根据自己的协议发送的。就是一些时序
测试代码:
#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;}
代码是根据友善的改的。
- linux 433发送驱动
- Linux Socket CAN驱动 <3. Socket CAN发送数据流程>
- linux驱动的异步通知 驱动程序向应用程序发送信号
- Linux Socket CAN驱动 <3. Socket CAN发送数据流程>
- 串口驱动分析-发送
- 自娱自乐5之Linux gadget驱动4(接受发送,complete函数,setup函数)
- linux驱动的异步通知(kill_fasync,fasync)---- 驱动程序向应用程序发送信号
- 【Linux 驱动】Netfilter/iptables (六) 内核协议栈编程(发送skb)
- Linux Kernel 设备驱动之I2C之client之发送消息格式
- 驱动向应用程序发送消息
- wince 驱动发送广播消息
- 驱动向应用程序发送消息
- wince 驱动发送广播消息
- 驱动向应用程序发送消息
- DM9000驱动分析之发送
- Linux 驱动--ADC驱动
- Linux 驱动--ADC驱动 .
- Linux驱动---按键驱动
- /etc/default/grub文件
- C# Windows 服务 的简单程序的编写,安装 和 卸载
- websphere ND安装
- (转)收集的JQuery代码
- My Favorite Music
- linux 433发送驱动
- Windows api 的学习和开发 一
- 标准状态栏
- 面试资料一
- win7 64位操作系统 安装oracle11g完整解决方案
- 各个版本的centos yum 源 centos 2 3 4 5 6
- .Bat、Cmd批处理文件
- ZOJ 1877 Bridge
- 8大应用助你个性化定制最Cool的Android手机