现代传感器的接口:中断驱动的ADC驱动程序
Interfacing with modern sensors: Interrupt driven ADC drivers
研究了如何编写一个阻塞的模数转换器(ADC)驱动程序和一个使用轮询技术不阻塞应用程序流的驱动程序。轮询外围设备的驱动程序效率低下,如果系统处于低功耗状态,可能会浪费宝贵的时钟周期,否则会浪费能量。开发人员实现ADC驱动程序的一种有效方法是使用中断来通知应用程序转换周期已经完成。在本文中,将研究如何做到这一点。 更新ADC驱动程序示例函数
有几种不同的方法可以编写ADC驱动程序来使用中断。在本文中,将介绍如何修改上一篇文章中介绍的非阻塞ADC驱动程序。应用程序可以通过调用函数ADC_Sample来启动ADC转换。
这是一个很好的例子,为什么有一个好的硬件抽象层(HAL)可以派上用场。无论是阻塞,还是阻塞、轮询或中断,都会调用完全相同的函数,其行为只是根据驱动程序的配置设置而改变,或者可能会根据应用程序的需要链接到不同版本的Adc_Sample函数中。 非阻塞系统的Adc_Sample函数如下所示:
bool Adc_Sample(void)
{
AdcPin_t AdcPin = AdcChannel0;
static bool SampleInProgress = false;
bool SampleComplete = false;
if(SampleInProgress == false)
{
if(Adc_SampleIndex == ADC_SAMPLE_SIZE)
{
Adc_SampleIndex = 0;
}<