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.

[参考译文] CCS/TM4C1294NCPDT:TM4C1294 ADC 采样问题

Guru**** 2460850 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/652039/ccs-tm4c1294ncpdt-tm4c1294-adc-sample-problems

器件型号:TM4C1294NCPDT

工具/软件:Code Composer Studio

大家好、

我想使用以下设置转换1个序列发生器上的3个模拟输入。

当我调试代码时、看起来我的 FIFO 有问题。

在第一个中断时,"adcBuffer2"变量中存储了3个值。 在接下来的中断中、adcBuffer2存储了6个值。 我不明白这是为什么发生的。

你有什么理想主义者吗?

//
//库生成
//
#include "stdbool.h"
#include 
#include 

//
库 TivaWare
//
#include "driverlib/sysctl.h"
#include "driverlib/interrupt.h"
#include "driverlib/adc.h"
#include "inc/tm4c1294nct.h"
#include "inc/hw_memmap.h"

//
库自有
////









include "intbule/inc0 /adt/intract/inc0






–/adt/inc32_intract/adt/inc0–void /adt/adt/adt/inc0–/adtid/inc0–intract/adt/inc/inc/adt/inc/inc/inc/inc/adt/intractuintbule0/inc/inc/inc/inc/inc/inc/inc/inc/inc/adt/inc/inc32_buffe/inc/inc/inc/inc/inc/inc/inc

ADCSequenceDataGet (ADC0_BASE、0、ADCBuffer2);


adcGetValues=1;


}


void main (void){

adcGetValues=0;


uint32_t sysclock_read=0;
sysclock_read=C0SysClockFreqSet (SYSCTL_OSC_INT | SYSCTL_USE_PLL | SYSCTL_CFG_VCO_480、120000000);C0SysCtl/ INC12/ ADC2000/
INT_RIST/ ADC2000/ ADC2000/ ADC2000/ ADC2000/ ADC2000/ INT_PRINT0








(ADCK_0)








//
// ADC0使能
//
ADCIntEnable (ADC0_BASE,0);



//
中断 ADC0SS0使能
//
IntEnable (INT_ADC0SS0);

//
启用全局中断
//
IntMasterEnable (ADC0Enable Global Interrupts);

//
GetSequencer 使能
//
ADC0_BASE (ADC0)






;ADC0
Disable (ADC0);ADC0 (ADC0)= ADC0 (ABASE);ADC0 (ADC0)

//ADCSequenceDisable (ADC0_BASE、0);


//
printf ("ADC Value1:%d\n"、adcBuffer2[0]);
printf ("ADC Value2:%d\n"、adcBuffer2[1]);
printf ("ADC Value3:%d\n"、 adcBuffer2[2]);
*/
adcGetValues = 0;

ADCIntEnable (ADC0_BASE、0);
IntEnable (INT_ADC0SS0);
ADCSequenceEnable (ADC0_BASE、 0);


}


}

}

#include 
#include 
#include 

#include "inc/tm4c1294ncpdt.h"
#include "inc/hw_memmap.h"
#include "driverlib/sysctl.h"
#include "driverlib/adc.h"
#include "driverlib/gpio.h"#include "driverlib/ipc.h"(











sys_rtc) 0 (

sys_rtc


)、启用外设0 (sys_rtc)、sys_init/sys_rult2 (sys_clock_init/sys_ipt2) GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3);

//
将 ADC 配置为在480MHz 下使用 PLL、全速率偏差30以获得16MHz
//
ADCClockConfigSet (ADC0_BASE、ADC_CLOCK_SRC_PLL | ADC_CLOCK_RATE_FULL、30);ADCSClockConfigSet (ADC0_base、

ADC0);ADCLOCK (禁用 ADC0_BASE_SRC_PLL)

//
//读取当前 ADC 配置
//
adcClock=ADCClockConfigGet (ADC0_BASE,&adcDiv);
printf ("ADC 时钟为:0x%x,div:0x%x\n",adcClock,adcDiv);

//
硬件平均:由2的 faktor 表示-> ADC16、64




、ADC/ ADC0基准/ ADC64




/ ADC16、ADC0 源 ADC0、序列发生器0、触发器:始终、优先级:0
//
ADCSequenceConfigure (ADC0_BASE、0、ADC_TRIGGER_Always、0);

//
ADC 序列发生器阶跃
// 1. Source-ADC -> ADC0_BASE
// 2. 源序列发生器-> 0
// 3. 采样值取决于 FIFO 的深度、按序列发生器0、最多为7 (0-7)
// 4。 CONFIG->选择输入通道 AINx、中断规范
//
ADCSequenceStepConfigure (ADC0_BASE、0、0、ADC_CTL_CH0);
ADCSequenceStepConfigure (ADC0_BASE、 0、1、ADC_CTL_CH1);
ADCSequenceStepConfigure (ADC0_BASE、0、 2、(ADC_CTL_CH2 | ADC_CTL_IE | ADC_CTL_END);

}

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

    嗯、这个顺序不能正确。 您在初始化并启用中断之前已启用中断源。

    [引用用户="xenon185"/> ADC Init ADC2_init ();IntPrioritySet (INT_ADC0SS0、0x00);// ADC0SS0中断源// ADCIntRegister (ADC0C0_base、0、ADC0IntHandler);//寄存器中断到 NVIC // ADC0Int0 / ADC0Int/ ENABLETE / ADC0Int0 (ADC0Int/ ADC0);//启用 ADC0Int/ ADC0Int/ ADC0Int/ ADC0Int/ ADC0Int/ ADC0 (ADC0Int/ ADC0Int/ ADC0Int/ ADC0)

    Robert

    BTW、理想主义者和理想主义者都不是一个词。 您要使用的词语可能是创意。

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

    感谢您的回复。  

    现在、我也更改了订单、您的解释也是如此。  

    但是、我的问题是、如果有更多数据进入缓冲区、那么步骤仍然存在。  当我调试代码时、请参阅上图中的内容。

    
    
    //
    //中断 ADC0SS0使能
    //
    内部使能(INT_ADC0SS0);
    
    //
    ADC0使能
    //
    ADCIntEnable (ADC0_BASE、0); 

    祝大家圣诞快乐。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我不确定、但怀疑它与配置序列以始终触发、然后禁用和重新启用序列有关。 在采集前三个样本后禁用序列、ADC 被触发以启动另外三个样本。 禁用序列、但它已启动。 因此、我想、当您重新启用序列时、您会再获得三个样本、从而在缓冲器中提供六个样本。

    考虑将序列设置为"ADC_TRIGGER_PROCESSOR"、然后在每次准备好再采集三个样本时调用函数 ADCProcessorTrigger()。 您无需禁用和重新启用该序列。