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.

TMS320F280037C: Universal Motor Control SDK c2000.syscfg won't compile on change from package: 100PZ to 64PM

Part Number: TMS320F280037C
Other Parts Discussed in Thread: C2000WARE, , SYSCONFIG, TMS320F280039C

Hello,

I have custom hardware with a 64 pin F280037C, and I am using the system configuration tool to set up the project.

Eventually I plan to implement the TI MotorControl SDK settings as well.

I have used the following path in the MotorControl SDK to start c2000.syscfg:

\C2000Ware_MotorControl_SDK_4_02_01_00\solutions\universal_motorcontrol_syscfg\f28003x\"

The debug configuration successfully connects and tests to the processor, so my hardware seems to be working.

I have tried compiling the project with:

          A fully configured c2000sys.cfg file

          A 'blank' c2000sys.cfg file.

The same error below pops up for each.

I have attached the 'blank' c2000.syscfg file

This code is auto generated and conflicts with itself.

Any idea how to get past this? 

(edit: typo)

  • TMS320F280037C.ccxml

    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <configurations XML_version="1.2" id="configurations_0">
        
        <configuration XML_version="1.2" id="Texas Instruments XDS2xx USB Debug Probe_0">
            <instance XML_version="1.2" desc="Texas Instruments XDS2xx USB Debug Probe_0" href="connections/TIXDS2XXUSB_Connection.xml" id="Texas Instruments XDS2xx USB Debug Probe_0" xml="TIXDS2XXUSB_Connection.xml" xmlpath="connections"/>
            <connection XML_version="1.2" id="Texas Instruments XDS2xx USB Debug Probe_0">
                <instance XML_version="1.2" href="drivers/tixds560icepick_c.xml" id="drivers" xml="tixds560icepick_c.xml" xmlpath="drivers"/>
                <instance XML_version="1.2" href="drivers/tixds560c28x.xml" id="drivers" xml="tixds560c28x.xml" xmlpath="drivers"/>
                <instance XML_version="1.2" href="drivers/tixds560cla2.xml" id="drivers" xml="tixds560cla2.xml" xmlpath="drivers"/>
                <instance XML_version="1.2" href="drivers/tixds560cs_child.xml" id="drivers" xml="tixds560cs_child.xml" xmlpath="drivers"/>
                <instance XML_version="1.2" href="drivers/tixds560ajsm.xml" id="drivers" xml="tixds560ajsm.xml" xmlpath="drivers"/>
                <platform XML_version="1.2" id="platform_0">
                    <instance XML_version="1.2" desc="TMS320F280037C_0" href="devices/f280037c.xml" id="TMS320F280037C_0" xml="f280037c.xml" xmlpath="devices"/>
                </platform>
            </connection>
        </configuration>
    </configurations>
    

    c2000.syscfg

    /**
     * These arguments were used when this file was generated. They will be automatically applied on subsequent loads
     * via the GUI or CLI. Run CLI with '--help' for additional information on how to override these arguments.
     * @cliArgs --device "F28003x" --package "64PM" --part "F28003x_64PM" --product "C2000MCSDK@1.00.00.00"
     * @versions {"tool":"1.16.1+2960"}
     */
    
    /**
     * Import the modules used in this configuration.
     */
    const analog           = scripting.addModule("/driverlib/analog.js", {}, false);
    const analog1          = analog.addInstance();
    const asysctl          = scripting.addModule("/driverlib/asysctl.js");
    const can              = scripting.addModule("/driverlib/can.js", {}, false);
    const can1             = can.addInstance();
    const dac              = scripting.addModule("/driverlib/dac.js", {}, false);
    const dac1             = dac.addInstance();
    const device_support   = scripting.addModule("/driverlib/device_support.js");
    const epwm             = scripting.addModule("/driverlib/epwm.js", {}, false);
    const epwm1            = epwm.addInstance();
    const epwm2            = epwm.addInstance();
    const gpio             = scripting.addModule("/driverlib/gpio.js", {}, false);
    const gpio1            = gpio.addInstance();
    const gpio2            = gpio.addInstance();
    const gpio3            = gpio.addInstance();
    const gpio4            = gpio.addInstance();
    const gpio5            = gpio.addInstance();
    const gpio6            = gpio.addInstance();
    const gpio7            = gpio.addInstance();
    const inputxbar_input  = scripting.addModule("/driverlib/inputxbar_input.js", {}, false);
    const inputxbar_input1 = inputxbar_input.addInstance();
    const inputxbar_input2 = inputxbar_input.addInstance();
    const sci              = scripting.addModule("/driverlib/sci.js", {}, false);
    const sci1             = sci.addInstance();
    const sync             = scripting.addModule("/driverlib/sync.js");
    
    /**
     * Write custom configuration values to the imported modules.
     */
    asysctl.enableTemperatureSensor = true;
    asysctl.analogReferenceVoltage  = "1P65";
    asysctl.analogReference         = "INTERNAL";
    
    can1.$name                 = "myCAN0";
    can1.can.$assign           = "CANA";
    can1.can.can_rxPin.$assign = "GPIO3";
    can1.can.can_txPin.$assign = "GPIO2";
    
    dac1.$name        = "DACA_OUT";
    dac1.enableOutput = true;
    
    analog1.$name                                    = "myANALOGPinMux0";
    dac1.analog                                      = analog1;
    analog1.useCase                                  = "CUSTOM";
    analog1.useInterfacePins                         = ["A0/B15/C15/DACA_OUT","A1/B7/DACB_OUT","A10/B1/C10","A11/B10/C0","A12, C1","A14/B14/C4","A15, C7/B9","A2/B6/C9","A3, B3/VDAC, C5","A4/B8, C14","A5, C2/B12","A8, B0/C11","A9, B4/C8","B2/C6","C3/A7"];
    analog1.analog.$assign                           = "ANALOG";
    analog1.analog["a0/b15/c15/daca_outPin"].$assign = "A0/B15/C15/DACA_OUT";
    analog1.analog["a1/b7/dacb_outPin"].$assign      = "A1/B7/DACB_OUT";
    analog1.analog["a10/b1/c10Pin"].$assign          = "A10/B1/C10";
    analog1.analog["a11/b10/c0Pin"].$assign          = "A11/B10/C0";
    analog1.analog["a12, c1Pin"].$assign             = "A12, C1";
    analog1.analog["a14/b14/c4Pin"].$assign          = "A14/B14/C4";
    analog1.analog["a15, c7/b9Pin"].$assign          = "A15, C7/B9";
    analog1.analog["a2/b6/c9Pin"].$assign            = "A2/B6/C9";
    analog1.analog["a3, b3/vdac, c5Pin"].$assign     = "A3, B3/VDAC, C5";
    analog1.analog["a4/b8, c14Pin"].$assign          = "A4/B8, C14";
    analog1.analog["a5, c2/b12Pin"].$assign          = "A5, C2/B12";
    analog1.analog["a8, b0/c11Pin"].$assign          = "A8, B0/C11";
    analog1.analog["a9, b4/c8Pin"].$assign           = "A9, B4/C8";
    analog1.analog["b2/c6Pin"].$assign               = "B2/C6";
    analog1.analog["c3/a7Pin"].$assign               = "C3/A7";
    
    device_support.useStandardCodeStartBranch = false;
    
    epwm1.useCase                = "CUSTOM";
    epwm1.$name                  = "WPWMrev";
    epwm1.useInterfacePins       = ["EPWM#_B"];
    epwm1.epwm.$assign           = "EPWM1";
    epwm1.epwm.epwm_bPin.$assign = "GPIO1";
    
    epwm2.$name                  = "WPWM";
    epwm2.useCase                = "CUSTOM";
    epwm2.useInterfacePins       = ["EPWM#_A"];
    epwm2.epwm.$assign           = "EPWM5";
    epwm2.epwm.epwm_aPin.$assign = "GPIO16";
    
    gpio1.$name           = "LED1_GPIO";
    gpio1.direction       = "GPIO_DIR_MODE_OUT";
    gpio1.gpioPin.$assign = "GPIO12";
    
    gpio2.$name           = "REnable_GPIO";
    gpio2.direction       = "GPIO_DIR_MODE_OUT";
    gpio2.gpioPin.$assign = "GPIO11";
    
    gpio3.$name           = "LED2_GPIO";
    gpio3.direction       = "GPIO_DIR_MODE_OUT";
    gpio3.gpioPin.$assign = "GPIO13";
    
    gpio4.$name           = "Lights_GPIO";
    gpio4.direction       = "GPIO_DIR_MODE_OUT";
    gpio4.gpioPin.$assign = "GPIO0";
    
    gpio5.useInterrupt    = true;
    gpio5.$name           = "ACCELINT_GPIO";
    gpio5.gpioPin.$assign = "GPIO10";
    gpio5.xint.enableInt  = true;
    
    gpio6.direction       = "GPIO_DIR_MODE_OUT";
    gpio6.$name           = "TStart_GPIO";
    gpio6.gpioPin.$assign = "GPIO6";
    
    gpio7.$name = "BladeStart";
    
    inputxbar_input1.$name         = "myINPUTXBARINPUT1";
    gpio5.xint.inputxbar           = inputxbar_input1;
    inputxbar_input1.inputxbarGpio = "GPIO10";
    
    inputxbar_input2.$name          = "myINPUTXBARINPUT0";
    inputxbar_input2.inputxbarInput = "XBAR_INPUT2";
    inputxbar_input2.inputxbarGpio  = "GPIO23";
    
    sci1.$name                 = "mySCI0";
    sci1.sci.$assign           = "SCIA";
    sci1.sci.sci_rxPin.$assign = "GPIO28";
    sci1.sci.sci_txPin.$assign = "GPIO29";
    
    sync.syncOutSource = "SYSCTL_SYNC_OUT_SRC_EPWM4SYNCOUT";
    
    /**
     * Pinmux solution for unlocked pins/peripherals. This ensures that minor changes to the automatic solver in a future
     * version of the tool will not impact the pinmux you originally saw.  These lines can be completely deleted in order to
     * re-solve from scratch.
     */
    gpio7.gpioPin.$suggestSolution = "GPIO33";

  • Hello Aric,

    A fully configured c2000sys.cfg file

    This might just be a repeated typo, but can you confirm that the file extension is .syscfg?

    When I import/build the project on my side (with the same MCSDK version), I don't see a syscfg folder being created, have you modified any of the default configurations of the project? If you go to Project Properties > Build > SysConfig > Basic Options, what do you see listed (also hover over the three dots of the items listed here and tell me if you see items shown)?

    Best regards,

    Omer Amir

  • Strange, I see a c2000.syscfg folder placed in the project folder quite clearly.

    First, here is what is listed in SysConfig > Basic Options:

    I see this after a fresh import of the project in the directory (\universal_motorcontrol_syscfg\f28003x\"):

    For reference here is what I see in the folder to-be-imported:

    I followed some additional steps to get the .syscfg set up, digging what I did exactly now.

    My own notes:

    F28003x FIRMWARE
    
    A)Install CCS and all the latest Motor Control SDK
    B) import project from following directory: 
    ...\C2000Ware_MotorControl_SDK_4_02_01_00\solutions\universal_motorcontrol_syscfg\f28003x\
    C) perform SYSCFG update (see following...)
    
    SYSCFG UPDATE
    
    1) DOWNLOAD LATEST VERSION OF SYSCONFIG (minimum sysconfig_1.15.0)
    
    2) INSTALL IT HERE
    
    	...\(ccsVERSION NUMBER)\ccs\utils\
      
      example (my directoy as of 4/26/23)
      
    	C:\ti\ccs1210\ccs\utils\	
    	
    	
    3) ADD THE SYSCFG IN CCS PREFERENCES
    
    Window -> Preferences -> Code Composer Studio -> Products (select, NOT drop down) -> Install -> (select sysconfig folder, example: C:\ti\ccs1210\ccs\utils\sysconfig_1.16.1)
    
    4) ADD THE SYSCFG TO THE CCS PROJECT
    
    (right click 'universal_motorcontrol_syscfg_f28003x') -> Properties -> General -> 'Products' Tab -> SysConfig -> Edit -> (select version, example: 1.16.1) -> Apply and Close
    
    5) Restart CCS
    
    6) Double click 'c2000.syscfg' under the 'universal_motorcontrol_syscfg_f28003x'

    The guides for configuring the Motor Control SDK are all over the place.

  • Hello Aric,

    Strange, I see a c2000.syscfg folder placed in the project folder quite clearly.

    To clarify I'm not talking about the c2000.syscfg file, I'm talking about the syscfg directory that the error is pointing out (./syscfg/...).

    From your basic properties, can you try removing the "${SYSCONFIG_TOOL_SYSCONFIG_MANIFEST}" row? If that doesn't work I will look into the steps you mentioned.

    Best regards,

    Omer Amir

  • I removed the row, and get the same errors. Tried deleting syscfg folder and it was regenerated.

    I wish I could find what page I found that said how to setup syscfg for a new project.

    It is not mentioned in the docs at all ( https://www.ti.com/lit/an/spracx3/spracx3.pdf?ts=1690753058034&ref_url=https%253A%252F%252Fwww.ti.com%252Ftool%252FSYSCONFIG )

    edit:

     A fresh import of the project 'universal_motorcontrol_syscfg_f28003x' yields the two folders 'device' and 'syscfg'.

    These files do compile initially, but the initial target device is the 100Pz of the TMS320F280039C, and I am using the F280037C.

    Here is how I switched from 100PZ to my device, 64PM / F280037C:

    Now, compiling gives errors:

    Browsing through settings, I found that this is not the only place parts of the configuration are set:

    Setting this gives new errors:

    Up to this point, these errors are preventing ANY output files from being generated (syscfg and device folders generate, however).

    I decided to remove all assignments in c2000.syscfg:

    Actually generates output files, then gives the following errors on compile. This is the closest I can get it.

    If at this point, you replace the c2000.syscfg folder with the 'black' (typo, meant 'blank') c2000.syscfg file you get the errors at the very top of the original post:

    The same error below pops up for each.

    I have attached the 'black' c2000sys.cfg file

    This code is auto generated and conflicts with itself.

    Any idea how to get past this? 

  • This might just be a repeated typo, but can you confirm that the file extension is .syscfg?

    When I import/build the project on my side (with the same MCSDK version), I don't see a syscfg folder being created,

    The folder is generated under CPU1_FLASH:

  • I think I have narrowed the problem to the switch from 100PZ to 64PM. Errors start getting thrown like crazy after that switch  from 100 pin to 64 pin in the universal motor control c2000.syscfg. Any luck on your end?

  • Got the motorcontrol c2000.syscfg to compile past that change. 

    I will try implementing the full configuration of my hardware next.

    I suspect changing the pin configuration in syscfg badly messes up the pinmux assignments, and not all the changes are implemented immediately.

    I bet a bunch of my settings in my fully configured file weren't actually set. Its probably best to set things one at a time and compile them to catch issues like this.

    Here is the steps I followed, for any interested:

    1) Get a fresh import of the project 'universal_motorcontrol_syscfg_f28003x' 

    2) Change the package settings here:

    and here:

    3) The settings won't compile after this change. There is a red X next to some analog pinmux settings:

    Toggle the 'Use Case'  from 'All' to 'Custom' then back to 'All' and this clears the errors and the project compiles!

  • Got the full configuration of my code to compile.

    Also I think I found my real problem:

    Device Support was checked here. Unchecking it allows my fully configured original c2000.syscfg to compile.

    Maybe this was adding driverlib files that were conflicting with files already added by syscfg?

  • Hi Aric,

    Thank you for providing the details of your solutions. Yes I believe this is the main culprit of the problem. Both the project and SysConfig are pulling in the device support files hence why you are seeing the redefined errors in your project build. You can choose to disable it in SysConfig (as you have done) or exclude the device_support folder from your CCS project, either should be fine


    Regards,

    Peter