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.

MSP432 低功耗情况下 单端口产生不同频率方波下会有较大不准的情况

劳烦大家了

不知道大家有没有遇到这个问题,我在测试MSP432开发板的时候发现,在LFAM模式下,采用REFO128KHz作为时钟源。

第一种模式:采用Timer32作为计时器,每到一个中断启动TimerA,利用PWM函数产生方波;两个方波的频率不同;

第二种模式:采用Timer32_1作为主计时器,每到一个中断启动Timer32_2,其周期较小,不断触发端口,产生方波,也是产生两种不同频率的方波;

问题是:这两种方波都在开始阶段会有一个不符合的较大间隔。

各位大牛,这个间隔是因为中断中处理程序导致的吗?还有有没有办法去掉这个间隔吗?

  • 请问您MSP432开发板的具体型号是怎样的?

    程序部分呢?是使用TI的例程还是您自己的程序?具体实验步骤是怎样的?

    若是可以的话,请贴出或者私信我程序,谢谢
  • 用的是MSP432P401R LaunchPad-Red 2.0

    Timer_A_PWMConfig pwmConfig0 =
    {
            TIMER_A_CLOCKSOURCE_SMCLK,
            TIMER_A_CLOCKSOURCE_DIVIDER_1,
            64,
            TIMER_A_CAPTURECOMPARE_REGISTER_1,
            TIMER_A_OUTPUTMODE_RESET_SET,
            32
    };
    
    bool OZFlag = true;
    
    Timer_A_PWMConfig pwmConfig1 =
    {
            TIMER_A_CLOCKSOURCE_SMCLK,
            TIMER_A_CLOCKSOURCE_DIVIDER_1,
            64,
            TIMER_A_CAPTURECOMPARE_REGISTER_1,
            TIMER_A_OUTPUTMODE_RESET_SET,
            32
    };
    //![Simple Timer_A Config]
    
    Timer_A_PWMConfig pwmConfig1 =
    {
            TIMER_A_CLOCKSOURCE_SMCLK,
            TIMER_A_CLOCKSOURCE_DIVIDER_1,
            98,
            TIMER_A_CAPTURECOMPARE_REGISTER_1,
            TIMER_A_OUTPUTMODE_RESET_SET,
            49
    };
    
    
    int main(void)
    {
        /* Halting the watchdog */
        MAP_WDT_A_holdTimer();
    
        //![Simple Timer_A Example]
        /* Setting MCLK to REFO at 128Khz for LF mode
         * Setting SMCLK to 64Khz */
        MAP_CS_setReferenceOscillatorFrequency(CS_REFO_128KHZ);
        MAP_CS_initClockSignal(CS_MCLK, CS_REFOCLK_SELECT, CS_CLOCK_DIVIDER_1);
        MAP_CS_initClockSignal(CS_SMCLK, CS_REFOCLK_SELECT, CS_CLOCK_DIVIDER_1);
        MAP_CS_initClockSignal(CS_HSMCLK, CS_REFOCLK_SELECT, CS_CLOCK_DIVIDER_1);
    
        MAP_PCM_setPowerState(PCM_AM_LF_VCORE0);
    
        /* Configuring GPIO2.4 as peripheral output for PWM */
        MAP_GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_P2, GPIO_PIN4,
                GPIO_PRIMARY_MODULE_FUNCTION);
        
    
        
    
        TIMER32_1->CONTROL = TIMER32_CONTROL_SIZE | TIMER32_CONTROL_MODE;
    
        // Load Timer32 Counter with initial value
        TIMER32_1->LOAD= 512;
    
        // Enalbe the Timer32 interrupt in NVIC
        __enable_irq();
        NVIC->ISER[0] = 1 << ((T32_INT1_IRQn) & 31);
    
        // Start Timer32 and enable interrupt
        TIMER32_1->CONTROL |= TIMER32_CONTROL_ENABLE |
                TIMER32_CONTROL_IE;
    
        // Disable sleep on exit from ISR
        SCB->SCR &= ~SCB_SCR_SLEEPONEXIT_Msk;
    
        // Ensures SLEEPONEXIT takes effect immediately
        __DSB();
    
        // Enter LPM0 and wait for the timer interrupt to wake-up
        __sleep();
        __no_operation();
    
    }
    void T32_INT1_IRQHandler(void)
    {
        TIMER32_1->INTCLR |= BIT0;
        if(OZFlag)
        {
          MAP_Timer_A_generatePWM(TIMER_A0_BASE, &pwmConfig1);
          OZFlag = false;
        }
        else
        {
          MAP_Timer_A_generatePWM(TIMER_A0_BASE, &pwmConfig0);
          OZFlag = true;
        }
    }

  • 很抱歉,我测试了一下,并没有捕捉到“这两种方波都在开始阶段会有一个不符合的较大间隔”

    请问您能否贴上波形图?

    是类似下面帖子这样的?

    e2e.ti.com/.../774035
  • 这部分是由于判断语句,活着pwm产生函数调用产生的延迟吗?麻烦您了~