linux 433驱动程序,linux 433发送驱动

驱动代码:

#include

#include

#include

//#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#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输出0

for(j=0; j<5; j++){

cmd1=cmd;

writel(h, S3C64XX_GPKDAT);//高电平起始位

mdelay(3); //3ms

writel(l, S3C64XX_GPKDAT);//低电平数据间隔

mdelay(2); //800us

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

if(cmd1&0x1){//写1

//printk("1");

writel(h, S3C64XX_GPKDAT);//写高电平

mdelay(2); //2ms

writel(l, S3C64XX_GPKDAT);//低电平数据间隔

mdelay(2); //800us

}

else {//写0

//printk("0");

writel(h, S3C64XX_GPKDAT);//写高电平

mdelay(1); //1ms

writel(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输出1

tmp &= ~(0x01<<8);//把第8位也就是GBK8输出1

//tmp &= 0x0;

writel(tmp, S3C64XX_GPKDAT);

}

ret = misc_register(&misc);//应该是在/dev下出那个DEVICE_NAME

printk ("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

#include

#include

#include

#include

#include

#include

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;

else

on=0xee1100c0;

printf("on=%x\n",on);

ioctl(fd, on, led_no);

close(fd);

return 0;

} 代码是根据友善的改的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值