- 1、本文档共147页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第5章:Linux 驱动程序设计
* 驱动程序各函数的功能 A/d转换的步骤: (5) A/D转换完成后,唤醒程序继续执行。 (6)ADC数据寄存器的低10位就是模拟信息对应的数值。(因为S3C2410内部是10位A/D转换器) (7)将数据从内核态复制到用户态。 (8)给数据结构解锁。 * 1、文件说明 应用程序源文件:main.c 应用程序包括一个很重要的头文件:s3c2419-adc.h Makefile文件将main.c源文件编译成名为ad的可执行文件。 * 4.1 A/D转换的基础理论 4.2 A/D转换的驱动程序分析 4.3 A/D转换应用程序分析 5.4 A/D驱动和测试程序设计 * 1、应用程序 任务:测量0~2通道输入的模拟电压值 * * 2、驱动程序提供的入口函数 int open(char *filename, int access); int close(int handle); int read(int handle, void *buf, int count); int write(int handle, void *buf, int count); * (1)read函数 格式:int read(int handle, void *buf, int count); 功能:读出驱动程序内部结构指定通道模拟电压的数值量 1---表示3.3/1024 V 转换速度内部结构指定比例因子决定 * (2)write函数 格式:int write(int handle, void *buf, int count); 功能:向内部结构写通道值和比例因子值 数的合成由头文件s3c2410-adc.h提供的宏实现 #define ADC_WRITE(ch, prescale) ((ch)16|(prescale)) #define ADC_WRITE_GETCH(data) (((data)16)0x7) #define ADC_WRITE_GETPRE(data) ((data)0xff) * 3、应用程序的流程图 打开设备文件(/dev/adc/0raw) 写入通道和比例因子 读出AD转换后的值 转换成模拟电压值 显示结果 结束吗 * 4、程序运行介绍 运行ad程序的结果如下: [/host/exp/basic/04_ad]./ad Press Enter key exit! a0= 0.0032 a1= 3.2968 a3= 3.1178 * 5、实际应用 * * 电压与温度的转换公式如下: T=(V-0.5)*100 其中:T表示温度值(℃),V表示输出的电压值(V)。 * float GetTemperatureValue(int ch) { int i; float d,tem; if(init_ADdevice()0) //打开AD设备 return -1; d=((float)GetADresult(ch)*3.3)/1024.0; //计算出模拟电压值 close(adc_fd); tem=(d-0.5)*100; //将模拟电压值转换成对应的温度值 return tem; } int main() { int channel=2; //选择第2通道 printf(The temperature is: %4.2f ℃\n,GetTemperatureValue(channel)); return 0; } * #define ADC_DEV /dev/adc/0raw //设备文件 static int adc_fd = -1; /**打开设备***/ static int init_ADdevice(void) { if((adc_fd=open(ADC_DEV, O_RDWR))0){ printf(Error opening %s adc device\n, ADC_DEV); return -1; } } /**获取某通道的AD转换结果***/ static int GetADresult(int channel) { int PRESCALE=0XFF; int data=ADC_WRITE(channel, PRESCALE); write(adc_fd, data, sizeof(d
您可能关注的文档
- 第5章 机械加工精度 加工误差统计分析.ppt
- 第5章 汽油机燃油供给系统.ppt
- 第5章 磋商内容.ppt
- 第5章 激素.ppt
- 第4章+网壳结构.ppt
- 第5章 内部物料搬运--物流.ppt
- 第5章 结构化程序设计(汪同庆).ppt
- 第5章 脉冲编码调制-重庆科创职业学院.ppt
- 第5章 绘制层次图.ppt
- 第5章-功能高分子.ppt
- 无锡市公安局经开分局会同经开交警大队招聘119名警务辅助人员笔试高频难、易错点备考题库附答案详解.docx
- 曲靖市麒麟区2025年第二批次事业单位遴选(含遴选计划)笔试备考题库及答案详解一套.docx
- 7家智慧社区解决方案集锦,你pick谁.docx
- 江苏地质矿产设计研究院(中国煤炭地质总局检测中心)招聘笔试高频难、易错点备考题库及完整答案详解1套.docx
- 无为市人民法院选聘特邀调解员的笔试备考题库附答案详解.docx
- 最高人民法院直属单位2025年度公开招聘工作人员笔试高频难、易错点备考题库带答案详解.docx
- 汕头市公安局招聘70名警务辅助人员的笔试备考题库带答案详解.docx
- 江苏南京航空航天大学经济与管理学院MBA教育中心工作人员招聘笔试高频难、易错点备考题库含答案详解.docx
- 26、2025年上市公司执行企业会计准则监管报告.docx
- 求是杂志社2025年度公开招聘高校毕业生笔试备考题库及参考答案详解一套.docx
文档评论(0)