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.

TMS320F28027: 使用XDS100V3進行Debug時,寫入後未執行Run,PWM腳位EPWM2B / GPIO3 會自動變為High

Part Number: TMS320F28027

Hi 大家好,

但是我在做測試的時候,很碰巧遇到一個情況,就是使用XDS100V3進行燒錄後,

程式尚未執行Run,竟然發現我有一隻PWM 腳位直接變成High…(因為這樣造成硬體損毀)

當進行程式執行時,狀態就又恢復正常了...

跟當地代理商FAE討論了一些時間都沒辦法解決...不知道有沒有人遇過或是可以給予建議,謝謝.

  • 1. 这个问题出现的机率有多大?

    2. 其它PWM引脚上有发现这个问题吗?

    3. 能标注一下波形吗?

    4. 能否描述一下PWM初始化的过程?有和我们提供的例程比对一下吗?

  • 您好,請參考下列資訊 :

    1. 这个问题出现的机率有多大?

    基本上每一次都會發生,都可以重現.差別在使用XDS100V3燒錄後,等待的時間不同,時間大約都在15秒-30秒,

    該腳位 EPWM2B / GPIO3 會自動變為HIGH.

    2. 其它PWM引脚上有发现这个问题吗?

    目前沒有發現.

    3. 能标注一下波形吗?

    4. 能否描述一下PWM初始化的过程?有和我们提供的例程比对一下吗?

    初始化代碼請參考下列 :

     void devPWM_HVCtrl_Init(CLK_Handle myClk, PWM_Handle myPwm2)
    {

        CLK_enablePwmClock(myClk, PWM_Number_2);

        // Set timer period
        PWM_setPeriod(myPwm2, HVCTRL_PWM_COUNT);
        PWM_setPhase(myPwm2, 0x0000);   // Phase is 0
        PWM_setCount(myPwm2, 0x0000);   // Clear counter

        // Setup TBCLK
        PWM_setCounterMode(myPwm2, PWM_CounterMode_Up);
        PWM_disableCounterLoad(myPwm2);                     // Disable phase loading
        PWM_setHighSpeedClkDiv(myPwm2, PWM_HspClkDiv_by_1); // Clock ratio to SYSCLKOUT
        PWM_setClkDiv(myPwm2, PWM_ClkDiv_by_1);

        PWM_setShadowMode_CmpA(myPwm2, PWM_ShadowMode_Shadow);  // Load registers every ZERO
        PWM_setShadowMode_CmpB(myPwm2, PWM_ShadowMode_Shadow);
        PWM_setLoadMode_CmpA(myPwm2, PWM_LoadMode_Zero);
        PWM_setLoadMode_CmpB(myPwm2, PWM_LoadMode_Zero);

        // Setup compare
        PWM_setCmpA(myPwm2, 0);
        PWM_setCmpB(myPwm2, HVCTRL_PWM_COUNT);

        // Set actions
        PWM_setActionQual_CntUp_CmpA_PwmA(myPwm2, PWM_ActionQual_Set);
        PWM_setActionQual_CntUp_CmpB_PwmA(myPwm2, PWM_ActionQual_Clear);

        PWM_setActionQual_CntUp_CmpA_PwmB(myPwm2, PWM_ActionQual_Clear);
        PWM_setActionQual_CntUp_CmpB_PwmB(myPwm2, PWM_ActionQual_Set);


        // Active Low PWMs - Setup Deadband
        devPWM_DeadbandEnable(myPwm2, true);

    }

    void devPWM_DeadbandEnable(PWM_Handle myPwm1, bool bEn)
    {
        if(bEn)
        {

            EALLOW;

            EPwm2Regs.TZFLG.bit.CBC = 0;
            EPwm2Regs.TZFLG.bit.OST = 0;

            EPwm2Regs.TZCTL.bit.DCBEVT1 = 2;
            EPwm2Regs.TZCTL.bit.DCBEVT2 = 2;
            EPwm2Regs.TZCTL.bit.TZB = 2;

            EPwm2Regs.TZFRC.bit.DCBEVT1 = 1;
            EPwm2Regs.TZFRC.bit.DCBEVT2 = 1;
            EPwm2Regs.TZFRC.bit.CBC = 1;


            EDIS;


            // Active Low PWMs - Setup Deadband
            PWM_setDeadBandOutputMode(myPwm1,            PWM_DeadBandOutputMode_EPWMxA_Rising_EPWMxB_Falling);
            PWM_setDeadBandPolarity(myPwm1, PWM_DeadBandPolarity_EPWMxB_Inverted);

            PWM_setDeadBandInputMode(myPwm1, PWM_DeadBandInputMode_EPWMxA_Rising_and_Falling);
            PWM_setDeadBandRisingEdgeDelay(myPwm1, EPWM1_MIN_DB);
            PWM_setDeadBandFallingEdgeDelay(myPwm1, EPWM1_MIN_DB);
        }
        else
        {
            PWM_disableDeadBand(myPwm1);
        }

    //================================================================================//

    FAE有建議我在CCS可以勾選下列設定,但依然沒有改善 : (RealTime options)