主题中讨论的其他器件: TM4C123
大家好、
使用 TM4C123GH6PM 定制板的 IAM。 IAM 尝试在差分模式下使用内部 ADC、但在某种程度上、当我使用多个 ADC 引脚时、我的 ADC 输出不能正确。
我遵循 ADC 差分示例、它适用于使用采样序列发生器0的单通道。
但是,当我将多个引脚与采样序列发生器2一起使用时,ADC FIFO 结果不正确,因为 IAM 仅在上获得信号
ui32ADC0Value[0]
ui32ADC0Value[1]显示的结果不正确。
IA 将首先测试两个输入通道。
以下是我的代码。 IAM 使用计时器触发 ADC、采样率为256Hz
#include
#include
#include
#include
#include "inc/tm4c123ghp6.h"
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "inc/hw_gpio.h"
#include "driverlib/pinc.h"
#driverlib/samplesido.dipt.ide"
#include "driverlib/outputt.ido#include "out32"
;#driveript/outputt.idio.idt.idt.ide"#include "out32_outputt/udesnategr.idio.idt.ide"#include "outputt.idr32_outputt.idr.idr.idr.idr.idr.idr.idr.idr.idr.ide"#include "out32_outputt.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr.idr.idt.idr.idr.idr./
void Timer0IntHandler (void)
{
TimerIntClear (TIMER0_BASE、TIMER_TINA_TIMEOUT);
//GPIOPinWrite (GPIO_PORTB_BASE、GPIO_PIN_3、0xFF);
ADCSequenceConfigure (ADC0_BASE、2、ADC_TRIGGER_TIMER、0);
//m=m+1;
}
int main (void)
{
// uint32_t ui32ADC0Value[8];
uint32_t ui32Period;
SysCtlClockSet (SYSCTL_SYSDIV_2_5 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHz);// 80MHz 时钟
ui32SysClkFreq = 8000000;
/******* 引脚 INTILIAZATION ********* /
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOE);
while (!(SysCtlPeripheralReady (SYSCTL_Periph_GPIOE)));
GPIOPinTypeADC (GPIO_Porte _BASE、GPIO_PIN_3|GPIO_PIN_2|GPIO_PIN_1_GPIO_PIN_0);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOD);
while (!(SysCtlPeripheralReady (SYSCTL_Periph_GPIOD)));
HWREG (GPIO_PORTD_BASE_GPIO_O_O_LOCK)= GPIO_LOCK_KEY;
HWREG (GPIO_PORTD_BASE_GPIO_O_O_CR)|= GPIO_PIN_7;
GPIOPinTypeADC (GPIO_PORTD_base、GPIO_PIN_3|GPIO_PIN_2|GPIO_PIN_1_GPIO_PIN_0);
/******* ADC INTILIAZATION ********** /
SysCtlPeripheralDisable (SYSCTL_Periph_ADC0);
SysCtlPeripheralReset (SYSCTL_Periph_ADC0);
SysCtlPeripheralEnable (SYSCTL_Periph_ADC0);
while (!(SysCtlPeripheralReady (SYSCTL_Periph_ADC0)));
ADCSequenceDisable (ADC0_BASE、2);
ADCSequenceStepConfigure (ADC0_BASE、2、0、ADC_CTL_D|ADC_CTL_CH0);
ADCSequenceStepConfigure (ADC0_BASE、2、1、ADC_CTL_D|ADC_CTL_CH1);
ADCSequenceStepConfigure (ADC0_BASE、2、ADC_CTL_D|ADC_CTL_CH2);
ADCSequenceStepConfigure (ADC0_BASE、2、3、ADC_CTL_D|ADC_CTL_CH3|ADC_CTL_IE|ADC_CTL_END);
ADCSequenceEnable (ADC0_BASE、2);
/******* TIMER0 INTILIAZATION ******** /
SysCtlPeripheralEnable (SYSCTL_Periph_TIMER0);
TimerConfigure (TIMER0_BASE、TIMER_CFG_PERIODICASE);
ui32Period = 80000000/256;
TimerLoadSet (TIMER0_BASE、TIMER_A、ui32Period-1);
TimerControlTrigger (TIMER0_BASE、TIMER_A、TRUE);
IntEnable (INT_TIMER0A);
TimerIntEnable (TIMER0_BASE、TIMER_TINA_TIMEOUT);
TimerEnable (TIMER0_BASE、TIMER_A);
IntMasterEnable();
while (1)
{
ADCIntClear (ADC0_BASE、2);
while (!ADCIntStatus (ADC0_BASE、2、false))
{
}
ADCSequenceDataGet (ADC0_BASE、2、ui32ADC0Value);
outputsamples1 = ui32ADC0Value[0];
outputsamples2 = ui32ADC0Value[1];
outputsamples3 = ui32ADC0Value[2];
outputsamples4 = ui32ADC0Value[3];
}
}
请建议解决方案。