如果最終得到的數據是兩路數據的差值, 我們可以採用ADC的 Difference 工作模式
#include <stdbool.h>
#include <stdint.h>
#include "inc/hw_memmap.h"
#include "driverlib/adc.h"
#include "driverlib/gpio.h"
#include "driverlib/pin_map.h"
#include "driverlib/sysctl.h"
#include "user/LCDDriver.h"
#define abs(x) (((x)<0)? -(x):(x))
uint32_t pui32ADC0Value[1]={0};
//這是我們的數據緩存, ADC採樣數據存儲在這裏
void adcConfig(){
SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC1);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);
GPIOPinTypeGPIOOutput(GPIO_PORTD_BASE, GPIO_PIN_1);
GPIOPinTypeADC(GPIO_PORTE_BASE, GPIO_PIN_3 | GPIO_PIN_2);
//初始化ADC所使用的GPIO
ADCSequenceConfigure(ADC1_BASE, 3, ADC_TRIGGER_PROCESSOR, 0);
ADCSequenceStepConfigure(ADC1_BASE, 3, 0, ADC_CTL_D | ADC_CTL_CH0 |
ADC_CTL_IE | ADC_CTL_END);
//這裏我們選擇了兩路差工作模式ADC_CTL_D
ADCSequenceEnable(ADC1_BASE, 3);
ADCIntClear(ADC1_BASE, 3);
}//使能
bool isRisk(){//數據採集程序
GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_1, 255);
ADCProcessorTrigger(ADC1_BASE, 3);
while(!ADCIntStatus(ADC1_BASE, 3, false));
ADCIntClear(ADC1_BASE, 3);
ADCSequenceDataGet(ADC1_BASE, 3, pui32ADC0Value);
//AIN0(PE3) - AIN1(PE2)
LCD_Draw_Num(pui32ADC0Value[0],0,7,0,false);
LCD_Draw_Line_Clear(6,false);
if(pui32ADC0Value[0] > 500) return true;
else return false;
}
關於ADc的引腳, 參考reference
關於ADC的模式:
參考reference