Thread 中讨论的其他器件: EK-TM4C1294XL
尊敬的香榭丽舍
作为客户反馈、他们通过 TM4C1294KCPDT 上的差分输入使用 ADC 功能、但无法实现2Mbps 采样率。
尽管在 EK-TM4C1294XL 上使用示例代码(Tivaware 上的 different.c)、但我们仍然有很大的 ADC 代码差异。
请告诉我们如何 通过 ADC 差分输入实现最大采样率(2Mbps)?
如果您有任何建议、请随时告知我们。
非常感谢。
此致、
Janet
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
尊敬的香榭丽舍
作为客户反馈、他们通过 TM4C1294KCPDT 上的差分输入使用 ADC 功能、但无法实现2Mbps 采样率。
尽管在 EK-TM4C1294XL 上使用示例代码(Tivaware 上的 different.c)、但我们仍然有很大的 ADC 代码差异。
请告诉我们如何 通过 ADC 差分输入实现最大采样率(2Mbps)?
如果您有任何建议、请随时告知我们。
非常感谢。
此致、
Janet
您好 Amit:
按如下方式配置 ADC。谢谢
/*
* main.c
*
#include
#include
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "inc/tm4c1294kcpdt.h"
#include "driverlib/pin_map.h"
#include "driverlib/sysctl.h"
#include "driverlib/debug.h"
#include "driverlib/gpio.h"
#include "driverlib/adc.h"
#include "driverlib/rom.h"
#include "driverlib/timer.h"
#include "driverlib/interrupt.h"
//**** 常数*****
const int sampleFreq = 8000;//采样频率
//**** 变量****
uint32_t ADC0Value[1024];
uint16_t SamplePeriod;
uint32_t ui32SysClock;
uint32_t uState;
uint32_t diff;
//中断
空 Timer0IntHandler (空){
ROM_TimerIntClear (TIMER0_BASE、TIMER_TINA_TIMEOUT);
uint32_t ugpio;
ugpio = GPIOPinRead (GPIO_Porta_base、GPIO_PIN_4);
if (ugpio =GPIO_PIN_4)
{
GPIOPinWrite (GPIO_Porta_base、GPIO_PIN_4、0);
}
其他
{
GPIOPinWrite (GPIO_Porta_base、GPIO_PIN_4、GPIO_PIN_4);
}
}
void ADC0SS3IntHandler (void){
ROM_ADCSequenceDataGet (ADC0_BASE、3、ADC0Value);//从 ADC 获取数据并将其存储在 ADC0Value 中
ADCIntClear (ADC0_BASE、3);
DIFF = ADC0Value[0];
if (diff >= 200)
{
GPIOPinWrite (GPIO_Porta_base、GPIO_PIN_5、GPIO_PIN_5);
}
如果(差动<= 100)则为其他值
{
GPIOPinWrite (GPIO_Porta_base、GPIO_PIN_5、0);
}
}
//定义
void systemsetup (void){
//***时钟
#if defined (target_IS_TM4C129_RA0)||\
已定义(TARGET_IS_TM4C129_RA1)||\
已定义(TARGET_IS_TM4C129_RA2)
ui32SysClock = SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz |
SYSCTL_OSC_MAIN |
SYSCTL_USE_PLL |
SYSCTL_CFG_VCO_480)、120000000);
其他
SysCtlClockSet (SYSCTL_SYSDIV_10 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN |
SYSCTL_XTAL_25MHz);
#endif
//***外设启用
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_ADC0);
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_TIMER0);
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOD);
// ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOE);
ROM_SysCtlDelay (100);
HWREG (SYSCTL_BASE + 0x538)= 0x03;
ROM_SysCtlDelay (50);
HWREG (SYSCTL_BASE + 0x538)= 0x00;
ROM_SysCtlDelay (100);
//*** ADC0
ROM_ADCReferenceSet (ADC0_BASE、ADC_REF_INT);
ROM_ADCSequenceConfigure (ADC0_BASE、3、ADC_TRIGGER_TIMER、0);
// ROM_ADCSequenceStepConfigure (ADC0_BASE、2、0、`15);
// ROM_ADCSequenceStepConfigure (ADC0_BASE、2、1、ADC_CTL_CH14 | ADC_CTL_IE | ADC_CTL_END);
// ROM_ADCSequenceStepConfigure (ADC0_BASE、2、0、ADC_CTL_CH7 | ADC_CTL_D | ADC_CTL_IE | ADC_CTL_END);
ROM_ADCSequenceStepConfigure (ADC0_BASE、3、0、ADC_CTL_CH7|ADC_CTL_D|ADC_CTL_IE|ADC_CTL_END);//ADC_CTL_CH7
ROM_ADCSequenceEnable (ADC0_BASE、3);
//*** GPIO
// PD0、PD1作为 ADC
ROM_GPIOPinTypeADC (GPIO_PORTD_base、GPIO_PIN_0 | GPIO_PIN_1);
// PD2、PD3作为输入
ROM_GPIOPinTypeGPIOInput (GPIO_PORTD_base、GPIO_PIN_2 | GPIO_PIN_3);
GPIOPadConfigSet (GPIO_PORTD_base、GPIO_PIN_2 | GPIO_PIN_3、
GPIO_Strength _2mA、GPIO_PIN_TYPE_STD);
// PA4、PA5作为输出
ROM_GPIOPinTypeGPIOOutput (GPIO_Porta_base、GPIO_PIN_4 | GPIO_PIN_5);
GPIOPadConfigSet (GPIO_Porta_base、GPIO_PIN_4 | GPIO_PIN_5、
GPIO_Strength _12mA、GPIO_PIN_TYPE_STD);
//***计时器
ROM_TimerConfigure (TIMER0_BASE、TIMER_CFG_PERIODICASE);
ROM_TimerLoadSet (TIMER0_BASE、TIMER_A、ui32SysClock / 200000);
TimerControlTrigger (TIMER0_BASE、TIMER_A、TRUE);
//***中断
ROM_IntEnable (INT_TIMER0A);
ROM_TimerIntEnable (TIMER0_BASE、TIMER_TINA_TIMEOUT);
ROM_IntEnable (INT_ADC0SS3);
ROM_ADCIntEnable (ADC0_BASE、3);
ROM_IntMasterEnable();
ROM_TimerEnable (TIMER0_BASE、TIMER_A);
}
int main (void){
systemsetup();
while (1){
}
返回0;
}
测试结果:
2.PD0 PD1与3V3连接。