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.

MSPM0G1107: MSPM0G1107 CCS20.2.12__1.8 hole in generated hex file

Part Number: MSPM0G1107
Other Parts Discussed in Thread: SYSCONFIG

Tool/software:

Dear Support Team,

since version 20.2 the generated linker file contains a data hole. Why does this occur? We get in trouble as data is splitted over one flash page. 

Workaround is only reachable through using the option --block_init_segments.

With versions before generated hex data were continously.

We are working with 

.TI.ramfunc for executing code in RAM loaded from flash, is this the potential cause?
Best regards
Siegfried
  • Hi Siegfried, thanks for the question! Let me discuss this internally and see if we can find an answer as to why CCS version 20.2 has the data hole and what we can possibly do to mitigate this issue.

    -Brian

  • Hi Brian,

    by the way I have additional comments to newest version. After Switching to Sysconfig tool 1.24 pwm0 was no more running. I have to set duty cycle to 50percent.
    PWM1.PWM_CHANNEL_0.dutyCycle    = 50;
    This wasn't necessary before.

    Additionally I get a warning regarding DMA Engine on UART which wasn't existing before.
    And even it doesn't exits on other channel with similar setting.

    /**
     * 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 "MSPM0G110X" --part "Default" --package "VQFN-32(RHB)" --product "mspm0_sdk@2.04.00.06"
     * @v2CliArgs --device "MSPM0G1107" --package "VQFN-32(RHB)" --product "mspm0_sdk@2.04.00.06"
     * @versions {"tool":"1.24.0+4110"}
     */
    
    /**
     * Import the modules used in this configuration.
     */
    const ADC12         = scripting.addModule("/ti/driverlib/ADC12", {}, false);
    const ADC121        = ADC12.addInstance();
    const Board         = scripting.addModule("/ti/driverlib/Board");
    const CRC           = scripting.addModule("/ti/driverlib/CRC");
    const DMA           = scripting.addModule("/ti/driverlib/DMA");
    const GPIO          = scripting.addModule("/ti/driverlib/GPIO", {}, 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 GPIO8         = GPIO.addInstance();
    const GPIO9         = GPIO.addInstance();
    const GPIO10        = GPIO.addInstance();
    const GPIO11        = GPIO.addInstance();
    const GPIO12        = GPIO.addInstance();
    const GPIO13        = GPIO.addInstance();
    const GPIO14        = GPIO.addInstance();
    const GPIO15        = GPIO.addInstance();
    const GPIO16        = GPIO.addInstance();
    const GPIO17        = GPIO.addInstance();
    const PWM           = scripting.addModule("/ti/driverlib/PWM", {}, false);
    const PWM1          = PWM.addInstance();
    const SYSCTL        = scripting.addModule("/ti/driverlib/SYSCTL");
    const SYSTICK       = scripting.addModule("/ti/driverlib/SYSTICK");
    const TIMER         = scripting.addModule("/ti/driverlib/TIMER", {}, false);
    const TIMER1        = TIMER.addInstance();
    const UART          = scripting.addModule("/ti/driverlib/UART", {}, false);
    const UART1         = UART.addInstance();
    const UART2         = UART.addInstance();
    const VREF          = scripting.addModule("/ti/driverlib/VREF");
    const ProjectConfig = scripting.addModule("/ti/project_config/ProjectConfig");
    
    /**
     * Write custom configuration values to the imported modules.
     */
    ADC121.$name                          = "ADC12_0";
    ADC121.samplingOperationMode          = "sequence";
    ADC121.configureDMA                   = true;
    ADC121.subChanID                      = 1;
    ADC121.repeatMode                     = true;
    ADC121.trigSrc                        = "DL_ADC12_TRIG_SRC_EVENT";
    ADC121.enabledInterrupts              = ["DL_ADC12_INTERRUPT_DMA_DONE"];
    ADC121.adcMem1chansel                 = "DL_ADC12_INPUT_CHAN_1";
    ADC121.adcMem2chansel                 = "DL_ADC12_INPUT_CHAN_2";
    ADC121.adcMem3chansel                 = "DL_ADC12_INPUT_CHAN_3";
    ADC121.adcMem4chansel                 = "DL_ADC12_INPUT_CHAN_7";
    ADC121.adcMem5chansel                 = "DL_ADC12_INPUT_CHAN_12";
    ADC121.adcMem7chansel                 = "DL_ADC12_INPUT_CHAN_1";
    ADC121.adcMem8chansel                 = "DL_ADC12_INPUT_CHAN_2";
    ADC121.adcMem9chansel                 = "DL_ADC12_INPUT_CHAN_3";
    ADC121.adcMem10chansel                = "DL_ADC12_INPUT_CHAN_4";
    ADC121.adcMem11chansel                = "DL_ADC12_INPUT_CHAN_5";
    ADC121.sampleTime1                    = "1 ms";
    ADC121.interruptPriority              = "1";
    ADC121.enableFIFO                     = true;
    ADC121.dataFormat                     = "DL_ADC12_SAMP_CONV_DATA_FORMAT_SIGNED";
    ADC121.adcMem0vref                    = "VREF";
    ADC121.adcMem1vref                    = "VREF";
    ADC121.adcMem2vref                    = "VREF";
    ADC121.adcMem3vref                    = "VREF";
    ADC121.adcMem4vref                    = "VREF";
    ADC121.adcMem5vref                    = "VREF";
    ADC121.adcMem4avgen                   = true;
    ADC121.adcMem5avgen                   = true;
    ADC121.adcMem3avgen                   = true;
    ADC121.adcMem2avgen                   = true;
    ADC121.adcMem1avgen                   = true;
    ADC121.adcMem0avgen                   = true;
    ADC121.endAdd                         = 1;
    ADC121.hwNumerator                    = "DL_ADC12_HW_AVG_NUM_ACC_4";
    ADC121.sampleTime0                    = "375ns";
    ADC121.sampCnt                        = 1;
    ADC121.enabledDMATriggers             = ["DL_ADC12_DMA_MEM1_RESULT_LOADED"];
    ADC121.powerDownMode                  = "DL_ADC12_POWER_DOWN_MODE_MANUAL";
    ADC121.hwDenominator                  = "DL_ADC12_HW_AVG_DEN_DIV_BY_4";
    ADC121.adcPin0Config.$name            = "ti_driverlib_gpio_GPIOPinGeneric0";
    ADC121.DMA_CHANNEL.addressMode        = "f2b";
    ADC121.DMA_CHANNEL.enableInterrupt    = true;
    ADC121.DMA_CHANNEL.enabledEvents      = ["EVENT_CHANNEL"];
    ADC121.DMA_CHANNEL.interruptPriority  = "1";
    ADC121.DMA_CHANNEL.$name              = "DMA_CH2";
    ADC121.DMA_CHANNEL.peripheral.$assign = "DMA_CH2";
    ADC121.peripheral.$assign             = "ADC0";
    ADC121.peripheral.adcPin0.$assign     = "PA27";
    ADC121.peripheral.adcPin1.$assign     = "PA26";
    ADC121.adcPin1Config.$name            = "ti_driverlib_gpio_GPIOPinGeneric1";
    
    Board.genPeriphPinFile            = true;
    Board.configureVDDA               = true;
    Board.voltageVDDA                 = 2.5;
    Board.genResourceCSV              = true;
    Board.peripheral.$assign          = "DEBUGSS";
    Board.peripheral.swclkPin.$assign = "PA20";
    Board.peripheral.swdioPin.$assign = "PA19";
    Board.genFileMod.$name            = "ti_driverlib_BoardPins0";
    Board.genFileCSV.$name            = "ti_driverlib_ResourcesCSV0";
    
    DMA.pubChanID = 3;
    
    GPIO1.port                        = "PORTA";
    GPIO1.$name                       = "IN_1";
    GPIO1.associatedPins[0].$name     = "GPIO_IN_1";
    GPIO1.associatedPins[0].direction = "INPUT";
    
    GPIO2.$name                       = "IN_2";
    GPIO2.port                        = "PORTA";
    GPIO2.associatedPins[0].direction = "INPUT";
    GPIO2.associatedPins[0].$name     = "GPIO_IN2";
    
    GPIO3.$name                         = "SPEEDTEST";
    GPIO3.associatedPins[0].ioStructure = "HS";
    GPIO3.associatedPins[0].$name       = "GPIO_SPEEDTEST";
    
    GPIO4.$name                         = "OUT_1";
    GPIO4.port                          = "PORTA";
    GPIO4.associatedPins[0].$name       = "GPIO_OUT_1";
    GPIO4.associatedPins[0].pin.$assign = "PA5";
    
    GPIO5.$name                         = "OUT_2";
    GPIO5.port                          = "PORTA";
    GPIO5.associatedPins[0].$name       = "GPIO_OUT_2";
    GPIO5.associatedPins[0].pin.$assign = "PA6";
    
    GPIO6.$name                         = "OUT_3_SSR";
    GPIO6.port                          = "PORTA";
    GPIO6.associatedPins[0].$name       = "GPIO_OUT_3_SSR";
    GPIO6.associatedPins[0].pin.$assign = "PA7";
    
    GPIO7.port                          = "PORTA";
    GPIO7.$name                         = "OUT_MODE_RED";
    GPIO7.associatedPins[0].$name       = "GPIO_OUT_MODE_RED";
    GPIO7.associatedPins[0].pin.$assign = "PA16";
    
    GPIO8.port                          = "PORTA";
    GPIO8.$name                         = "OUT_MODE_GREEN";
    GPIO8.associatedPins[0].$name       = "GPIO_OUT_MODE_GREEN";
    GPIO8.associatedPins[0].pin.$assign = "PA15";
    
    GPIO9.port                          = "PORTA";
    GPIO9.$name                         = "OUT_MODE_BLUE";
    GPIO9.associatedPins[0].$name       = "GPIO_OUT_MODE_BLUE";
    GPIO9.associatedPins[0].pin.$assign = "PA18";
    
    GPIO10.$name                         = "OUT_SEND_RED";
    GPIO10.port                          = "PORTA";
    GPIO10.associatedPins[0].$name       = "GPIO_OUT_SEND_RED";
    GPIO10.associatedPins[0].pin.$assign = "PA24";
    
    GPIO11.$name                         = "OUT_SEND_GREEN";
    GPIO11.port                          = "PORTA";
    GPIO11.associatedPins[0].$name       = "GPIO_OUT_SEND_GREEN";
    GPIO11.associatedPins[0].pin.$assign = "PA22";
    
    GPIO12.port                          = "PORTA";
    GPIO12.$name                         = "OUT_SEND_BLUE";
    GPIO12.associatedPins[0].$name       = "GPIO_OUT_SEND_BLUE";
    GPIO12.associatedPins[0].pin.$assign = "PA25";
    
    GPIO13.$name                         = "OUT_STATUS_RED";
    GPIO13.port                          = "PORTA";
    GPIO13.associatedPins[0].$name       = "GPIO_OUT_STATUS_RED";
    GPIO13.associatedPins[0].pin.$assign = "PA11";
    
    GPIO14.$name                         = "OUT_STATUS_GREEN";
    GPIO14.port                          = "PORTA";
    GPIO14.associatedPins[0].$name       = "GPIO_OUT_STATUS_GREEN";
    GPIO14.associatedPins[0].pin.$assign = "PA10";
    
    GPIO15.port                          = "PORTA";
    GPIO15.$name                         = "OUT_STATUS_BLUE";
    GPIO15.associatedPins[0].$name       = "GPIO_OUT_STATUS_BLUE";
    GPIO15.associatedPins[0].pin.$assign = "PA14";
    
    GPIO16.$name                          = "IN_ENV_DIRECT";
    GPIO16.associatedPins[0].$name        = "GPIO_IN_ENV_DIRECT";
    GPIO16.associatedPins[0].direction    = "INPUT";
    GPIO16.associatedPins[0].assignedPort = "PORTA";
    GPIO16.associatedPins[0].ioStructure  = "HS";
    GPIO16.associatedPins[0].pin.$assign  = "PA12";
    
    GPIO17.$name                          = "RECEIVE_SENSITIVITY";
    GPIO17.associatedPins[0].$name        = "GPIO_RECEIVE_SENSITIVITY";
    GPIO17.associatedPins[0].assignedPort = "PORTA";
    GPIO17.associatedPins[0].pin.$assign  = "PA2";
    
    PWM1.$name                      = "PWM_0";
    PWM1.ccIndex                    = [0];
    PWM1.PWM_CHANNEL_0.$name        = "ti_driverlib_pwm_PWMTimerCC0";
    PWM1.PWM_CHANNEL_0.dutyCycle    = 50;
    PWM1.ccp0PinConfig.$name        = "ti_driverlib_gpio_GPIOPinGeneric15";
    PWM1.peripheral.$assign         = "TIMA1";
    PWM1.peripheral.ccp0Pin.$assign = "PA17";
    
    SYSCTL.forceDefaultClkConfig = true;
    SYSCTL.clockTreeEn           = true;
    SYSCTL.waitState             = "0";
    
    SYSTICK.periodEnable      = true;
    SYSTICK.interruptEnable   = true;
    SYSTICK.systickEnable     = true;
    SYSTICK.period            = 32000;
    SYSTICK.interruptPriority = "0";
    
    TIMER1.$name                       = "TIMER_0";
    TIMER1.timerStartTimer             = true;
    TIMER1.event1ControllerInterruptEn = ["ZERO_EVENT"];
    TIMER1.event1PublisherChannel      = 1;
    TIMER1.timerPeriod                 = "10 us";
    TIMER1.peripheral.$assign          = "TIMA0";
    
    UART1.$name                             = "UART_0";
    UART1.enabledDMATXTriggers              = "DL_UART_DMA_INTERRUPT_TX";
    UART1.rxFifoThreshold                   = "DL_UART_RX_FIFO_LEVEL_ONE_ENTRY";
    UART1.txFifoThreshold                   = "DL_UART_TX_FIFO_LEVEL_3_4_EMPTY";
    UART1.enabledInterrupts                 = ["DMA_DONE_TX","EOT_DONE","RX"];
    UART1.targetBaudRate                    = 38400;
    UART1.peripheral.$assign                = "UART0";
    UART1.peripheral.rxPin.$assign          = "PA1";
    UART1.peripheral.txPin.$assign          = "PA0";
    UART1.txPinConfig.$name                 = "ti_driverlib_gpio_GPIOPinGeneric3";
    UART1.rxPinConfig.$name                 = "ti_driverlib_gpio_GPIOPinGeneric4";
    UART1.rxPinConfig.enableConfig          = true;
    UART1.DMA_CHANNEL_TX.$name              = "DMA_CH3";
    UART1.DMA_CHANNEL_TX.dstLength          = "BYTE";
    UART1.DMA_CHANNEL_TX.addressMode        = "b2f";
    UART1.DMA_CHANNEL_TX.enableInterrupt    = true;
    UART1.DMA_CHANNEL_TX.srcLength          = "BYTE";
    UART1.DMA_CHANNEL_TX.peripheral.$assign = "DMA_CH3";
    
    UART2.$name                             = "UART_1";
    UART2.enabledDMATXTriggers              = "DL_UART_DMA_INTERRUPT_TX";
    UART2.enabledInterrupts                 = ["DMA_DONE_TX","EOT_DONE","RX"];
    UART2.targetBaudRate                    = 38400;
    UART2.peripheral.$assign                = "UART1";
    UART2.peripheral.rxPin.$assign          = "PA9";
    UART2.peripheral.txPin.$assign          = "PA8";
    UART2.txPinConfig.$name                 = "ti_driverlib_gpio_GPIOPinGeneric2";
    UART2.rxPinConfig.$name                 = "ti_driverlib_gpio_GPIOPinGeneric9";
    UART2.DMA_CHANNEL_TX.$name              = "DMA_CH4";
    UART2.DMA_CHANNEL_TX.srcLength          = "BYTE";
    UART2.DMA_CHANNEL_TX.dstLength          = "BYTE";
    UART2.DMA_CHANNEL_TX.srcIncrement       = "INCREMENT";
    UART2.DMA_CHANNEL_TX.addressMode        = "b2f";
    UART2.DMA_CHANNEL_TX.enableInterrupt    = true;
    UART2.DMA_CHANNEL_TX.peripheral.$assign = "DMA_CH4";
    
    VREF.basicIntVolt                  = "DL_VREF_BUFCONFIG_OUTPUT_2_5V";
    VREF.basicVrefPins                 = "VREF+-";
    VREF.basicMode                     = "DL_VREF_ENABLE_DISABLE";
    VREF.basicExtVolt                  = 2.5;
    VREF.vrefPosPinConfig.$name        = "ti_driverlib_gpio_GPIOPinGeneric10";
    VREF.peripheral.$assign            = "VREF";
    VREF.peripheral.vrefPosPin.$assign = "PA23";
    VREF.peripheral.vrefNegPin.$assign = "PA21";
    VREF.vrefNegPinConfig.$name        = "ti_driverlib_gpio_GPIOPinGeneric14";
    
    ProjectConfig.deviceSpin = "MSPM0G1107";
    ProjectConfig.genLinker  = false;
    
    /**
     * 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 = "PA3";
    GPIO2.associatedPins[0].pin.$suggestSolution = "PA4";
    GPIO3.associatedPins[0].pin.$suggestSolution = "PA13";
    

    Please find attached corresponding main.syscfg Configuration. Compare UART_0 with UART_1 

    UART1.rxFifoThreshold = "DL_UART_RX_FIFO_LEVEL_ONE_ENTRY";
    UART1.txFifoThreshold = "DL_UART_TX_FIFO_LEVEL_3_4_EMPTY";
    These elements are no more visible in GUI Software but in config file only on one UART

    deleting
    UART2.DMA_CHANNEL_TX.srcIncrement       = "INCREMENT";
    this entry removes warning

  • Ok thanks for this additional info, that may be a bug, I will bring this up to the team.