这篇文章主要介绍了linux adc设备指的是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇linux adc设备指的是什么文章都会有所收获,下面我们一起来看看吧。 linux adc是混杂设备驱动;在linux2.6.30.4中,系统已经自带有了ADC通用驱动文件“arch/arm/plat-s3c24xx/adc.c”,它是以平台驱动设备模型的架构来编写的,里面是一些比较通用稳定的代码。linux2.6.30.4中,系统已经自带有了ADC通用驱动文件—arch/arm/plat-s3c24xx/adc.c,它是以平台驱动设备模型的架构来编写的,里面是一些比较通用稳定的代码,但是linux2.6.30.4版本的ADC通用驱动文件并不完善,居然没有读函数。后来去看了linux3.8版本的ADC通用文件—-arch/arm/plat-samsung/adc.c才是比较完善的。但是本节并不是分析这个文件,而是以另外一种架构来编写ADC驱动,因为ADC驱动实在是比较简单,就没有使用平台驱动设备模型为架构来编写了,这次我们使用的是混杂(misc)设备驱动。问:什么是misc设备驱动?答:miscdevice共享一个主设备号MISC_MAJOR(10),但次设备号不同。所有的miscdevice设备形成一条链表,对设备访问时内核根据设备号来查找对应的miscdevice设备,然后调用其file_operations结构体中注册的文件操作接口进行操作。dev_init入口函数分析:首先是映射ADC寄存器地址将其转换为虚拟地址,然后获得ADC时钟并使能ADC时钟,接着申请ADC中断,其中断处理函数为adcdone_int_handler,而flags为IRQF_SHARED,即共享中断,因为触摸屏里也要申请ADC中断,最后注册一个混杂设备。当应用程序open (“/dev/adc”,…)时,就会调用到驱动里面的open函数,那么我们来看看open函数做了什么?很简单,先初始化一个等待队列头,因为入口函数里既然有申请ADC中断,那么肯定要使用等待队列,接着设置ADC通道,因为TQ2440的ADC输入通道默认是2,设置预分频值为0xff。当应用程序read时,就会调用到驱动里面的read函数,那么我们来看看read函数做了些什么?tq2440_adc_read函数首先尝试获得ADC_LOCK信号量,因为触摸屏驱动也有使用ADC资源,两者互有竞争关系,获得ADC资源后,使能预分频,选择ADC通道,最后启动ADC转换,接着就调用wait_event_interruptible 函数进行等待,直到ev_adc>0进程才会继续往下跑,往下跑就会将adc_data数据读出来,调用copy_to_user函数将ADC数据传给应用空间,最后释放ADC_LOCK信号量。问:什么时候ev_adc>0?默认ev_adc = 0答:在adcdone_int_handler中断处理函数里,等数据读出后,ev_adc被设置为1。ADC中断处理函数adcdone_int_handler当AD转换完成后就会触发免费云主机、域名ADC中断,就会进入adcdone_int_handler,这个函数就会讲AD转换数据读到adc_data,接着将唤醒标志位ev_adc置1,最后调用wake_up_interruptible函数唤醒adcdev.wait等待队列。
总结一下ADC的工作流程:一、open函数里,设置模拟输入通道,设置预分频值二、read函数里,启动AD转换,进程休眠三、adc_irq函数里,AD转换结束后触发ADC中断,在ADC中断处理函数将数据读出,唤醒进程四、read函数里,进程被唤醒后,将adc转换数据传给应用程序ADC驱动参考源码:ADC应用测试参考源码:测试结果:关于“linux adc设备指的是什么”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“linux adc设备指的是什么”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注云技术行业资讯频道。
这篇文章主要讲解了“json格式如何打开”,文中的讲解内容简单清晰,免费云主机、域名易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“json格式如何打开”吧! 1、 鼠标右键点击json文件 2、点击“打开方式” 3、点击“更多应用” 4、…