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.

MSPM0G3507: TIMG7 PinMux Resource Conflict Error

Part Number: MSPM0G3507
Other Parts Discussed in Thread: SYSCONFIG

Tool/software:

I'm getting a  "Resource Conflict" error when I attempt to use TIMG7.

This is not unexpected--I have used all of its pin resources for other functions.  However, I'm not using TIMG7 to drive a pin, I'm using it to generate 2 events.  Consequently, I do not need a pin, and "Enable pin configuration" is not checked.

Normally, there is a "bypass/ignore error" somewhere, but I can't seem to find it for this configuration.

Is this a bug in the sysconfig editor or is this a real limitation of the chip that I have to allocate a pin even if I'm only using events?

Thanks.

  • For some reason the forum won't let me upload my syscfg file:

    /**
     * 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 "MSPM0G350X" --part "Default" --package "VSSOP-28(DGS28)" --product "mspm0_sdk@2.03.00.07"
     * @v2CliArgs --device "MSPM0G3507" --package "VSSOP-28(DGS28)" --product "mspm0_sdk@2.03.00.07"
     * @versions {"tool":"1.22.0+3893"}
     */
    
    /**
     * Import the modules used in this configuration.
     */
    const ADC12  = scripting.addModule("/ti/driverlib/ADC12", {}, false);
    const ADC121 = ADC12.addInstance();
    const GPIO   = scripting.addModule("/ti/driverlib/GPIO", {}, false);
    const GPIO1  = GPIO.addInstance();
    const GPIO2  = GPIO.addInstance();
    const GPIO3  = GPIO.addInstance();
    const PWM    = scripting.addModule("/ti/driverlib/PWM", {}, false);
    const PWM1   = PWM.addInstance();
    const PWM2   = PWM.addInstance();
    const SYSCTL = scripting.addModule("/ti/driverlib/SYSCTL");
    const UART   = scripting.addModule("/ti/driverlib/UART", {}, false);
    const UART1  = UART.addInstance();
    const VREF   = scripting.addModule("/ti/driverlib/VREF");
    
    /**
     * Write custom configuration values to the imported modules.
     */
    const divider7       = system.clockTree["PLL_PDIV"];
    divider7.divideValue = 2;
    
    const divider9       = system.clockTree["UDIV"];
    divider9.divideValue = 2;
    
    const multiplier2         = system.clockTree["PLL_QDIV"];
    multiplier2.multiplyValue = 10;
    
    const mux4       = system.clockTree["EXHFMUX"];
    mux4.inputSelect = "EXHFMUX_XTAL";
    
    const mux8       = system.clockTree["HSCLKMUX"];
    mux8.inputSelect = "HSCLKMUX_SYSPLL0";
    
    const pinFunction4     = system.clockTree["HFXT"];
    pinFunction4.inputFreq = 40;
    
    ADC121.$name                      = "SENSE_ADC";
    ADC121.enableDMA                  = false;
    ADC121.sampClkSrc                 = "DL_ADC12_CLOCK_ULPCLK";
    ADC121.repeatMode                 = true;
    ADC121.enabledInterrupts          = ["DL_ADC12_INTERRUPT_MEM0_RESULT_LOADED"];
    ADC121.sampleTime0                = "62.5ns";
    ADC121.adcMem0chansel             = "DL_ADC12_INPUT_CHAN_1";
    ADC121.adcMem0vref                = "VREF";
    ADC121.peripheral.$assign         = "ADC0";
    ADC121.peripheral.adcPin1.$assign = "PA26";
    ADC121.adcPin1Config.$name        = "ti_driverlib_gpio_GPIOPinGeneric0";
    
    const Board                       = scripting.addModule("/ti/driverlib/Board", {}, false);
    Board.peripheral.$assign          = "DEBUGSS";
    Board.peripheral.swclkPin.$assign = "PA20";
    Board.peripheral.swdioPin.$assign = "PA19";
    
    GPIO1.$name                          = "GPIO_LEDS";
    GPIO1.associatedPins[0].$name        = "D1";
    GPIO1.associatedPins[0].assignedPort = "PORTA";
    GPIO1.associatedPins[0].assignedPin  = "10";
    
    GPIO2.$name                              = "GPIO_SWS";
    GPIO2.associatedPins[0].$name            = "SW1";
    GPIO2.associatedPins[0].direction        = "INPUT";
    GPIO2.associatedPins[0].assignedPort     = "PORTA";
    GPIO2.associatedPins[0].assignedPin      = "11";
    GPIO2.associatedPins[0].internalResistor = "PULL_UP";
    GPIO2.associatedPins[0].inputFilter      = "3_CYCLES";
    
    GPIO3.port                          = "PORTA";
    GPIO3.$name                         = "GPIO_SENSE";
    GPIO3.associatedPins.create(8);
    GPIO3.associatedPins[0].$name       = "DRV_0";
    GPIO3.associatedPins[0].assignedPin = "3";
    GPIO3.associatedPins[1].$name       = "DRV_1";
    GPIO3.associatedPins[1].assignedPin = "4";
    GPIO3.associatedPins[2].$name       = "DRV_2";
    GPIO3.associatedPins[2].assignedPin = "5";
    GPIO3.associatedPins[3].$name       = "DRV_3";
    GPIO3.associatedPins[3].assignedPin = "6";
    GPIO3.associatedPins[4].$name       = "DRV_4";
    GPIO3.associatedPins[4].assignedPin = "25";
    GPIO3.associatedPins[5].$name       = "DRV_5";
    GPIO3.associatedPins[5].assignedPin = "24";
    GPIO3.associatedPins[6].$name       = "DRV_6";
    GPIO3.associatedPins[6].assignedPin = "18";
    GPIO3.associatedPins[7].$name       = "DRV_7";
    GPIO3.associatedPins[7].assignedPin = "17";
    
    PWM1.$name                              = "TIM_SENSE_0";
    PWM1.event1PublisherChannel             = 5;
    PWM1.event2PublisherChannel             = 6;
    PWM1.event1ControllerInterruptEn        = ["CC0_DN_EVENT"];
    PWM1.event2ControllerInterruptEn        = ["CC1_DN_EVENT"];
    PWM1.crossTriggerEn                     = true;
    PWM1.timerStartTimer                    = true;
    PWM1.peripheral.$assign                 = "TIMG6";
    PWM1.PWM_CHANNEL_0.$name                = "ti_driverlib_pwm_PWMTimerCC0";
    PWM1.PWM_CHANNEL_1.$name                = "ti_driverlib_pwm_PWMTimerCC1";
    PWM1.ccp0PinConfig.direction            = scripting.forceWrite("OUTPUT");
    PWM1.ccp0PinConfig.hideOutputInversion  = scripting.forceWrite(false);
    PWM1.ccp0PinConfig.onlyInternalResistor = scripting.forceWrite(false);
    PWM1.ccp0PinConfig.passedPeripheralType = scripting.forceWrite("Digital");
    PWM1.ccp0PinConfig.$name                = "ti_driverlib_gpio_GPIOPinGeneric4";
    PWM1.ccp1PinConfig.direction            = scripting.forceWrite("OUTPUT");
    PWM1.ccp1PinConfig.hideOutputInversion  = scripting.forceWrite(false);
    PWM1.ccp1PinConfig.onlyInternalResistor = scripting.forceWrite(false);
    PWM1.ccp1PinConfig.passedPeripheralType = scripting.forceWrite("Digital");
    PWM1.ccp1PinConfig.$name                = "ti_driverlib_gpio_GPIOPinGeneric5";
    
    PWM2.$name                              = "TIM_SENSE_1";
    PWM2.event1PublisherChannel             = 7;
    PWM2.event2PublisherChannel             = 8;
    PWM2.event1ControllerInterruptEn        = ["CC0_DN_EVENT"];
    PWM2.timerStartTimer                    = true;
    PWM2.crossTriggerEn                     = true;
    PWM2.event2ControllerInterruptEn        = ["CC1_DN_EVENT"];
    PWM2.peripheral.$assign                 = "TIMG7";
    PWM2.PWM_CHANNEL_0.$name                = "ti_driverlib_pwm_PWMTimerCC2";
    PWM2.PWM_CHANNEL_1.$name                = "ti_driverlib_pwm_PWMTimerCC3";
    PWM2.ccp0PinConfig.direction            = scripting.forceWrite("OUTPUT");
    PWM2.ccp0PinConfig.hideOutputInversion  = scripting.forceWrite(false);
    PWM2.ccp0PinConfig.onlyInternalResistor = scripting.forceWrite(false);
    PWM2.ccp0PinConfig.passedPeripheralType = scripting.forceWrite("Digital");
    PWM2.ccp0PinConfig.$name                = "ti_driverlib_gpio_GPIOPinGeneric6";
    PWM2.ccp1PinConfig.direction            = scripting.forceWrite("OUTPUT");
    PWM2.ccp1PinConfig.hideOutputInversion  = scripting.forceWrite(false);
    PWM2.ccp1PinConfig.onlyInternalResistor = scripting.forceWrite(false);
    PWM2.ccp1PinConfig.passedPeripheralType = scripting.forceWrite("Digital");
    PWM2.ccp1PinConfig.$name                = "ti_driverlib_gpio_GPIOPinGeneric7";
    
    SYSCTL.forceDefaultClkConfig = true;
    SYSCTL.clockTreeEn           = true;
    
    UART1.$name                            = "UART_DBG";
    UART1.txPinConfig.direction            = scripting.forceWrite("OUTPUT");
    UART1.txPinConfig.hideOutputInversion  = scripting.forceWrite(false);
    UART1.txPinConfig.onlyInternalResistor = scripting.forceWrite(false);
    UART1.txPinConfig.passedPeripheralType = scripting.forceWrite("Digital");
    UART1.txPinConfig.$name                = "ti_driverlib_gpio_GPIOPinGeneric2";
    UART1.txPinConfig.enableConfig         = true;
    UART1.txPinConfig.internalResistor     = "PULL_DOWN";
    UART1.rxPinConfig.hideOutputInversion  = scripting.forceWrite(false);
    UART1.rxPinConfig.onlyInternalResistor = scripting.forceWrite(false);
    UART1.rxPinConfig.passedPeripheralType = scripting.forceWrite("Digital");
    UART1.rxPinConfig.$name                = "ti_driverlib_gpio_GPIOPinGeneric3";
    
    VREF.peripheral.$assign            = "VREF";
    VREF.peripheral.vrefPosPin.$assign = "PA23";
    VREF.vrefPosPinConfig.$name        = "ti_driverlib_gpio_GPIOPinGeneric1";
    
    const ProjectConfig              = scripting.addModule("/ti/project_config/ProjectConfig", {}, false);
    ProjectConfig.migrationCondition = true;
    
    /**
     * 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.
     */
    GPIO1.associatedPins[0].pin.$suggestSolution = "PA10";
    GPIO2.associatedPins[0].pin.$suggestSolution = "PA11";
    GPIO3.associatedPins[0].pin.$suggestSolution = "PA3";
    GPIO3.associatedPins[1].pin.$suggestSolution = "PA4";
    GPIO3.associatedPins[2].pin.$suggestSolution = "PA5";
    GPIO3.associatedPins[3].pin.$suggestSolution = "PA6";
    GPIO3.associatedPins[4].pin.$suggestSolution = "PA25";
    GPIO3.associatedPins[5].pin.$suggestSolution = "PA24";
    GPIO3.associatedPins[6].pin.$suggestSolution = "PA18";
    GPIO3.associatedPins[7].pin.$suggestSolution = "PA17";
    PWM1.peripheral.ccp0Pin.$suggestSolution     = "PA21";
    PWM1.peripheral.ccp1Pin.$suggestSolution     = "PA22";
    PWM2.peripheral.ccp0Pin.$suggestSolution     = "<error>";
    PWM2.peripheral.ccp1Pin.$suggestSolution     = "PA2";
    UART1.peripheral.$suggestSolution            = "UART0";
    UART1.peripheral.rxPin.$suggestSolution      = "PA1";
    UART1.peripheral.txPin.$suggestSolution      = "PA0";
    √

  • If you need to configure a Timer in compare mode, you can configure it to a generate timer.

    then in main function, configure it to compare mode manually.

    For the detailed configuration, you can setup another project for reference.

    This resource limitation error can not to ignore in the current version of syscfg.

  • Could you demonstrate some code for this?  How I'm supposed to get a compiled project isn't obvious from your description.

  • As we know, syscfg will generate the init code in ti_msp_dl_config.x

    1. use another project to configure the timer to PWM output, there will be internal CC compare mode setting in ti_msp_dl_config.c

    2. Add a basic timer in your main project's syscfg.

    3. copy the essential part of TIMer init code from step 1 to your main project in main function, try to manually config the timer's compare function.