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.

如何将MSP-EXP430F5438_User_Expertience的单一FFT变换升级为双通道变换的FFT样例

大家好:

    我们购买了M430F5438A几套开发板,希望进行FFT的开发!

    采用两路正弦信号:    a). 频率:1500HZ; 相位:0; 幅值:1V, 信号连接到P6.7,A7 ADC输入;

                                      b). 频率:1500HZ; 相位:35度; 幅值:10mV,信号输入端口MIC(M1)信号连接到P6.5,A5 ADC输入----内含运算放大器;

     我们采用如下编程方式,请问:问题在哪?

     初始化:     AUDIO_PORT_OUT |= MIC_POWER_PIN;

                        AUDIO_PORT_OUT &= ~MIC_INPUT_PIN;

                        AUDIO_PORT_SEL |= MIC_INPUT_PIN;

                        P6OUT |= MIC_POWER_PIN;
                        P6OUT &= ~0x80;
                        P6DIR &= ~(MIC_INPUT_PIN + 0x80);
                        P6SEL |= 0x80;

                       

                       UCSCTL8 |= MODOSCREQEN;
                       ADC12CTL0 &= ~ADC12ENC; // Disable conversions to configure ADC12
                       ADC12CTL0 = ADC12ON + ADC12SHT02 + ADC12MSC; // Configure ADC12 to sample a sequence of channels, once
                       ADC12CTL1 = ADC12SHP + ADC12CONSEQ_3 + ADC12SSEL_2 + ADC12SHS_3;
                      ADC12CTL2 = ADC12RES_2; // Select 12-bit resolution
                      ADC12MCTL0 = ADC12INCH_5;
                      ADC12MCTL1 = ADC12INCH_7|ADC12EOS;
                     ADC12CTL0 |= ADC12ENC; // Enable
                     ADC12IE = BIT0 + 0x80;

// Initialize Timer_B to be used as ADC12 trigger
                     TBCTL = TBSSEL_2 + TBCLR; // Use SMCLK as Timer_B source
                     TBCCR0 = 2047; // Initialize TBCCR0 (period register)
                     TBCCR1 = 2047 - 100; // Initialize TBCCR1 (ADC12 trigger)
                     TBCCTL0 = 0x0000;
                    TBCCTL1 = OUTMOD_7;
                    TBCCTL2 = 0x0000;
                    TBCCTL3 = 0x0000;
                    TBCCTL4 = 0x0000;
                    TBCCTL5 = 0x0000;
                    TBCCTL6 = 0x0000;

中断处理程序:

#pragma vector=ADC12_VECTOR
__interrupt void ADC12_ISR(void)
{

      switch (__even_in_range(ADC12IV, ADC12IV_ADC12IFG15))
      {
              case ADC12IV_NONE: break; // Vector 0: No interrupt
              case ADC12IV_ADC12OVIFG: break; // Vector 2: ADC overflow
              case ADC12IV_ADC12TOVIFG: break; // Vector 4: ADC timing overflow
              case ADC12IV_ADC12IFG0:
                       buffer_s[buf_index_s++] = ADC12MEM0;
                       buffer_s[buf_index_s++] = 0;

                       if (buf_index_s == 1024){
                            buf_index_s = 0;
                            __bic_SR_register_on_exit(LPM0_bits);
                       }
                       else if (buf_index_s == 512) {
                           __bic_SR_register_on_exit(LPM0_bits);
                       }


                      break; // Vector 6: ADC12IFG0
              case ADC12IV_ADC12IFG1: // Vector 8: ADC12IFG1
                      buffer[buf_index++] = ADC12MEM1;
                      buffer[buf_index++] = 0;

                      if (buf_index == 1024){
                           buf_index = 0;
                           __bic_SR_register_on_exit(LPM1_bits);
                      }
                     else if (buf_index == 512){
                          __bic_SR_register_on_exit(LPM1_bits);
                      }
                      break;
             case ADC12IV_ADC12IFG2: break; // Vector 10: ADC12IFG2
             case ADC12IV_ADC12IFG3: break; // Vector 12: ADC12IFG3
             case ADC12IV_ADC12IFG4: break; // Vector 14: ADC12IFG4
             case ADC12IV_ADC12IFG5: break; // Vector 16: ADC12IFG5
             case ADC12IV_ADC12IFG6: break; // Vector 18: ADC12IFG6
             case ADC12IV_ADC12IFG7: break; // Vector 20: ADC12IFG7
             case ADC12IV_ADC12IFG8: break; // Vector 22: ADC12IFG8
             case ADC12IV_ADC12IFG9: break; // Vector 24: ADC12IFG9
             case ADC12IV_ADC12IFG10: break; // Vector 26: ADC12IFG10
             case ADC12IV_ADC12IFG11: break; // Vector 28: ADC12IFG11
             case ADC12IV_ADC12IFG12: break; // Vector 30: ADC12IFG12
             case ADC12IV_ADC12IFG13: break; // Vector 32: ADC12IFG13
             case ADC12IV_ADC12IFG14: break; // Vector 34: ADC12IFG14
             case ADC12IV_ADC12IFG15: break; // Vector 34: ADC12IFG14
      }
}