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.

基于tm4c123g的adc模块采集两个正弦波

采集的时候设置两个通道CH0和CH1,然后用ADCSequenceDataGet(ADC_BASE, 1, pui32ADC0Value)读取采样值的时候,如果想要将两个正弦波的采样值各自赋值给两个数组,怎么知道存储的数据中哪些是通道CH0采到的,哪些是CH1采到的

  • ADC总共有四个采样序列,每个采样序列可以捕获的通道数或者说采样次数是不一样的,分别是8,4,4,1,step就是配置这个采样次数。
    ADCSequenceStepConfigure(uint32_t ui32Base, uint32_t ui32SequenceNum,
    uint32_t ui32Step, uint32_t ui32Config)
    比如SS0可以有8次采样,那么
    ADCSequenceStepConfigure(ADC0_BASE, 0, 0, ADC_CTL_CH1);
    ADCSequenceStepConfigure(ADC0_BASE, 0, 1, ADC_CTL_CH2);
    ADCSequenceStepConfigure(ADC0_BASE, 0, 2, ADC_CTL_CH3);
    ADCSequenceStepConfigure(ADC0_BASE, 0, 3, ADC_CTL_CH4 | ADC_CTL_IE);
    ADCSequenceStepConfigure(ADC0_BASE, 0, 4, ADC_CTL_CH5);
    ADCSequenceStepConfigure(ADC0_BASE, 0, 5, ADC_CTL_CH6);
    ADCSequenceStepConfigure(ADC0_BASE, 0, 6, ADC_CTL_CH7);
    ADCSequenceStepConfigure(ADC0_BASE, 0, 7, ADC_CTL_CH8 | ADC_CTL_IE | ADC_CTL_END);
    表示第一次采样ADC_CTL_CH1,第二次采样ADC_CTL_CH2,这样依次类推,每次的采样结果都保存在FIFO数组中的,不然你就不能知道数组的那个值对应哪个通道的。
  • 如果我想用采样序列3来采样两个正弦波,并将它们的值赋给两个数组,请问具体要怎么实现
    我这样是哪里出错了


    #define ADC_BASE0 ADC0_BASE // 使用ADC0
    #define ADC_BASE1 ADC1_BASE
    #define SequenceNum 3 // 使用序列3

    void Init_ADC_Detect()
    {

    // 使能 ADC0外设
    ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC0);
    ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC1);
    // 使能Port B外设端口
    ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);

    // 选择PB4作为模数装换ADC的管脚
    ROM_GPIOPinTypeADC(GPIO_PORTB_BASE, GPIO_PIN_4);
    ROM_GPIOPinTypeADC(GPIO_PORTB_BASE, GPIO_PIN_5);



    ROM_ADCSequenceConfigure(ADC0_BASE, SequenceNum, ADC_TRIGGER_PROCESSOR, 0);
    ROM_ADCSequenceConfigure(ADC1_BASE, SequenceNum, ADC_TRIGGER_PROCESSOR, 0);

    ROM_ADCSequenceStepConfigure(ADC0_BASE, SequenceNum, 0, ADC_CTL_CH10 | ADC_CTL_IE);
    ROM_ADCSequenceStepConfigure(ADC1_BASE, SequenceNum, 0, ADC_CTL_CH11 | ADC_CTL_IE);

    ROM_ADCSequenceEnable(ADC0_BASE, SequenceNum);
    ROM_ADCSequenceEnable(ADC1_BASE, SequenceNum);

    ROM_ADCIntClear(ADC0_BASE, SequenceNum);
    ROM_ADCIntClear(ADC1_BASE, SequenceNum);

    }

    int main(void)
    {
    bool bRefresh = false;
    unsigned int i=0;

    uint32_t pui32ADC0Value[1]={0};
    uint32_t pui32ADC1Value[1]={0};
    uint32_t sample0[2048]={0};
    uint32_t sample1[2048]={0};

    SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN |SYSCTL_XTAL_16MHZ);

    LCD_Enable();

    LCD_Init();

    LCD_ScreenClr();

    Init_ADC_Detect();


    while(i<2048)
    {
    ROM_SysCtlDelay(125*(SysCtlClockGet() /3000));
    ADCProcessorTrigger(ADC0_BASE, SequenceNum);
    ADCProcessorTrigger(ADC1_BASE, SequenceNum);
    while(!ADCIntStatus(ADC0_BASE, SequenceNum, false))
    {
    }
    while(!ADCIntStatus(ADC1_BASE, SequenceNum, false))
    {
    }
    ADCIntClear(ADC0_BASE, SequenceNum);
    ADCIntClear(ADC1_BASE, SequenceNum);

    ADCSequenceDataGet(ADC0_BASE, SequenceNum, pui32ADC0Value);
    ADCSequenceDataGet(ADC1_BASE, SequenceNum, pui32ADC1Value);
    sample0[i] = pui32ADC0Value[0];
    sample1[i] = pui32ADC1Value[0];
    i++;
    }