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.

[参考译文] ADS7950:我需要一个用于设置转换器的驱动程序和 W/R 转换器

Guru**** 2386600 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1022584/ads7950-i-need-a-driver-for-seting-up-and-w-r-the-converter

器件型号:ADS7950

我尝试通过折页方式执行上述操作、只有一个 ADC 中断工作(频率更高)

我使用的代码如下:

我不理解将使 ADC 被触发的定时器和 ADC 之间的切换。

2个 ADC 配置:

void ADC_init (void)

//======================================================== 初始化用于 PD 采样的 ADC0模块===================================
//启用 ADC0模块。
SysCtlPeripheralEnable (SYSCTL_Periph_ADC0);
ADCSequenceDisable (ADC0_BASE、1);

ADCClockConfigSet (ADC0_BASE、ADC_CLOCK_SRC_PLL | ADC_CLOCK_RATE_FULL、15);

//等待 ADC0模块准备就绪。
while (!SysCtlPeripheralReady (SYSCTL_Periph_ADC0))

//初始化 Timer0 -基址且计时器为 TIMERA 以触发 ADC 转换
ADCSequenceConfigure (ADC0_BASE、PD_SAMPLE_SEQ、ADC_TRIGGER_TIMER、PD_SEQ_PRIORITY);//序列发生器1 -->

ADCSequenceStepConfigure (ADC0_BASE、PD_SAMPLE_SEQ、PD1_STEP、ADC_CTL_CH0);
ADCSequenceStepConfigure (ADC0_BASE、PD_SAMPLE_SEQ、PD2_STEP、ADC_CTL_CH1);
ADCSequenceStepConfigure (ADC0_BASE、PD_SAMPLE_SEQ、PD3_STEP、ADC_CTL_CH2);
ADCSequenceStepConfigure (ADC0_BASE、PD_SAMPLE_SEQ、PD4_STEP,(ADC_CTL_CH3 | ADC_CTL_END |ADC_CTL_IE);

ADCSequenceEnable (ADC0_BASE、PD_SAMPLE_SEQ);
ADCHardwareOversampleConfigure (ADC0_BASE、0);
ADCIntRegister (ADC0_BASE、PD_SAMPLE_SEQ、ADC0PDIntHandler);
ADCIntClear (ADC0_BASE、PD_SAMPLE_SEQ);
ADCIntEnable (ADC0_BASE、PD_SAMPLE_SEQ);

//======================================================== 将 ADC1初始化为 TH 和 LIM 采样===========================================
//启用 ADC1模块。
SysCtlPeripheralEnable (SYSCTL_Periph_ADC1);
ADCSequenceDisable (ADC1_base、1);

ADCClockConfigSet (ADC1_base、ADC_CClock_SRC_PLL | ADC_CClock_RATE_FULL、15);
//等待 ADC1模块准备就绪。
while (!SysCtlPeripheralReady (SYSCTL_Periph_ADC1))

//初始化 timer0 -基址和计时器为 TIMERB 以触发 ADC 转换
ADCSequenceConfigure (ADC1_base、TH_AND_LIM_SAMPLE_SEQ、ADC_TRIGGER_TIMER、0/* TH_AND_LIM_SEQ_PRIORIESD*/);//序列发生器0 --> TimerControlTrigger (TIMER0_BASE、TIMER_B、TRUE);

ADCSequenceStepConfigure (ADC1_base、TH_AND_LIM_SAMPLE_SEQ、LIMIT_MUX_STEP、ADC_CTL_CH16);
ADCSequenceStepConfigure (ADC1_base、TH_AND_LIM_SAMPLE_SEQ、TH_MUX_STEP、ADC_CTL_CH17);
ADCSequenceStepConfigure (ADC1_base、TH_AND_LIM_SAMPLE_SEQ、TH9_STEP、ADC_CTL_CH11);
ADCSequenceStepConfigure (ADC1_base、TH_AND_LIM_SAMPLE_SEQ、TH10_STEP、ADC_CTL_CH12);
ADCSequenceStepConfigure (ADC1_base、TH_AND_LIM_SAMPLE_SEQ、TH11_STEP、ADC_CTL_CH13);
ADCSequenceStepConfigure (ADC1_base、TH_AND_LIM_SAMPLE_SEQ、TH12_STEP、ADC_CTL_CH14);
ADCSequenceStepConfigure (ADC1_base、TH_AND_LIM_SAMPLE_SEQ、TH13_STEP、ADC_CTL_CH15);
ADCSequenceStepConfigure (ADC1_BASE、TH_AND_LIM_SAMPLE_SEQ、INTERNAL_TH_STEP、(ADC_CTL_TS | ADC_CTL_END |ADC_CTL_IE));

ADCSequenceEnable (ADC1_base、TH_AND_LIM_SAMPLE_SEQ);
ADCHardwareOversampleConfigure (ADC1_base、0);//???????
ADCIntRegister (ADC1_base、TH_AND_LIM_SAMPLE_SEQ、ADC1THIntHandler);
ADCIntClear (ADC1_base、TH_AND_LIM_SAMPLE_SEQ);
ADCIntEnable (ADC1_base、TH_AND_LIM_SAMPLE_SEQ);

2个计时器配置:

void bothTimer_init (void)

uint32_t ulperiod;
uint32_t ulperiod1;

SysCtlPeripheralEnable (SYSCTL_Periph_TIMER0);
while (!SysCtlPeripheralReady (SYSCTL_Periph_TIMER0))


TimerClockSourceSet (TIMER0_BASE、TIMER_CLOCK 系统);

SysCtlPeripheralEnable (SYSCTL_Periph_Timer1);
while (!SysCtlPeripheralReady (SYSCTL_Periph_Timer1))


TimerClockSourceSet (Timer1_base、timer_clock_system);

//更改为 ADC 的计时器触发器
//将 Timer_B 配置为16位周期定时器。
TimerConfigure (TIMER0_BASE、/*TIMER_CFG_SPLIT_PAIR |*/ TIMER_CFG_PERIODICRACASE);
TimerConfigure (Timer1_base、/* timer_CFG_SPLIT_PAIR |*/ timer_CFG_PERIODICRAY);

ulperiod =((g_ui32SysClock - 1)/PD_TIMER_FREQ);//PD_TIMER_FREQ
ulperiod1 =((g_ui32SysClock - 1)/(th_timer_FREQ));//

TimerLoadSet (TIMER0_BASE、TIMER_A、ULPERIOD);
TimerLoadSet (Timer1_base、timer_B、ulperiod1);
// IntMasterEnable();
// TimerIntEnable (TIMER0_BASE、TIMER_TIMB_TIMEOUT);

//对于 ADV 触发器、启用处理器(NVIC)上的 Timer0B 中断。
TimerControlTrigger (TIMER0_BASE、TIMER_A、TRUE);
TimerControlTrigger (Timer1_base、timer_B、true);

TimerDisable (TIMER0_BASE、TIMER_A);
TimerDisable (Timer1_base、timer_B);
//启用 Timer0B。
TimerEnable (TIMER0_BASE、TIMER_A);
TimerEnable (Timer1_base、timer_B);

什么缺失或错误?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Maccabi、您好!

    您能否提供有关您如何使用该器件的更多信息?您最终想要实现的目标是什么? 您说只有1个中断在工作(频率更高)... 您说的更高频率是什么意思? 您是否打算将器件的 Alarm 功能用于中断?

    此致、

    Aaron Estrada