• 大小: 123KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-02
  • 语言: 其他
  • 标签: linux  c/c++  

资源简介

6818开发板Linux系统下的超声波驱动6818开发板Linux系统下的超声波驱动

资源截图

代码片段和文件信息

#include 
#include 
#include 
#include 
#include 
#include 
#include 

#include 

static struct cdev gec6818_chao_cdev; //字符设备结构体

static dev_t chao_num=0; //设备号


static struct class  *chaos_class;

static struct device  *chaos_device;

static void __iomem *gpiod_base_va; //gpioe的虚拟地址基址
static void __iomem *gpiod_out_va;
static void __iomem *gpiod_outenb_va;
static void __iomem *gpiod_altfn0_va;
static void __iomem *gpiod_altfn1_va;

static int  gec6818_chao_open (struct inode * inode struct file *file)
{
printk(“gec6818_chao_open \n“);

return 0;
}

static int  gec6818_chao_release (struct inode * inode struct file *file)
{
printk(“gec6818_chao_release \n“);
return 0;
}

static ssize_t gec6818_chao_write (struct file * file const char __user * buf size_t len loff_t * off)
{
int rt;

int v;

char kbuf[2]={0};

//配置GPIOD15GPIOD19为输出模式
iowrite32((ioread32(gpiod_altfn1_va)&(~(3<<6)))|(1<<6)gpiod_altfn1_va);
iowrite32(ioread32(gpiod_outenb_va)|(1<<19)gpiod_outenb_va);

iowrite32(ioread32(gpiod_altfn0_va)&(~(3<<30))gpiod_altfn0_va);
iowrite32(ioread32(gpiod_outenb_va)|(1<<15)gpiod_outenb_va);

printk(“[gec6818_chao_write]len=%d\n“len);

//判断当前len是否合法
if(len > sizeof kbuf)
return -EINVAL; //返回参数无效错误码

//从用户空间拷贝数据

rt = copy_from_user(kbufbuflen);

if(rt !=0 )
return -EFAULT;

printk(“[gec6818_chao_write]kbuf[0]=%dkbuf[1]=%d\n“kbuf[0]kbuf[1]);

switch(kbuf[0])
{
case 5: //D5
{
if(kbuf[1]==1)
{
v = ioread32(gpiod_out_va);
v &=~(1<<15);
iowrite32(vgpiod_out_va);

}
else if(kbuf[1]==0)
{
v = ioread32(gpiod_out_va);
v |=(1<<15);
iowrite32(vgpiod_out_va);

}
else
return -EINVAL;
}break;

case 9: //D9
{
if(kbuf[1]==1)
{
v = ioread32(gpiod_out_va);
v &=~(1<<19);
iowrite32(vgpiod_out_va);

}
else if(kbuf[1]==0)
{
v = ioread32(gpiod_out_va);
v |=(1<<19);
iowrite32(vgpiod_out_va);

}
else
return -EINVAL;
}break;

default:
return -EINVAL;
}
return len;
}

static ssize_t gec6818_chao_read (struct file *file char __user *buf size_t len loff_t * offs)
{
int rt;

char key_val=0;



//按键的状态高电平-1,低电平-0
//bit019的状态
//bit115的状态


//判断当前len是否合法
if(len > sizeof key_val)
return -EINVAL; //返回参数无效错误码

key_val =ioread32(gpiod_out_va)&(1<<19)?  0: 1;
key_val|=ioread32(gpiod_out_va)&(1<<15) ?  0:(1<<1);

//从内核空间拷贝到用户空间
rt = copy_to_user(buf&key_vallen);

//获取成功复制的字节数

len = len - rt;


//printk(“gec6818_key_read__user buf[%s]len[%d]\n“buflen);

return len;


}

static const struct file_operations gec6818_chao_fops = {
  .owner  = THIS_MODULE
.

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-11-05 19:08  1超声波\
     目录           0  2018-11-06 09:35  1超声波\demo3\
     文件         374  2018-11-05 20:12  1超声波\demo3\Makefile
     文件        6462  2018-11-06 16:00  1超声波\demo3\chao_drv.c
     文件       82599  2018-11-05 20:19  1超声波\demo3\chao_drv.ko
     文件        7023  2018-11-05 17:22  1超声波\demo3\key_drv.c
     文件       81356  2018-11-05 20:19  1超声波\demo3\key_drv.ko
     文件        8445  2018-11-06 15:55  1超声波\demo3\led_drv.c
     文件       84166  2018-11-05 20:19  1超声波\demo3\led_drv.ko
     文件        7156  2018-11-06 09:35  1超声波\demo3\led_key_test
     文件        2118  2018-11-06 15:55  1超声波\demo3\led_key_test.c
     文件        7352  2018-11-06 09:26  1超声波\demo3\led_test
     文件        5641  2018-11-06 09:33  1超声波\demo3\pp
     文件          61  2018-11-06 09:33  1超声波\demo3\pp.c

评论

共有 条评论