课件:九嵌入式Linux驱动程序开发.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
READ_ START (位1): 通过读取来启动A/D转换 0 = 停止通过读取启动,1 = 使能通过读取启动 ENABLE_ START(位0):通过设置该位来启动A/D操作。如果READ_START是使能的,此位无效。 0=无操作 1 = A/D转换启动,启动后该位被清零。 (四)ADC 转换数据寄存器(ADCDAT0) 地址: 0x5800000C ,可读写。 位9~0为A/D转换的数字值。范围为:0 ~ 3FFH。 思考:设计A/D驱动程序,使之能实现对多路模拟量的采集。 #define DRIVER_NAME????myDriver static int myDriver_Major = 0;????????/* Driver Major Number */ static int AD_READ (void) ?{??int i,j; int val,aa; val=0; ????ADCCON |= 0x2; ???????? //ADC转换通过读操作来启动 aa = ADCDAT0 0x03ff; ???????????? //启动ADC转换 ?for(i=0;i16;i++) { ?while(!(ADCCON0x8000));?????? //判断ADC转换是否结束 ?????? val += (ADCDAT0 0x03ff); //取出ADC转换值 ?????? for(j=0;j500;j++); ???? } val=val/16; //计算ADC平均转换值 ?? ?return val;? } /* Driver Operation Functions */ static int myDriver_open(struct inode *inode, struct file *filp) {???MOD_INC_USE_COUNT; ???? PRINTK(myDriver open called!\n); /* 进行ADC模块设置,其中xn表示第n位设置为x(若x超过一位,则向高位顺延) */ ?ADCCON = (0 0) |????// ADC转换设置 未设置 ????(0 1) | // 读AD数据触发AD转换 未使用 ????(0 2) | // StandBy模式选择 为普通操作模式 ??(49 6) | ????// CLKDIV = Fpclk /(49+1) ? ?(1 14) ;???? //预分频器使能软件预设值 ??? ?PRINTK( ADC INIT OK \n); ???????? ????return 0; } static int myDriver_release(struct inode *inode, struct file *filp) {?MOD_DEC_USE_COUNT; ??PRINTK(myDriver release called!\n); return 0; } static ssize_t myDriver_read(struct file *filp, char *adc_value, size_t count, loff_t *f_pos) {?int adc=0; size_t read_size = count; adc= AD_READ();???? copy_to_user(adc_value, adc, sizeof(adc));???? ? PRINTK(adc_vale = %d \n,adc); ? return read_size; } static int myDriver_ioctl(struct inode *inode, struct file *file, unsigned int ch,unsigned long arg) {?PRINTK(myDriver ioctl called!\n); ?? if( (ch7)||(ch0 ) ) ???? {?PRINTK( not a valid parameter,parameter must betwween 0 and 8 \n); ?????? return -1; ???? } ? ?ADCCON |= (ch 3);// channel set ?? PRINTK( ADC INIT OK \n); ???????? ?? return 0; } /* Driver Operation structure */ static s

文档评论(0)

iuad + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档