资源简介
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
- 上一篇:700多个降水量站点shp图层
- 下一篇:LUTmanager
相关资源
- centos7.x linux镜像文件
- 以前写过的linux下tcp多客户端通信程序
- 操作系统实验全部题目+完整代码:
- 实验一Linux系统安装与简单配置
- 基于Linux在ARM开发板上电子相框的c程
- 五子棋 Linux make
- 基于单片机的正弦波设计程序幅度和
- 尚硅谷周阳老师Linux附脑图mmap
- Linux搭建ffmpeg+red5操作指南.docx
- 兄弟连新版Linux全套资料百度云.txt
- Linux下多线程判断九宫格是否有效
- Debian Linux服务器资料
- Linux常用命令.xmind
- Xilinx Zynq SoC与嵌入式Linux设计实战指南
- openkeeper
- apt安装包linux
- linux 添加字符设备驱动程序及测试程
- weblogic集群部署步骤详细相关文档资料
- LINUX下的MODBUS-RTU驱动程序
- jdk-8u261-x64(含linuxwindowsmacos)
- linux下基于QT和v4l2驱动的USB摄像头视频
- Zedboard ov7725板端Linux下tcp视频发送
- Linux上实现基于Socket_的多进程实时通
- xgcom-0.04.2源码
- linux下的一个异步通信的串口类
- Linux设备驱动
- Linux内存分配与回收
- linux gsm0710 CMUX串口多路复用源码
- Linux Socket 基于GTK+聊天软件
- v4l2采集视频并保存和lcd显示
评论
共有 条评论