打印

求助:关于MSP430FR5969的定时器触发多通道ADC转换

[复制链接]
1165|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dwlovehome|  楼主 | 2016-8-29 22:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如题,有个工程需要用到定时器触发ADC采样多路数据(为了进行FFT),然后弄了好几天,资料看了,论坛也搜了,但是好像就是不行。 以下是我自己的代码,本意是ADC进过TB0触发转换两个通道的数据,但是,仿真的时候只能进第一个中断,求助是什么问题,
void IntiSysSample(void)
{
      //设置ADC的GPIO DEMO是A1/P1.1 A7/P2.4
      GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_P1,GPIO_PIN1,GPIO_TERNARY_MODULE_FUNCTION);
      GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_P4,GPIO_PIN2,GPIO_TERNARY_MODULE_FUNCTION);
      
      
      //设置ADCB
      ADC12_B_init(     ADC12_B_BASE,
                        //ADC12_B_SAMPLEHOLDSOURCE_SC,
                        ADC12_B_SAMPLEHOLDSOURCE_3,
                        ADC12_B_CLOCKSOURCE_SMCLK,//ADC12_B_CLOCKSOURCE_ADC12OSC,   //ADC模块时钟 参见库函数参数
                        ADC12_B_CLOCKDIVIDER_1,         //分频数
                        ADC12_B_CLOCKPREDIVIDER__1,     //分频数
                        ADC12_B_NOINTCH);               

        ADC12_B_enable(ADC12_B_BASE);                   //使能ADC
      
        ADC12_B_setupSamplingTimer(ADC12_B_BASE,
                                   ADC12_B_CYCLEHOLD_128_CYCLES,     //ADC转换周期根据实际调整
                                   ADC12_B_CYCLEHOLD_4_CYCLES,     //ADC转换周期根据实际调整  
                                   ADC12_B_MULTIPLESAMPLESENABLE//ADC12_B_MULTIPLESAMPLESDISABLE //ADC12_B_MULTIPLESAMPLESDISABLE //ADC12_B_MULTIPLESAMPLESDISABLE  连续转换使能,多通道
                                   );

        ADC12_B_memoryConfigure(ADC12_B_BASE,
                                ADC12_B_MEMORY_0,
                                ADC12_B_INPUT_A1,
                                ADC12_B_VREFPOS_INTBUF_VREFNEG_VSS,
                                ADC12_B_NOTENDOFSEQUENCE,//ADC12_B_ENDOFSEQUENCE,               //转换结束通道ADC12_B_NOTENDOFSEQUENCE
                                ADC12_B_WINDOW_COMPARATOR_DISABLE,
                                ADC12_B_DIFFERENTIAL_MODE_DISABLE);
   
         ADC12_B_memoryConfigure(ADC12_B_BASE,
                                ADC12_B_MEMORY_1,
                                ADC12_B_INPUT_A10,
                                ADC12_B_VREFPOS_INTBUF_VREFNEG_VSS,
                                ADC12_B_ENDOFSEQUENCE,//ADC12_B_ENDOFSEQUENCE,               //转换结束通道ADC12_B_NOTENDOFSEQUENCE
                                ADC12_B_WINDOW_COMPARATOR_DISABLE,
                                ADC12_B_DIFFERENTIAL_MODE_DISABLE);
        //以下是使用TIMERB的TB0的CCR1触发ADC中断
        //P2.6/TB1 option select Output direction  
        //TIMRB的TB0输出,用来触发ADC转换
       //GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_P2, GPIO_PIN6,GPIO_PRIMARY_MODULE_FUNCTION);
       //Start timer
        TIMER_B_configureUpMode(TIMER_B0_BASE,
                                TIMER_B_CLOCKSOURCE_SMCLK,
                                TIMER_B_CLOCKSOURCE_DIVIDER_1,
                                511,
                                TIMER_B_TBIE_INTERRUPT_DISABLE,
                                TIMER_B_CCIE_CCR0_INTERRUPT_DISABLE,
                                TIMER_B_DO_CLEAR
                                );
        TIMER_B_startCounter(TIMER_B0_BASE,
                             TIMER_B_UP_MODE
                             );

        //Initialize compare mode to generate PWM1
        TIMER_B_initCompare(TIMER_B0_BASE,
                            TIMER_B_CAPTURECOMPARE_REGISTER_1,
                            TIMER_B_CAPTURECOMPARE_INTERRUPT_DISABLE,
                            TIMER_B_OUTPUTMODE_RESET_SET,
                            383
                         );
        //最后开启ADC转换中断
        ADC12_B_clearInterrupt(ADC12_B_BASE,
                               0,
                               ADC12_B_IFG0|ADC12_B_IFG1
                               );
        //Enable memory buffer 0 interrupt
        ADC12_B_enableInterrupt(ADC12_B_BASE,
                                ADC12_B_IE0|ADC12_B_IE1,
                                0,
                                0);

        __delay_cycles(75);                   // reference settling ~75us
        
       ADC12_B_startConversion(ADC12_B_BASE,ADC12_B_MEMORY_0,
                              // ADC12_B_REPEATED_SINGLECHANNEL
                                 ADC12_B_REPEATED_SEQOFCHANNELS
                                 );
      
     /// __bis_SR_register(LPM0_bits +GIE);
      __bis_SR_register(GIE);
}
#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
#pragma vector=ADC12_VECTOR
__interrupt
#elif defined(__GNUC__)
__attribute__((interrupt(ADC12_VECTOR)))
#endif
void ADC12_ISR(void)
{
        
        switch (__even_in_range(ADC12IV, 12)) {
        case  0: break;                         // Vector  0:  No interrupt
        case  2: break;                         // Vector  2:  ADC12BMEMx Overflow
        case  4: break;                         // Vector  4:  Conversion time overflow
        case  6: break;                         // Vector  6:  ADC12BHI
        case  8: break;                         // Vector  8:  ADC12BLO
        case 10: break;                         // Vector 10:  ADC12BIN
        case 12:                                // Vector 12:  ADC12BMEM0 Interrupt
                if (ADC12_B_getResults(ADC12_B_BASE, ADC12_B_MEMORY_0) >= 0x6B4)
                {
                        //Set P1.0 LED on
                        GPIO_setOutputHighOnPin(
                                GPIO_PORT_P1,
                                GPIO_PIN0
                                );
                }
                else {
                        //Set P1.0 LED off
                        GPIO_setOutputLowOnPin(
                                GPIO_PORT_P1,
                                GPIO_PIN0
                                );
         
                }
             ADC12IFGR0 &= ~ADC12IFG0;
              //  __bic_SR_register_on_exit(LPM0_bits);   // Exit active CPU
                break;                                  // Clear CPUOFF bit from 0(SR)
        case 14: {
             //      __bic_SR_register_on_exit(LPM0_bits);   // Exit active CPU
           if (ADC12_B_getResults(ADC12_B_BASE, ADC12_B_MEMORY_1) >= 0x6B4) {
                        //Set P1.0 LED on
                        GPIO_setOutputHighOnPin(
                                GPIO_PORT_P1,
                                GPIO_PIN0
                                );
                }else  {
                        //Set P1.0 LED off
                        GPIO_setOutputLowOnPin(
                                GPIO_PORT_P1,
                                GPIO_PIN0
                                );
                }
           ADC12IFGR1 &= ~ADC12IFG1;
          }break;                                 // Vector 14:  ADC12BMEM1
        case 16: break;                                 // Vector 16:  ADC12BMEM2
        case 18: break;                                 // Vector 18:  ADC12BMEM3
        case 20: break;                                 // Vector 20:  ADC12BMEM4
        case 22: break;                                 // Vector 22:  ADC12BMEM5
        case 24: break;                                 // Vector 24:  ADC12BMEM6
        case 26: break;                                 // Vector 26:  ADC12BMEM7
        case 28: break;                                 // Vector 28:  ADC12BMEM8
        case 30: break;                                 // Vector 30:  ADC12BMEM9
        case 32: break;                                 // Vector 32:  ADC12BMEM10
        case 34: break;                                 // Vector 34:  ADC12BMEM11
        case 36: break;                                 // Vector 36:  ADC12BMEM12
        case 38: break;                                 // Vector 38:  ADC12BMEM13
        case 40: break;                                 // Vector 40:  ADC12BMEM14
        case 42: break;                                 // Vector 42:  ADC12BMEM15
        case 44: break;                                 // Vector 44:  ADC12BMEM16
        case 46: break;                                 // Vector 46:  ADC12BMEM17
        case 48: break;                                 // Vector 48:  ADC12BMEM18
        case 50: break;                                 // Vector 50:  ADC12BMEM19
        case 52: break;                                 // Vector 52:  ADC12BMEM20
        case 54: break;                                 // Vector 54:  ADC12BMEM21
        case 56: break;                                 // Vector 56:  ADC12BMEM22
        case 58: break;                                 // Vector 58:  ADC12BMEM23
        case 60: break;                                 // Vector 60:  ADC12BMEM24
        case 62: break;                                 // Vector 62:  ADC12BMEM25
        case 64: break;                                 // Vector 64:  ADC12BMEM26
        case 66: break;                                 // Vector 66:  ADC12BMEM27
        case 68: break;                                 // Vector 68:  ADC12BMEM28
        case 70: break;                                 // Vector 70:  ADC12BMEM29
        case 72: break;                                 // Vector 72:  ADC12BMEM30
        case 74: break;                                 // Vector 74:  ADC12BMEM31
        case 76: break;                                 // Vector 76:  ADC12BRDY
        default: break;
        }
}


相关帖子

沙发
dirtwillfly| | 2016-8-31 22:33 | 只看该作者
你说的进第一个中断,是只进入一次adc中断吗?
看你提供的程序,只有这一个中断服务程序

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

41

帖子

0

粉丝