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.

[参考译文] TM4C1294NCPDT:ADC 的初始化和配置

Guru**** 2620655 points

Other Parts Discussed in Thread: TM4C1294NCPDT

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/885773/tm4c1294ncpdt-initialization-and-configuration-of-adc

器件型号:TM4C1294NCPDT

我很难从 TM4C1294NCPDT 的 ADC1 -采样序列发生器3 - AI2中获取一些数据。  

我遵循了数据表中的每个步骤。

但不会获取任何数据。 我使代码变得模糊:

#include 

uint32_t valor = 0;

void ADC1SS3_Handler (void){
valor = ADC1->SSFIFO3;
ADC1->ISC |=(1UL <<3);
}

int main (){

//ADC1 - SS3
/PE1 - AIN2 -模数转换器输入2

sysctl - 1 (UL)|4)|(UL)|(UGP4)|(UL)|(UTRF<4)|(UL)|(UTRF<4)
/*为开关生成 PORTF4输入*/
GPIOF_AHB->DEN |=(1UL <<4);/*使 PORTF4-0数字引脚*/

SYSCTl->RCGCADC |=(1UL <<1);//使能 ADC 1的时钟

GPIOE_AHB->AFSEL |=(1UL
</1UL);/ END</END<1 (1);~ 1 GPIOE<1) //make this pin an analog input
GPIOE_AHB->AMSEL |=(1UL << 1);//禁用模拟隔离电路


ADC1->ACTSS &=~(1UL << 3);//确保采样序列发生器禁用
ADC1->EMUX =(0xF <<12);//选择事件(1USSX3->ADSSX3-0
);//选择 ADSSX3-[0>ADSSX3->ADSSUX3->ADX3->0;//选择 ADSSX3->ADSSX3-[0]0 = 0;选择 ADSSX3->ADSSX3->ADSSUSMUX3->ADX3-

ADC1->SSCTL3 = 0x6;
ADC1->IM |=(1UL <<3);
ADC1->ACTSS =(1UL <<3);
ADC1->ISC |=(1UL <<3);


NVIC_EnableIRQ (ADC1SS3_IRQn);


while (1){
}

我看不出哪里出错了。  

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

    Thiago 您好!

    比较您对 TivaWare 序列所做的操作、您会发现许多步骤顺序不正确、尤其是在中断配置方面。

    根据我们的论坛指南(请 参阅 https://e2e.ti.com/support/microcontrollers/other/f/908/t/695568)、我们不支持在 E2E 上进行直接寄存器编程。 您应该为此应用使用 TivaWare 及其提供的 API: http://www.ti.com/tool/SW-TM4C

    话虽如此、如果您必须使用 DRM 进行此操作、请研究以下 API 以了解它们如何按顺序配置 ADC:

    IntDisable (INT_ADC0SS0);
    ADCIntDisable (ADC0_BASE、0U);
    ADCSequenceDisable (ADC0_BASE、0U);//在禁用序列的情况下、现在可以安全地加载新的配置参数
    ADCSequenceConfigure (ADC0_BASE、0U、ADC_TRIGGER_TIMER、0U);
    ADCSequenceStepConfigure (ADC0_BASE、0U、0U、ADC_CTL_CH0| ADC_CTL_END | ADC_CTL_IE);
    ADCSequenceEnable (ADC0_BASE、0U);//设置配置后、重新启用序列发生器
    ADCIntClear (ADC0_BASE、0U);
    ADCIntEnable (ADC0_BASE、0U);
    IntEnable (INT_ADC0SS0); 

    当然、您可能不会使用 ADC_TRIGGER_TIMER、但您可以将其视为要使用的内容、对于 TivaWare、它看起来像 ADC_TRIGGER_Always。

    您可能还需要进一步配置 ADC 时钟、如所示:

    ADCClockConfigSet (ADC0_BASE、ADC_CLOCK_SRC_PIOSC | ADC_CLOCK_RATE_Half、1); 

    如果是这样、则在时钟配置后包括一个小延迟-大约10ms -以使时钟在外设配置之前稳定下来。