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.

[参考译文] MSP430I2020:TA0,TA1能否协同工作?

Guru**** 2381550 points
Other Parts Discussed in Thread: MSP-FET, MSP430FR5992
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1099628/msp430i2020-can-ta0-ta1-work-together

部件号:MSP430I2020
主题中讨论的其他部件:MSP-FETMSP430FR5992

您好,

下面是我的定时器初始代码。

我需要1毫秒中断和1通道PWM输出。

但如果我启动TA0,则TA1将停止。 如果我启动TA0,则TA1将停止。

请帮助解决问题。

TA0CCTL0 = CCIE;// CCR0中断已启用
TA0CCR0 = 2047;
TA0CTL = tassel_2 | MC_1 | ID_3;  

P2SEL0 |= BIT2;  
P2DIR || BIIT2;
TA1CCR0 = 1;
TA1CCTL2 = OUTMOD_4;
TA1CTL = tassel_2 | MC_1 | ID_1;  

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

    您好,

    TA0和TA1应独立工作。  

    我在 初始代码中没有发现问题。 您能否发送更多有关如何启动计时器的代码?

    此致,

    现金Hao

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

    #define TIME_1ms                 ((__SYSTEM_FREQUENCY_HZ__ / 8000) - 1)
    #define PWM_1024KHz                 ((__SYSTEM_FREQUENCY_HZ__ / 8000000) - 1)
    //#define TIME_1ms                 2000
    #define StartTimer0()                 TA0CTL = TASSEL_2 | MC_1 | ID_3
    #define StartTimer1()                 TA1CTL = TASSEL_2 | MC_1 | ID_1
    
    #include <Timer.h>
    
    uint8_t  _1msFlag;
    uint32_t  _1msCnt;
    
    void InitTimer(void)
    {
        TA0CCTL0 = CCIE;                    // CCR0 Interrupt Enabled
        TA0CCR0 = TIME_1ms;
        //TA0CTL = TASSEL_2 | MC_1 | ID_3;    // SMCLK/8, Up Mode
    /* P2.2 = 2.048MHz PWM output */
    
        P2SEL1 =0;
        P2SEL0 |= BIT2;                    // P2.2 CCRx Function
        P2DIR  |= BIT2;                    // Set P2.2 as output
        TA1CCR0 = 1;
        TA1CCTL2 = OUTMOD_4;                // CCR1 Toggle/set
    
    }
    
    #pragma vector = TIMER0_A0_VECTOR
    __interrupt void Timer0_A0_ISR(void)
    {
        _1msCnt++;
        _1msFlag=1;
    }
    
    void InitPeripheral(void){
        REFCAL1 = FlashTlv[TLV_CAL_REFCAL1];
        REFCAL0 = FlashTlv[TLV_CAL_REFCAL0];
        CSIRFCAL = FlashTlv[TLV_CAL_CSIRFCAL]+4;
        CSIRTCAL = FlashTlv[TLV_CAL_CSIRTCAL];
        SD24TRIM = FlashTlv[TLV_SD24_TAG];
        CSCTL0  =  0;                   // Internal Resistor
        CSCTL1 =  0;   // MCLK = DCO, SMCLK = DCO
        //P1SEL1 |=    BIT1;        // MCLK, SMCLK Pin Function
        //P1SEL0 &= ~(BIT1);
        GPIO_init();
        InitTDS();
        //InitPWG();
        InitModbus();
        InitTimer();
        //InitData();
        InitPWG();
        TaskStep=TASK_INITIAL;TaskT=0;
        StartTimer0();
    }
    void InitData(void)
    {
        Flash_I *FlashT;
        uint16_t  i, DataValid=1;
    
        FlashT = (Flash_I*)(FlashBuf);
        InitFlash();
        FlashReadAll();
        for (i=1; i < TDS_CH_MAX; i++){
            if ((FlashT->TDS_CalKF[i] > MAX_TDS_CalK) || (FlashT->TDS_CalKF[i] < MIN_TDS_CalK)){
                FlashT->TDS_CalKF[i]=DEF_TDS_CalK;
                DataValid=0;
            }
        }
        for (i=1; i < TDS_CH_MAX; i++){
            if ((FlashT->TDS_CalKF[i] > MAX_TDS_CalK) || (FlashT->TDS_CalKF[i] < MIN_TDS_CalK)){
                FlashT->TDS_CalKF[i]=DEF_TDS_CalK;
                DataValid=0;
            }
        }
    
    }
    
    void CheckCalRange(void){
        TaskStep=TASK_MEAS_TDS;TaskT=0;
    }
    
    void Process_Task(void){
        if (TaskT) TaskT--;
        else{
            switch (TaskStep){
                case TASK_INITIAL: // Initial mode
                    TaskStep++;
                    TaskT=100;
                    break;
                case (TASK_INITIAL+1): // Initial mode
                    PWG_On();
                    TaskStep=TASK_MEAS_TDS;
                    TaskT=100;
                    break;
                case TASK_CHECK_CAL:
                    CheckCalRange();
                    break;
                case TASK_MEAS_TDS:
                    TDS_Task();
                    break;
            }
        }
    }
    
    int main(void)
    {
        InitWatchdog(); // Init WDT & Stop WDT
    
        /* Initialization */
        InitPeripheral();
    #ifdef EN_WDT
        StartWatchdog(); // Start WDT
    #endif
        _EINT();     // enable interrupt
    
        while (1)
        {
            if (_1msFlag)
            {
                _1msFlag = 0;
                //P2OUT^=BIT2;
    
                //PWG_Task();
                ModbusRxTask();
                Process_Task();
    
    #ifdef EN_WDT
                FeedWatchdog();
    #endif
            }
        }
    }
    
    

    我启动TA1@其他功能。

    对于以前的代码,

    i 初始TA0和TA1在InitTimer()中。 它不能正常工作。

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

    您好,

    其问题与调试工具(MSP-FET)和CCS类似。 当我进入调试模式时,TA1无法与TA0配合使用,SPI输出也会影响TA1。

    我不知道如何调试它。

    或者此问题是由CCS引起的?

    CCS的某些部件有错误?

    我可以通过CCS调试MSP430FR5992。

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

    您好,

    代码看起来正常。 我不确定它是否与CCS有关。 您可以在CCS发行说明  中找到CCS的所有已知问题。https://software-dl.ti.com/ccs/esd/CCSv11/CCS_11_2_0/exports/CCS_11.2.0_ReleaseNotes.htm

    此致,

    现金Hao

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

    您好,

    找不到相关问题。 我将尝试安装CCS 11.2 ,然后重试。