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.

TMS320F28P650DH: How does SysConfig ClockTree view affect the EPWMCLKDIV setting

Part Number: TMS320F28P650DH
Other Parts Discussed in Thread: SYSCONFIG, TMDSCNCD28P65X

Tool/software:

We are using CCS12.8.1. How does SysConfig ClockTree view affect the EPWMCLKDIV setting, or does it have any effect? The SysConfig ClockTree has a settable pulldown field for EPWMCLKDIV but changing this doesn't affect the EPWM clock on our board, and looking at the clocktree.h file we see that making changes to this pulldown in the GUI only changes comments in that file.

Questions:

  • What is the point of having this setting within the Clocktree tool if it doesn't actually affect code generation?
  • How should one change the EPWMCLKDIV in a CCS project? 

  • Hi,

    When I changed the divider, I can see that the divider is modified in the device.c as shown in the page below.



    Not sure what you meant by below ?

    What is the point of having this setting within the Clocktree tool if it doesn't actually affect code generation?

    Please check the device.c if there is corresponding change in that file

    Thanks

  • Hi Prarthan,

    I am working with rperezti and he is helping us out with this same issue as well.

    In my device.c code, I'm not seeing those clock tree configurations lines of code. Does the clock tree tool need another compiler or something of the sort installed in order to generate the code in device.c?

  • Hi Mike,

    Please check the whole Device_init() function, from your screenshot I can see the whole function

    Also enable the device support in sysconfig

  • Hi Prarthan,

    Here are the erros I get when I enable the device support. I added  the device.c code below.

    //#############################################################################
    //
    // FILE:   device.c
    //
    // TITLE:  Device setup for examples.
    //
    //#############################################################################
    //
    //
    // 
    // C2000Ware v5.04.00.00
    //
    // Copyright (C) 2024 Texas Instruments Incorporated - http://www.ti.com
    //
    // Redistribution and use in source and binary forms, with or without 
    // modification, are permitted provided that the following conditions 
    // are met:
    // 
    //   Redistributions of source code must retain the above copyright 
    //   notice, this list of conditions and the following disclaimer.
    // 
    //   Redistributions in binary form must reproduce the above copyright
    //   notice, this list of conditions and the following disclaimer in the 
    //   documentation and/or other materials provided with the   
    //   distribution.
    // 
    //   Neither the name of Texas Instruments Incorporated nor the names of
    //   its contributors may be used to endorse or promote products derived
    //   from this software without specific prior written permission.
    // 
    // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
    // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
    // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 
    // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
    // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
    // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
    // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
    // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    // $
    //#############################################################################
    
    //
    // Included Files
    //
    #include "device.h"
    #include "driverlib.h"
    #ifdef __cplusplus
    using std::memcpy;
    #endif
    #ifdef CMDTOOL
    #include "device_cmd.h"
    #endif
    
    //*****************************************************************************
    //
    // Function to initialize the device. Primarily initializes system control to a
    // known state by disabling the watchdog, setting up the SYSCLKOUT frequency,
    // and enabling the clocks to the peripherals.
    //
    // Note : In case XTAL is used as the PLL source, it is recommended to invoke
    // the Device_verifyXTAL() before configuring PLL
    //
    //*****************************************************************************
    void Device_init(void)
    {
        //
        // Disable the watchdog
        //
        SysCtl_disableWatchdog();
    #ifdef CMDTOOL
        CMD_init();
    #endif
    
    #ifdef _FLASH
    #ifndef CMDTOOL
        //
        // Copy time critical code and flash setup code to RAM. This includes the
        // following functions: InitFlash();
        //
        // The RamfuncsLoadStart, RamfuncsLoadSize, and RamfuncsRunStart symbols
        // are created by the linker. Refer to the device .cmd file.
        //
        memcpy(&RamfuncsRunStart, &RamfuncsLoadStart, (size_t)&RamfuncsLoadSize);
    #endif
        //
        // Call Flash Initialization to setup flash waitstates. This function must
        // reside in RAM.
        //
        Flash_initModule(FLASH0CTRL_BASE, FLASH0ECC_BASE, DEVICE_FLASH_WAITSTATES);
    #endif
    
    #ifdef CPU1
    
        //
        // Set up PLL control and clock dividers
        //
        SysCtl_setClock(DEVICE_SETCLOCK_CFG);
    
        //
        // Make sure the LSPCLK divider is set to the default (divide by 4)
        //
        SysCtl_setLowSpeedClock(SYSCTL_LSPCLK_PRESCALE_4);
    
        //
        // These asserts will check that the #defines for the clock rates in
        // device.h match the actual rates that have been configured. If they do
        // not match, check that the calculations of DEVICE_SYSCLK_FREQ and
        // DEVICE_LSPCLK_FREQ are accurate. Some examples will not perform as
        // expected if these are not correct.
        //
        ASSERT(SysCtl_getClock(DEVICE_OSCSRC_FREQ) == DEVICE_SYSCLK_FREQ);
        ASSERT(SysCtl_getLowSpeedClock(DEVICE_OSCSRC_FREQ) == DEVICE_LSPCLK_FREQ);
    
    #ifndef _FLASH
        //
        // Call Device_cal function when run using debugger
        // This function is called as part of the Boot code. The function is called
        // in the Device_init function since during debug time resets, the boot code
        // will not be executed and the gel script will reinitialize all the
        // registers and the calibrated values will be lost.
    	// Sysctl_deviceCal is a wrapper function for Device_Cal
        //
        SysCtl_deviceCal();
    #endif
    
    #endif
    
        //
        // Turn on all peripherals
        //
        Device_enableAllPeripherals();
    }
    
    #ifdef CPU1
    //*****************************************************************************
    //
    // Function to boot CPU2
    // Available bootmodes :
    //      - BOOTMODE_BOOT_TO_FLASH_BANK0_SECTOR0
    //      - BOOTMODE_BOOT_TO_FLASH_BANK0_SECTOR127_END
    //      - BOOTMODE_BOOT_TO_FLASH_BANK1_SECTOR0
    //      - BOOTMODE_BOOT_TO_FLASH_BANK2_SECTOR0
    //      - BOOTMODE_BOOT_TO_FLASH_BANK3_SECTOR0
    //      - BOOTMODE_BOOT_TO_FLASH_BANK4_SECTOR0
    //      - BOOTMODE_BOOT_TO_FLASH_BANK4_SECTOR127_END
    //      - BOOTMODE_BOOT_TO_SECURE_FLASH_BANK0_SECTOR0
    //      - BOOTMODE_BOOT_TO_SECURE_FLASH_BANK1_SECTOR0
    //      - BOOTMODE_BOOT_TO_SECURE_FLASH_BANK2_SECTOR0
    //      - BOOTMODE_BOOT_TO_SECURE_FLASH_BANK3_SECTOR0
    //      - BOOTMODE_BOOT_TO_SECURE_FLASH_BANK4_SECTOR0
    //      - BOOTMODE_IPC_MSGRAM_COPY_BOOT_TO_M1RAM
    //      - BOOTMODE_BOOT_TO_M0RAM
    //      - BOOTMODE_BOOT_TO_FWU_FLASH
    //      - BOOTMODE_BOOT_TO_FWU_FLASH_ALT1
    //      - BOOTMODE_BOOT_TO_FWU_FLASH_ALT2
    //      - BOOTMODE_BOOT_TO_FWU_FLASH_ALT3
    //
    // Note that while using BOOTMODE_IPC_MSGRAM_COPY_BOOT_TO_M1RAM,
    // BOOTMODE_IPC_MSGRAM_COPY_LENGTH_xxxW must be ORed with the bootmode parameter
    //
    // This function must be called after Device_init function
    //
    //*****************************************************************************
    void Device_bootCPU2(uint32_t bootmode)
    {
        //
        // Configure the CPU1TOCPU2IPCBOOTMODE register
        //
        IPC_setBootMode(IPC_CPU1_L_CPU2_R,
                        (BOOT_KEY | bootmode));
    
        //
        // Set IPC Flag 0
        //
        IPC_setFlagLtoR(IPC_CPU1_L_CPU2_R, IPC_FLAG0);
    
        //
        // Bring CPU2 out of reset. Wait for CPU2 to go out of reset.
        //
        SysCtl_controlCPU2Reset(SYSCTL_CORE_DEACTIVE);
        while(SysCtl_isCPU2Reset() == 0x1U);
    }
    #endif
    
    //*****************************************************************************
    //
    // Function to turn on all peripherals, enabling reads and writes to the
    // peripherals' registers.
    //
    // Note that to reduce power, unused peripherals should be disabled.
    //
    //*****************************************************************************
    void Device_enableAllPeripherals(void)
    {
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_DMA);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_TIMER0);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_TIMER1);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_TIMER2);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_CPUBGCRC);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_TBCLKSYNC);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_ERAD);
    #ifdef CPU1
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_CLA1);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_CLA1BGCRC);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_GTBCLKSYNC);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_EMIF1);
    #endif
    
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_EPWM1);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_EPWM2);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_EPWM3);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_EPWM4);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_EPWM5);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_EPWM6);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_EPWM7);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_EPWM8);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_EPWM9);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_EPWM10);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_EPWM11);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_EPWM12);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_EPWM13);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_EPWM14);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_EPWM15);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_EPWM16);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_EPWM17);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_EPWM18);
    
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_ECAP1);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_ECAP2);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_ECAP3);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_ECAP4);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_ECAP5);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_ECAP6);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_ECAP7);
    
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_EQEP1);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_EQEP2);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_EQEP3);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_EQEP4);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_EQEP5);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_EQEP6);
    
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_SD1);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_SD2);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_SD3);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_SD4);
    
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_SCIA);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_SCIB);
    
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_UARTA);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_UARTB);
    
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_SPIA);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_SPIB);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_SPIC);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_SPID);
    
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_I2CA);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_I2CB);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_PMBUSA);
    
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_CANA);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_MCANA);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_MCANB);
    
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_USBA);
    
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_ADCA);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_ADCB);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_ADCC);
    
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_CMPSS1);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_CMPSS2);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_CMPSS3);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_CMPSS4);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_CMPSS5);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_CMPSS6);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_CMPSS7);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_CMPSS8);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_CMPSS9);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_CMPSS10);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_CMPSS11);
    
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_DACA);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_DACC);
    
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_CLB1);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_CLB2);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_CLB3);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_CLB4);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_CLB5);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_CLB6);
    
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_FSITXA);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_FSITXB);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_FSIRXA);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_FSIRXB);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_FSIRXC);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_FSIRXD);
    
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_LINA);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_LINB);
    
    
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_DCC0);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_DCC1);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_DCC2);
    
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_ECAT);
    
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_HRCAL0);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_HRCAL1);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_HRCAL2);
    
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_AESA);
    
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_EPG1);
    
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_ADCCHECKER1);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_ADCCHECKER2);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_ADCCHECKER3);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_ADCCHECKER4);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_ADCCHECKER5);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_ADCCHECKER6);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_ADCCHECKER7);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_ADCCHECKER8);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_ADCSEAGGRCPU1);
    }
    
    //*****************************************************************************
    //
    // Function to disable pin locks and enable pullups on GPIOs.
    //
    //*****************************************************************************
    void Device_initGPIO(void)
    {
        //
        // Disable pin locks.
        //
        GPIO_unlockPortConfig(GPIO_PORT_A, 0xFFFFFFFF);
        GPIO_unlockPortConfig(GPIO_PORT_B, 0xFFFFFFFF);
        GPIO_unlockPortConfig(GPIO_PORT_C, 0xFFFFFFFF);
        GPIO_unlockPortConfig(GPIO_PORT_D, 0xFFFFFFFF);
        GPIO_unlockPortConfig(GPIO_PORT_E, 0xFFFFFFFF);
        GPIO_unlockPortConfig(GPIO_PORT_F, 0xFFFFFFFF);
        GPIO_unlockPortConfig(GPIO_PORT_H, 0xFFFFFFFF);
    }
    
    //*****************************************************************************
    //
    // Function to verify the XTAL frequency
    // freq is the XTAL frequency in MHz
    // The function return true if the the actual XTAL frequency matches with the
    // input value
    //
    // Note that this function assumes that the PLL is not already configured and
    // hence uses SysClk freq = 10MHz for DCC calculation
    //
    //*****************************************************************************
    bool Device_verifyXTAL(float freq)
    {
        //
        // Use DCC to verify the XTAL frequency using INTOSC2 as reference clock
        //
    
        //
        // Turn on XTAL and wait for it to power up using X1CNT
        //
        SysCtl_turnOnOsc(SYSCTL_OSCSRC_XTAL);
        SysCtl_clearExternalOscCounterValue();
        while(SysCtl_getExternalOscCounterValue() != SYSCTL_X1CNT_X1CNT_M);
    
        //
        // Enable DCC0 clock
        //
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_DCC0);
    
        //
        // Insert atleast 5 cycles delay after enabling the peripheral clock
        //
        asm(" RPT #5 || NOP");
    
        //
        // Configures XTAL as CLKSRC0 and INTOSC2 as CLKSRC1
        // Fclk0 = XTAL frequency (input parameter)
        // Fclk1 = INTOSC2 frequency = 10MHz
        //
        // Configuring DCC error tolerance of +/-1%
        // INTOSC2 can have a variance in frequency of +/-10%
        //
        // Assuming PLL is not already configured, SysClk freq = 10MHz
        //
        // Note : Update the tolerance and INTOSC2 frequency variance as necessary.
        //
        return (DCC_verifyClockFrequency(DCC0_BASE,
                                         DCC_COUNT1SRC_INTOSC2, 10.0F,
                                         DCC_COUNT0SRC_XTAL, freq,
                                         1.0F, 10.0F, 10.0F));
    
    }
    
    //*****************************************************************************
    //
    // Error handling function to be called when an ASSERT is violated
    //
    //*****************************************************************************
    void __error__(const char *filename, uint32_t line)
    {
        //
        // An ASSERT condition was evaluated as false. You can use the filename and
        // line parameters to determine what went wrong.
        //
        ESTOP0;
    }
    

  • You would need to manually exclude the device.c and device.h from the build from SDK for only using the device.c/h generated from sysconfig

    Since these are generated from clocktree tool, the compiler is erroring out seeing this

  • I excluded the device folder and now it builds and debugs, but now I don't have any PWM output. Can you provide all the code that was generated when you changed EPWMCLK? I'm using the TMDSCNCD28P65X control card.

  • Mike,

    Please check the PWM settings are getting programmed properly.

    Confirm from the device_init() function that you see the clocktree functions like I mentioned below

    Also enable the device support in sysconfig

    Change the divider from clocktree and check the clock divider function input changes above