of the external a/d converter{ float getValue(Input input);基于a/d转换器的驱动程序这个类的目的是利用驱动程序,并提供一些附加服务,例如将原始值转换为物理单元。第一个想法
我的第一个想法是如何为所有的a/d转换器驱动程序建立公共接口,比如AdcDriver,并将virtual getValue方法定义为该接口的一部分。这种思想的缺点是getValue方法是虚拟的,不适合在中断</e
一切正常工作,直到我激活了ADC中断由国家中心的命令。ADC IRQ Handler写得对吗?(我在Handler上是似是而非的)。模数转换器在连续模式下只使用一个通道。已设置End_of_Conversion和End_of_Sequence中断标志。*if I comment this two lines everything works*/ ADC1->CR&=~ADC_CR_ADEN;
我有一个关于linux设备驱动程序的一般性问题。更常见的情况是,我弄不清楚在linux设备驱动程序中允许或不允许执行哪些操作?例如,下面的例子是不允许的?msleep(1000);printk(KERN_ALERT "faild to print\n";
ret = adc_get_val()*0.001
但是,每当ADIE设置为0时,我都无法从ADC中读取数据。为什么会这样呢?我认为ADC的工作方式与定时器类似--即使中断未启用,它仍会用读数更新ADC寄存器。这是罪魁祸首代码,只要“中断”设置为1以外的任何值,ADC就无法工作。有趣的是,与其他中断不同的是,如果ISR(ADC_vect)例程中没有代码,芯片就不会卡住。if(interrupt){ADCSRA|=1<<ADIE;}//enable the ADC<