Fading Coder

One Final Commit for the Last Sprint

Home > Tech > Content

Setting Up Your First TMS320F2812 Project in CCS6.0

Tech May 16 2

Creating a new CCS6.0 project for TMS320F2812 requires several configuration steps. This guide walks through the complete setup process, from project creation to successful compilation.

Project Configuration

Open CCS6.0 and navigate to Project → New CCS Project. Configure the following settings:

  • Target: TMS320F2812
  • Connection: Select your emulator (XDS100v2 or equivalant)
  • Output Type: Executable
  • Compiler: C6000

Click Finish to generate the project skeleton.

Project Structure

After project creation, add the necessary source and header files. Organize the project directory with separate header and source folders:

project/
├── header/
│   ├── DSP28_Device.h
│   └── other_headers.h
├── source/
│   ├── DSP28_GlobalVariableDefs.c
│   └── other_sources.c
└── main.c

Configure include paths: Project → Properties → Build → C6000 Compiler → Include Options, and add the header directory path.

Main Applicasion Code

#include "DSP28_Device.h"
#include <stdio.h>

void main(void)
{
    /* System initialization */
    InitSysCtrl();

    /* Disable interrupts */
    DINT;
    IER = 0x0000;
    IFR = 0x0000;

    /* Initialize PIE block */
    InitPieCtrl();

    /* Initialize PIE interrupt vector table */
    InitPieVectTable();

    printf("Hello DSP !");

    while(1);
}

Compilation Troubleshooting

printf Support Issue

Initial compilation produces errors related to printf function implementation. The standard printf library generates excessive code overhead, exceeding available memory on the F2812 device.

Solution: Navigate to Project → Properties → Build → Advanced Options → Library Funciton Assumptions. Set Level of printf/scanf support required to minimal.

Peripheral Section Allocation

Remaining warnings indicate unassigned peripheral register sections. These must be properly mapped in the linker command file.

CMD File Configuration

The linker command file defines memory layout and section assignments. Below is a corrected configuration:

MEMORY
{
    PAGE 0:
        PRAMH0    : origin = 0x3f8000, length = 0x001000

    PAGE 1:
        RAMM0     : origin = 0x000000, length = 0x000400
        RAMM1     : origin = 0x000400, length = 0x000400

        /* Peripheral Frame 0 */
        DEV_EMU   : origin = 0x000880, length = 0x000180
        FLASH_REGS: origin = 0x000A80, length = 0x000060
        CSM       : origin = 0x000AE0, length = 0x000010
        XINTF     : origin = 0x000B20, length = 0x000020
        CPU_TIMER0: origin = 0x000C00, length = 0x000008
        CPU_TIMER1: origin = 0x000C08, length = 0x000008
        CPU_TIMER2: origin = 0x000C10, length = 0x000008
        PIE_CTRL  : origin = 0x000CE0, length = 0x000020
        PIE_VECT  : origin = 0x000D00, length = 0x000100

        /* Peripheral Frame 1 */
        ECAN_A    : origin = 0x006000, length = 0x000100
        ECAN_AMBOX: origin = 0x006100, length = 0x000100

        /* Peripheral Frame 2 */
        SYSTEM    : origin = 0x007010, length = 0x000020
        SPI_A     : origin = 0x007040, length = 0x000010
        SCI_A     : origin = 0x007050, length = 0x000010
        XINTRUPT  : origin = 0x007070, length = 0x000010
        GPIOMUX   : origin = 0x0070C0, length = 0x000020
        GPIODAT   : origin = 0x0070E0, length = 0x000020
        ADC       : origin = 0x007100, length = 0x000020
        EV_A      : origin = 0x007400, length = 0x000040
        EV_B      : origin = 0x007500, length = 0x000040
        SPI_B     : origin = 0x007740, length = 0x000010
        SCI_B     : origin = 0x007750, length = 0x000010
        MCBSP_A   : origin = 0x007800, length = 0x000040

        CSM_PWL   : origin = 0x3F7FF8, length = 0x000008
        DRAMH0    : origin = 0x3f9000, length = 0x001000
}

SECTIONS
{
    .reset       : > PRAMH0,       PAGE = 0
    .text        : > PRAMH0,       PAGE = 0
    .cinit       : > PRAMH0,       PAGE = 0
    .stack       : > RAMM1,        PAGE = 1
    .bss         : > DRAMH0,       PAGE = 1
    .ebss        : > DRAMH0,       PAGE = 1
    .const       : > DRAMH0,       PAGE = 1
    .econst      : > DRAMH0,       PAGE = 1
    .sysmem      : > DRAMH0,       PAGE = 1
    .cio         : > DRAMH0,       PAGE = 1

    /* Peripheral Frame 0 registers */
    DevEmuRegsFile   : > DEV_EMU,    PAGE = 1
    FlashRegsFile    : > FLASH_REGS, PAGE = 1
    CsmRegsFile      : > CSM,        PAGE = 1
    XintfRegsFile    : > XINTF,      PAGE = 1
    CpuTimer0RegsFile: > CPU_TIMER0, PAGE = 1
    CpuTimer1RegsFile: > CPU_TIMER1, PAGE = 1
    CpuTimer2RegsFile: > CPU_TIMER2, PAGE = 1
    PieCtrlRegsFile  : > PIE_CTRL,   PAGE = 1
    PieVectTable     : > PIE_VECT,   PAGE = 1

    /* Peripheral Frame 1 registers */
    ECanaRegsFile    : > ECAN_A,     PAGE = 1
    ECanaMboxesFile  : > ECAN_AMBOX, PAGE = 1

    /* Peripheral Frame 2 registers */
    SysCtrlRegsFile  : > SYSTEM,     PAGE = 1
    SpiaRegsFile     : > SPI_A,      PAGE = 1
    SciaRegsFile     : > SCI_A,      PAGE = 1
    XIntruptRegsFile : > XINTRUPT,   PAGE = 1
    GpioMuxRegsFile  : > GPIOMUX,    PAGE = 1
    GpioDataRegsFile : > GPIODAT,    PAGE = 1
    AdcRegsFile      : > ADC,        PAGE = 1
    EvaRegsFile      : > EV_A,       PAGE = 1
    EvbRegsFile      : > EV_B,       PAGE = 1
    ScibRegsFile     : > SCI_B,      PAGE = 1
    McbspaRegsFile   : > MCBSP_A,    PAGE = 1

    CsmPwlFile       : > CSM_PWL,    PAGE = 1
}

After applying these modifications, rebuild the project. The build should complete with zero errors and warnings. Connect the hardware debugger, load the program, and verify execution.

Tags: DSP

Related Articles

Comprehensive Guide to SSTI Explained with Payload Bypass Techniques

Introduction Server-Side Template Injection (SSTI) is a vulnerability in web applications where user input is improper handled within the template engine and executed on the server. This exploit can r...

Implement Image Upload Functionality for Django Integrated TinyMCE Editor

Django’s Admin panel is highly user-friendly, and pairing it with TinyMCE, an effective rich text editor, simplifies content management significantly. Combining the two is particular useful for bloggi...

SBUS Signal Analysis and Communication Implementation Using STM32 with Fus Remote Controller

Overview In a recent project, I utilized the SBUS protocol with the Fus remote controller to control a vehicle's basic operations, including movement, lights, and mode switching. This article is aimed...

Leave a Comment

Anonymous

◎Feel free to join the discussion and share your thoughts.