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.

Compiler/TMS320F280270: ccs

Part Number: TMS320F280270
Other Parts Discussed in Thread: CONTROLSUITE, C2000WARE

Tool/software: TI C/C++ Compiler

I am trying to produce three phase sine wave using epwm module. these are some predefined variables

#define DEAD_BAND 37.5
#define TB_PRD 61.03515625
#define CLK_DIV TB_DIV4
#define HSPCLK_DIV TB_DIV4

the program is stuck at epwm2 init function.

void InitEPwm1()
{
EPwm1Regs.PCCTL.bit.CHPFREQ = 1;
EPwm1Regs.PCCTL.bit.CHPEN = 1;

EPwm1Regs.TBPRD = TB_PRD; // Set timer period
EPwm1Regs.TBPHS.half.TBPHS = 0x0000; // Phase is 0
EPwm1Regs.TBCTR = 0x0000; // Clear counter

// Setup TBCLK
EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // Count up
EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; // Disable phase loading
EPwm1Regs.TBCTL.bit.HSPCLKDIV = HSPCLK_DIV; // Clock ratio to SYSCLKOUT
EPwm1Regs.TBCTL.bit.CLKDIV = CLK_DIV;
EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO; //Generar una señal cuando CTR = 0. Esto hace al PWM1 como el maestro.

EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW; // Load registers every ZERO
EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;

// Setup compare
EPwm1Regs.CMPA.half.CMPA = TB_PRD;

// Set actions
EPwm1Regs.AQCTLA.bit.CAU = AQ_SET; // Set PWM1A on Zero
EPwm1Regs.AQCTLA.bit.CAD = AQ_CLEAR;


EPwm1Regs.AQCTLB.bit.CAU = AQ_CLEAR; // Set PWM1A on Zero
EPwm1Regs.AQCTLB.bit.CAD = AQ_SET;

// Active Low PWMs - Setup Deadband
EPwm1Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE;
EPwm1Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC;
EPwm1Regs.DBCTL.bit.IN_MODE = DBA_ALL;
EPwm1Regs.DBRED = DEAD_BAND;
EPwm1Regs.DBFED = DEAD_BAND;

EPwm1Regs.ETSEL.bit.INTEN = 1; // Habilitar interrupción por evento.
EPwm1Regs.ETSEL.bit.INTSEL = ET_CTRD_CMPA;
EPwm1Regs.ETPS.bit.INTPRD = ET_1ST; //Interrupt on first event.
}


void InitEPwm2()
{

EPwm2Regs.TBPRD = TB_PRD; // Set timer period
EPwm2Regs.TBPHS.half.TBPHS = EPwm1Regs.TBPRD/3; // TBPHS = 1/3*TBPRD.
EPwm2Regs.TBCTR = 0x0000; // Clear counter

// Setup TBCLK
EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // Count up
EPwm2Regs.TBCTL.bit.PHSEN = TB_ENABLE; // Disable phase loading
EPwm2Regs.TBCTL.bit.HSPCLKDIV = HSPCLK_DIV; // Clock ratio to SYSCLKOUT
EPwm2Regs.TBCTL.bit.CLKDIV = CLK_DIV; // Slow just to observe on the scope
EPwm2Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN; // PWM2 esclavo del PWM1.

// Setup compare
EPwm2Regs.CMPA.half.CMPA = TB_PRD;

// Set actions
EPwm2Regs.AQCTLA.bit.CAU = AQ_SET; // Set PWM2A on Zero
EPwm2Regs.AQCTLA.bit.CAD = AQ_CLEAR;


EPwm2Regs.AQCTLB.bit.CAU = AQ_CLEAR; // Set PWM2A on Zero
EPwm2Regs.AQCTLB.bit.CAD = AQ_SET;

// Active Low complementary PWMs - setup the deadband
EPwm2Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE;
EPwm2Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC;
EPwm2Regs.DBCTL.bit.IN_MODE = DBA_ALL;
EPwm2Regs.DBRED = DEAD_BAND;
EPwm2Regs.DBFED = DEAD_BAND;
}

does the problem is because of  #define TB_PRD 61.03515625 and #define DEAD_BAND 37.5 as it is being provided float value.

can someone please provide some remedy for this.

  • Hello,
    I am writing to let you know that a C2000 team member has been assigned to this post and should be answering shortly.

    Regards
    Baskaran
  • Hi,

    Mithilesh Chaubey said:
    does the problem is because of  #define TB_PRD 61.03515625 and #define DEAD_BAND 37.5 as it is being provided float value.

    First of all neither TBPRD nor DBRED/FED take floating values. You need to correct that. Secondly, please refer this example code:

    C:\ti\controlSUITE\device_support\f2802x0\v230\f2802x0_examples_structs\epwm_deadband

    Regards,

    Gautam 

  • implemented the above mentioned suggestion. still facing the same problem.
    No source available for "0x3f73ac"
  • waiting for some response
  • Hi Mithilesh,

    If you change the TBPRD to an integer value does the issue go away? Have you verified with hardware breakpoints what the last line of code normally executed is?

    Regards,
    Kris
  • yes i have changed it to integer but it didnt get resolved. It is getting stuck somewhere after epwm2 init and not entering the epwm1 isr loop.
    posting the complete code
  • #include "DSP28x_Project.h" // Device Headerfile and Examples Include File
    #include "IQMAthLib.h"



    #pragma DATA_SECTION(sine_table, "IQmathTables");
    _iq30 sine_table[512];

    // Prototype statements for functions found within this file.

    /********************************************************************************/

    /*********************************************************************************/

    void InitEPwm1(void);
    void InitEPwm2(void);
    void InitEPwm3(void);

    interrupt void epwm1_isr(void);


    // Global variables used in this example
    Uint32 EPwm1TimerIntCount;
    Uint16 LoopCount;
    Uint16 ConversionCount;
    Uint32 Duty;
    float Amplitud;


    #define DEAD_BAND 375
    #define TB_PRD 6000
    #define CLK_DIV TB_DIV4
    #define HSPCLK_DIV TB_DIV4

    void main(void)
    {
    // Step 1. Initialize System Control:
    // PLL, WatchDog, enable Peripheral Clocks
    // This example function is found in the DSP2802x_SysCtrl.c file.
    InitSysCtrl();

    // Step 2. Initalize GPIO:
    // This example function is found in the DSP2802x_Gpio.c file and
    // illustrates how to set the GPIO to it's default state.
    // InitGpio(); // Skipped for this example

    // For this case just init GPIO pins for ePWM1, ePWM2, ePWM3
    // These functions are in the DSP2802x_EPwm.c file
    InitEPwm1Gpio();
    InitEPwm2Gpio();
    InitEPwm3Gpio();

    // Step 3. Clear all interrupts and initialize PIE vector table:
    // Disable CPU interrupts
    DINT;

    // Initialize the PIE control registers to their default state.
    // The default state is all PIE interrupts disabled and flags
    // are cleared.
    // This function is found in the DSP2802x_PieCtrl.c file.
    InitPieCtrl();

    // Disable CPU interrupts and clear all CPU interrupt flags:
    IER = 0x0000;
    IFR = 0x0000;

    // Initialize the PIE vector table with pointers to the shell Interrupt
    // Service Routines (ISR).
    // This will populate the entire table, even if the interrupt
    // is not used in this example. This is useful for debug purposes.
    // The shell ISR routines are found in DSP2802x_DefaultIsr.c.
    // This function is found in DSP2802x_PieVect.c.
    InitPieVectTable();

    // Interrupts that are used in this example are re-mapped to
    // ISR functions found within this file.
    EALLOW; // This is needed to write to EALLOW protected registers
    PieVectTable.EPWM1_INT = &epwm1_isr;
    // PieVectTable.ADCINT1 = &adc_isr;
    EDIS; // This is needed to disable write to EALLOW protected registers

    // Step 4. Initialize all the Device Peripherals:
    // This function is found in DSP2802x_InitPeripherals.c
    // InitPeripherals(); // Not required for this example


    EALLOW;
    SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0;
    EDIS;

    InitEPwm1();
    InitEPwm2();
    InitEPwm3();

    EALLOW;
    SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;
    EDIS;

    // Step 5. User specific code, enable interrupts
    // Initalize counters:
    EPwm1TimerIntCount = 0;

    // Enable CPU INT3 which is connected to EPWM1-3 INT:
    IER |= M_INT3;
    IER |= M_INT1; // Enable CPU Interrupt 1

    // Enable EPWM INTn in the PIE: Group 3 interrupt 1-3
    PieCtrlRegs.PIEIER1.bit.INTx1 = 1; // Enable INT 1.1 in the PIE
    PieCtrlRegs.PIEIER3.bit.INTx1 = 1;
    PieCtrlRegs.PIEIER3.bit.INTx2 = 1;
    PieCtrlRegs.PIEIER3.bit.INTx3 = 1;

    // Enable global Interrupts and higher priority real-time debug events:
    EINT; // Enable Global interrupt INTM
    ERTM; // Enable Global realtime interrupt DBGM


    // Step 6. IDLE loop. Just sit and loop forever (optional):
    for(;;)
    {
    asm(" NOP");
    }

    }

    interrupt void epwm1_isr(void)
    {
    static unsigned int index = 0;//Index in look-up table.
    EALLOW;
    SysCtrlRegs.WDKEY = 0xAA;//Whatchdog Service #2.
    EDIS;

    EPwm1Regs.CMPA.half.CMPA = (EPwm1Regs.TBPRD) -_IQsat( _IQ30mpy((sine_table[index]+_IQ30(0.9999))/2, EPwm1Regs.TBPRD), EPwm1Regs.TBPRD,0);
    EPwm2Regs.CMPA.half.CMPA = EPwm1Regs.CMPA.half.CMPA;
    EPwm3Regs.CMPA.half.CMPA = EPwm1Regs.CMPA.half.CMPA;

    index +=1;
    if(index > 511) index = 0;
    // Clear INT flag for this timer
    EPwm1Regs.ETCLR.bit.INT = 1;
    // Acknowledge this interrupt to receive more interrupts from group 3
    PieCtrlRegs.PIEACK.all = PIEACK_GROUP3;
    }

    void InitEPwm1()
    {
    EPwm1Regs.PCCTL.bit.CHPFREQ = 1;
    EPwm1Regs.PCCTL.bit.CHPEN = 1;

    EPwm1Regs.TBPRD = TB_PRD; // Set timer period
    EPwm1Regs.TBPHS.half.TBPHS = 0x0000; // Phase is 0
    EPwm1Regs.TBCTR = 0x0000; // Clear counter

    // Setup TBCLK
    EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // Count up
    EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; // Disable phase loading
    EPwm1Regs.TBCTL.bit.HSPCLKDIV = HSPCLK_DIV; // Clock ratio to SYSCLKOUT
    EPwm1Regs.TBCTL.bit.CLKDIV = CLK_DIV;
    EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO; //Generar una señal cuando CTR = 0. Esto hace al PWM1 como el maestro.

    EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW; // Load registers every ZERO
    EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
    EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
    EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;

    // Setup compare
    EPwm1Regs.CMPA.half.CMPA = TB_PRD;

    // Set actions
    EPwm1Regs.AQCTLA.bit.CAU = AQ_SET; // Set PWM1A on Zero
    EPwm1Regs.AQCTLA.bit.CAD = AQ_CLEAR;


    EPwm1Regs.AQCTLB.bit.CAU = AQ_CLEAR; // Set PWM1A on Zero
    EPwm1Regs.AQCTLB.bit.CAD = AQ_SET;

    // Active Low PWMs - Setup Deadband
    EPwm1Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE;
    EPwm1Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC;
    EPwm1Regs.DBCTL.bit.IN_MODE = DBA_ALL;
    EPwm1Regs.DBRED = DEAD_BAND;
    EPwm1Regs.DBFED = DEAD_BAND;

    EPwm1Regs.ETSEL.bit.INTEN = 1; // Habilitar interrupción por evento.
    EPwm1Regs.ETSEL.bit.INTSEL = ET_CTRD_CMPA;
    EPwm1Regs.ETPS.bit.INTPRD = ET_1ST; //Interrupt on first event.
    }


    void InitEPwm2()
    {

    EPwm2Regs.TBPRD = TB_PRD; // Set timer period
    EPwm2Regs.TBPHS.half.TBPHS = EPwm1Regs.TBPRD/3; // TBPHS = 1/3*TBPRD.
    EPwm2Regs.TBCTR = 0x0000; // Clear counter

    // Setup TBCLK
    EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // Count up
    EPwm2Regs.TBCTL.bit.PHSEN = TB_ENABLE; // Disable phase loading
    EPwm2Regs.TBCTL.bit.HSPCLKDIV = HSPCLK_DIV; // Clock ratio to SYSCLKOUT
    EPwm2Regs.TBCTL.bit.CLKDIV = CLK_DIV; // Slow just to observe on the scope
    EPwm2Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN; // PWM2 esclavo del PWM1.

    // Setup compare
    EPwm2Regs.CMPA.half.CMPA = TB_PRD;

    // Set actions
    EPwm2Regs.AQCTLA.bit.CAU = AQ_SET; // Set PWM2A on Zero
    EPwm2Regs.AQCTLA.bit.CAD = AQ_CLEAR;


    EPwm2Regs.AQCTLB.bit.CAU = AQ_CLEAR; // Set PWM2A on Zero
    EPwm2Regs.AQCTLB.bit.CAD = AQ_SET;

    // Active Low complementary PWMs - setup the deadband
    EPwm2Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE;
    EPwm2Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC;
    EPwm2Regs.DBCTL.bit.IN_MODE = DBA_ALL;
    EPwm2Regs.DBRED = DEAD_BAND;
    EPwm2Regs.DBFED = DEAD_BAND;
    }

    void InitEPwm3()
    {

    EPwm3Regs.TBPRD = TB_PRD; // Set timer period
    EPwm3Regs.TBPHS.half.TBPHS = 2*(EPwm1Regs.TBPRD)/3; // TBPHS = 2/3*TBPRD
    EPwm3Regs.TBCTR = 0x0000; // Clear counter


    // Setup TBCLK
    EPwm3Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // Count up
    EPwm3Regs.TBCTL.bit.PHSEN = TB_ENABLE; // Disable phase loading
    EPwm3Regs.TBCTL.bit.HSPCLKDIV = HSPCLK_DIV; // Clock ratio to SYSCLKOUT
    EPwm3Regs.TBCTL.bit.CLKDIV = CLK_DIV; // Slow so we can observe on the scope

    // Setup compare
    EPwm3Regs.CMPA.half.CMPA = TB_PRD;

    // Set actions
    EPwm3Regs.AQCTLA.bit.CAU = AQ_SET; // Set PWM3A on Zero
    EPwm3Regs.AQCTLA.bit.CAD = AQ_CLEAR;


    EPwm3Regs.AQCTLB.bit.CAU = AQ_CLEAR; // Set PWM3A on Zero
    EPwm3Regs.AQCTLB.bit.CAD = AQ_SET;

    // Active high complementary PWMs - Setup the deadband
    EPwm3Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE;
    EPwm3Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC;
    EPwm3Regs.DBCTL.bit.IN_MODE = DBA_ALL;
    EPwm3Regs.DBRED = DEAD_BAND;
    EPwm3Regs.DBFED = DEAD_BAND;
    }

    /*********************************************************************************************************************************/
  • Can you set a breakpoint on the "EINT" line and tell me if it is reached? If it is reached, try to move it to the following line and run again. The easiest way to narrow this down will be to enter debug mode and keep right clicking a few lines ahead and do "run to line". You should be able to figure out the line which goes bad within 10-15 minutes using this method.

    Are you running from RAM or Flash? The address you gave in the error is in flash. If this is the case, are you able to try running it from RAM?

    Thanks,

    Kris

  • no it not reaching "EINT". it control losses after void InitEPwm2().
  • Mithilesh,

    We will need you to narrow this down to a line of code using the "run to line" method described previously.

    Is your program in Flash or RAM?

    Regards,
    Kris
  • void InitEPwm2()
    {

    EPwm2Regs.TBPRD = TB_PRD; // Set timer period
    EPwm2Regs.TBPHS.half.TBPHS = EPwm1Regs.TBPRD/3; // TBPHS = 1/3*TBPRD.
    EPwm2Regs.TBCTR = 0x0000; // Clear counter

    // Setup TBCLK
    EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // Count up
    EPwm2Regs.TBCTL.bit.PHSEN = TB_ENABLE; // Disable phase loading
    EPwm2Regs.TBCTL.bit.HSPCLKDIV = HSPCLK_DIV; // Clock ratio to SYSCLKOUT
    EPwm2Regs.TBCTL.bit.CLKDIV = CLK_DIV; // Slow just to observe on the scope
    EPwm2Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN; // PWM2 esclavo del PWM1.

    // Setup compare
    EPwm2Regs.CMPA.half.CMPA = TB_PRD;

    // Set actions
    EPwm2Regs.AQCTLA.bit.CAU = AQ_SET; // Set PWM2A on Zero
    EPwm2Regs.AQCTLA.bit.CAD = AQ_CLEAR;


    EPwm2Regs.AQCTLB.bit.CAU = AQ_CLEAR; // Set PWM2A on Zero
    EPwm2Regs.AQCTLB.bit.CAD = AQ_SET;

    // Active Low complementary PWMs - setup the deadband
    EPwm2Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE;
    EPwm2Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC;
    EPwm2Regs.DBCTL.bit.IN_MODE = DBA_ALL;
    EPwm2Regs.DBRED = DEAD_BAND;
    EPwm2Regs.DBFED = DEAD_BAND;
    ****LINE 270***}

    void InitEPwm3()
    {

    ****LINE 275** EPwm3Regs.TBPRD = TB_PRD; // Set timer period
    EPwm3Regs.TBPHS.half.TBPHS = 2*(EPwm1Regs.TBPRD)/3; // TBPHS = 2/3*TBPRD
    EPwm3Regs.TBCTR = 0x0000; // Clear counter

    THE CONTROL IS GOING TO LINE 270 BUT IS NOT JUMPING TO LINE 275 WHICH IS THE NEXT STATEMENT TO BE EXECUTED
  • Mithilesh,

    Can you make sure that compiler optimizations are turned off for testing?

    Can you also do a run to line for line 270 and then take a screen capture of the disassembly window? Please show a handful of instructions before and after.

    Are you able to post a .zip of your project? I would like to run it locally to accelerate the debug.

    Regards,
    Kris

  • Kris,

    Attaching .zip file threepwm.rar

  • Kris,

    Just tried importing deadband project from the example folder. after build i am getting error.
    here is the error that i am getting


    **** Build of configuration RAM for project Example_F2802xEPwmDeadBand ****

    "C:\\ti\\ccsv7\\utils\\bin\\gmake" -k all
    'Building file: ../Example_2802xEPwmDeadBand.c'
    'Invoking: C2000 Compiler'
    "C:/ti/ccsv7/tools/compiler/ti-cgt-c2000_16.9.3.LTS/bin/cl2000" -v28 -ml -mt -g --include_path="C:/ti/ccsv7/tools/compiler/ti-cgt-c2000_16.9.3.LTS/include" --include_path="/packages/ti/xdais" --include_path="C:/ti/controlSUITE/development_kits/C2000_LaunchPad" --include_path="C:/ti/controlSUITE/libs/math/IQmath/v15c/include" --define=_DEBUG --define=LARGE_MODEL --quiet --verbose_diagnostics --diag_warning=225 --output_all_syms --cdebug_asm_data --preproc_with_compile --preproc_dependency="Example_2802xEPwmDeadBand.d" "../Example_2802xEPwmDeadBand.c"
    'Finished building: ../Example_2802xEPwmDeadBand.c'
    ' '
    'Building target: Example_F2802xEPwmDeadBand.out'
    'Invoking: C2000 Linker'
    "C:/ti/ccsv7/tools/compiler/ti-cgt-c2000_16.9.3.LTS/bin/cl2000" -v28 -ml -mt -g --define=_DEBUG --define=LARGE_MODEL --quiet --verbose_diagnostics --diag_warning=225 --output_all_syms --cdebug_asm_data -z --stack_size=0x200 -m"Example_F2802xEPwmDeadBand.map" --warn_sections -i"C:/ti/ccsv7/tools/compiler/ti-cgt-c2000_16.9.3.LTS/lib" -i"C:/ti/ccsv7/tools/compiler/ti-cgt-c2000_16.9.3.LTS/include" -i"H:/workspace_v7/Example_F2802xEPwmDeadBand" -i"C:/ti/controlSUITE/development_kits/C2000_LaunchPad/f2802x_common/lib" -i"C:/ti/controlSUITE/libs/math/IQmath/v15c/lib" --reread_libs --verbose_diagnostics --issue_remarks --xml_link_info="Example_F2802xEPwmDeadBand_linkInfo.xml" --entry_point=code_start --rom_model -o "Example_F2802xEPwmDeadBand.out" "./Example_2802xEPwmDeadBand.obj" "C:/ti/controlSUITE/development_kits/C2000_LaunchPad/f2802x_headers/cmd/F2802x_Headers_nonBIOS.cmd" "C:/ti/controlSUITE/development_kits/C2000_LaunchPad/f2802x_common/lib/driverlib.lib" -l"C:/ti/controlSUITE/development_kits/C2000_LaunchPad/f2802x_common/cmd/F2802x_generic_ram.cmd" -lrts2800_ml.lib -lIQmath.lib

    >> Compilation failure
    makefile:137: recipe for target 'Example_F2802xEPwmDeadBand.out' failed
    warning: creating output section "csmpasswds" without a SECTIONS specification
    warning: creating output section "csm_rsvd" without a SECTIONS specification
    "C:/ti/controlSUITE/development_kits/C2000_LaunchPad/f2802x_common/cmd/F2802x_generic_ram.cmd", line 111: error:
    program will not fit into available memory. placement with
    alignment/blocking fails for section ".text" size 0x7c6 page 0. Available
    memory ranges:
    RAMM0 size: 0x3b0 unused: 0x0 max hole: 0x0
    RAML0 size: 0x400 unused: 0x0 max hole: 0x0
    .text : >> RAMM0 | RAML0, PAGE = 0
    "C:/ti/controlSUITE/development_kits/C2000_LaunchPad/f2802x_common/cmd/F2802x_generic_ram.cmd", line 112: error:
    program will not fit into available memory. placement with
    alignment/blocking fails for section ".cinit" size 0x1a page 0. Available
    memory ranges:
    RAMM0 size: 0x3b0 unused: 0x0 max hole: 0x0
    RAML0 size: 0x400 unused: 0x0 max hole: 0x0
    .cinit : > RAMM0 | RAML0, PAGE = 0
    "C:/ti/controlSUITE/development_kits/C2000_LaunchPad/f2802x_common/cmd/F2802x_generic_ram.cmd", line 110: error:
    program will not fit into available memory. placement with
    alignment/blocking fails for section "ramfuncs" size 0x4 page 0. Available
    memory ranges:
    RAMM0 size: 0x3b0 unused: 0x0 max hole: 0x0
    RAML0 size: 0x400 unused: 0x0 max hole: 0x0
    ramfuncs : >> RAMM0 | RAML0, PAGE = 0
    warning: entry-point symbol other than "_c_int00" specified: "code_start"
    error: errors encountered during linking; "Example_F2802xEPwmDeadBand.out" not
    built
    gmake: *** [Example_F2802xEPwmDeadBand.out] Error 1
    gmake: Target 'all' not remade because of errors.

    **** Build Finished ****

    can u provide some remedy for it.
  • Mithilesh,

    This is likely an issue with the F2802x_generic_ram.cmd file. This is a common file used across many projects. Is there a chance that you modified it for your code or another project? If you added code to the project that may also do it.

    Regards,
    Kris
  • kris,

    have you gone through the earlier code. is there any correction recommended ?

    regards,
    mithilesh
  • kris,

    the problem still persists

    regards,
    mithilesh
  • Hi Mithilesh,

    Thanks for being patient. Kris is currently out of office.

    For the errors with linking, I recommend looking at this resource on linker command files:
    processors.wiki.ti.com/.../C28x_Compiler_-_Understanding_Linking

    You could also start a new workspace, import the example project from C2000Ware or controlSUITE, and build it without making any modifications to avoid errors.

    Regards,
    Elizabeth