#include

#include

#include

#include/*创建设备节点*/

#include

#include/*延时函数*/

#include

#include

#includeadc.h>

#include

#defineADC_MAJOR102

#defineADC_NAME"my_adc"

#defineSUCCESS0

staticintadc_open(structinode*,structfile*);

staticintadc_release(structinode*,structfile*);

staticint__initadc_init(void);

staticint__exitadc_exit(void);

staticssize_tadc_read(structfile*,char*,size_t,loff_t*);

volatileunsignedlongadc_con;

unsignedlongadc_dat0;

//#defineadc_con(unsignedlong)ioremap(0x58000000,4)

//#defineadc_dat0(volatileunsignedlong)ioremap(0x5800000c,4)

structclk*adc_clk;

structfile_operationsadc_ops=

{

.owner=THIS_MODULE,

.read=adc_read,

.open=adc_open,

.release=adc_release,

};

staticint__initadc_init(void)

{

intret;

adc_clk=clk_get(NULL,"adc");//获取时钟

clk_enable(adc_clk);//使能时钟

ret=register_chrdev(ADC_MAJOR,ADC_NAME,&adc_ops);//注册设备

if(ret<0)

{

printk("registerdevicefail/n");

returnret;

}

adc_con=(unsignedlong)ioremap(0x58000000,4);

adc_dat0=(volatileunsignedlong)ioremap(0x58000000+S3C2410_ADCDAT0,4);

if(adc_con&adc_dat0==0)

{

printk("Failedtoioremap/n");

gotohandle;

}

printk("Initialized.../n");

returnSUCCESS;

handle:

unregister_chrdev(ADC_MAJOR,ADC_NAME);

return-1;

}

staticintadc_open(structinode*inode,structfile*file)//打开设备函数

{

returnSUCCESS;

}

staticintadc_release(structinode*inode,structfile*file)//关闭设备函数

{

returnSUCCESS;

}

staticssize_tadc_read(structfile*file,

char*buffer,

size_tlength,

loff_t*offset)//设备读取函数

{

unsignedintbuf;

inttmp;

inti;

writew((1<<14)|(0x31<<6),adc_con);//设置ADCCON

writew((readw(adc_con)|0x1),adc_con);//启动AD转换

while(readw(adc_con)&0x1);//启动转换后,等待启动位清零

while(!(readw(adc_con)&0x8000));//等待转换是否完毕

//for(i=0;i<200000;i++);

mdelay(100);

buf=(readw(adc_dat0)&0x3ff);//取出转换后得到的有效数据

copy_to_user(buffer,(char*)&buf,sizeof(buf));

//printk("Thevalueis%x/n",buf);

return2;

}

staticint__exitadc_exit(void)//驱动卸载函数

{

iounmap(adc_con);

iounmap(adc_dat0);

unregister_chrdev(ADC_MAJOR,ADC_NAME);

clk_disable(adc_clk);

clk_put(adc_clk);

printk("Theadcisunintialized/n");

returnSUCCESS;

}

module_init(adc_init);

module_exit(adc_exit);

MODULE_LICENSE("GPL");

linux adc是什么设备,Linux 驱动--ADC驱动相关推荐

  1. Linux利用platform_driver和设备树实现PWM驱动

    Linux利用platform_driver和设备树实现PWM驱动 字符设备PWM驱动 一.PWM驱动的硬件资源 1.PWM工作原理 2.PWM电路原理 3.PWM内部结构 二.具体代码 1.设备树 ...

  2. linux如何禁止pci设备,Linux 内核PCI去除一个设备

    一个 PCI 可用多个不同的方法被从系统中去除. 所有的 card-bus 设备在一个不同的物 理因素上是真正的 PCI 设备, 并且内核 PCI 核心不区分它们. 允许在机器运行时加减 PCI 设备 ...

  3. linux中怎么查看设备,linux怎么查看硬件设备信息

    你们知道怎么直接查看Linux中的硬件信息吗?下面是学习啦小编带来的关于linux怎么查看硬件设备信息的内容,欢迎阅读! linux怎么查看硬件设备信息? 建议直接进主板的bios查看硬件信息, li ...

  4. linux内核定义注册设备,linux字符型设备驱动 一.注册设备并创建设备文件

    1.字符设备 字符设备.字符设备驱动与用户空间访问该设备的程序三者之间的关系 Linux内核中: a -- 使用cdev结构体来描述字符设备; b -- 通过其成员dev_t来定义设备号(分为主.次设 ...

  5. linux下spi添加设备,Linux Kernl添加spidev的设备节点

    一.spidev介绍 如果在内核中配置spidev,会在/dev目录下产生设备节点,通过此节点可以操作挂载在该SPI总线上的设备.用户空间通过该节点可以访问内核空间. 二.配置spidev设备步骤 在 ...

  6. linux怎么查看i2c设备,Linux 下I2c设备分析

    I2c协议介绍 Key to symbols ============== S(1 bit) : Start bit开始位 P(1 bit) : Stop bit结束位 Rd/Wr (1 bit) : ...

  7. linux 增加回环设备,linux命令练习:mount fdisk swap dd创建本地回环设备

    练习一 1.创建一个1G的分区,文件系统为ext4,卷标为MYDATA,块大小为1024,预留管理空间为磁盘 分区的3%,要求开机后制动挂载至/data目录,并且自动挂载的设备要使用卷标进行引用. f ...

  8. 查看linux服务器下接设备,linux下如何查看设备信息_网站服务器运行维护

    linux下如何查看php是否启动_网站服务器运行维护 linux下查看php是否启动的方法是:可以通过执行[ps -ef | grep php]命令来查看,或者是通过执行[ps -A | grep ...

  9. linux查看硬件PCI设备,Linux系统查看硬件信息神器,比pci设备好用100倍!

    大家都知道,当我们的 Linux 系统计算机出现问题时,需要对其排除故障,首先需要做的是找出计算机的硬件信息.下面介绍一个简单易用的应用程序--HardInfo,你可以利用它来显示你电脑的每个硬件方面 ...

最新文章

  1. asp.net中长内容自动分页的实现
  2. python pptp链接_渗透技巧——PPTP口令的获取与爆破
  3. MySQL数据库修改字段的长度
  4. 从5随机到7随机及其扩展
  5. Fluid 给数据弹性一双隐形的翅膀 -- 自定义弹性伸缩
  6. 一休和尚 小布偶 晴天娃娃
  7. php制图汉字,PHP用imageTtfText函数在图片上写入汉字
  8. Android的三种网络联接方式(URL / HttpURLConnection | HttpClient | InetAddress )
  9. 【C++】判断两个vector是否相等~直接用“==”呀~
  10. liferay 6.2 主题开发
  11. linux里命令pkg-config工具的使用
  12. 简析三种近场通信及其未来发展趋势
  13. 数字相控阵雷达的优势(Benefits of Digital Phased Array Radars)1
  14. unity2d物体3d效果
  15. 免费stm32视频教程分享:心率检测仪的设计与实现
  16. 蚂蚁森林自动收能量之AutoJs实现
  17. java后端必会【基础知识点】
  18. python PTA合集
  19. 通俗易懂区块链系列——双重支付/双花支付
  20. 百度云搭建微信公众平台服务器,微信大众开放平台开发03-百度BAE上搭建属于自己的微信公众平台 -JAVA,微信公众开放平台部署到百度云中BASE2.0,进行调试,木有钱买云服务器的亲们试试...

热门文章

  1. JavaScript操作BOM对象 - document对象; history 和 location对象 ,对话框,Date时间对象...
  2. 利用Python构建时间序列模型解决实际问题的正确姿势
  3. JavaScript 的 defer 与 async
  4. 高精度练习(hdoj1042)
  5. set, unordered_set模板类
  6. python运算学习之Numpy ------ 数组操作:连接数组、拆分数组 、广播机制、结构化数组、文件贮存与读写、np.where、数组去重...
  7. pandas数据导出Execl
  8. dbForge mysql数据库比对
  9. 2017.05.01
  10. 用一道面试题考察对闭包的理解