EE586L/CCSv4 FAQ

From WikiBiron
Revision as of 18:34, 25 March 2011 by Sungwonl (talk | contribs) (DSP Lab Equipment)

Code Composer Studio v4 Frequently Asked Questions

Below are solutions to some of the commonly encountered problems with CCSv4.

As this is a new and completely different version of CCS the TAs are still learning the software as well. If you don't see your question answered here please email the TAs who will be glad to help and add your question to the pool of knowledge.

Importing Legacy CCS v3.x Projects

The textbook provides many example projects showing the functionality of the board. However, these examples were written for a previous iteration of Code Composer Studio.

Follow these steps to import legacy projects and convert them to the project format of CCSv4:

  • Launch CCS and select a workspace.
    • Workspaces are used to store your personal projects, so having an individual workspace prevents other groups from modifying your projects.
    • Create a workspace other than the default, such as, EE586_Group01 or your name.
  • Select Project -> Import Legacy CCSv3.3 Project
    • In the Dialog box that appears, browse for the project file that you would like to import and select the Copy projects into workspace radio button. Click Next
    • At the next screen select the default Code Generation Tools (already selected). Click Next.
    • On the Enable DSP/BIOS Tools screen select Automatically determine DSP/BIOSv5.x support enablement.
    • On the Set Advance Options screen do not check the box for using a common root.

Project Properties

Below are the common project property settings used in the book examples. If you are having compiling/linking issues check these settings.

Access the project properties by selecting Project->Properties. All of the following settings are located under the C/C++ Build tab located on left side of the Properties dialog box, and under the Configuration Settings->Tool Settings tab in the center of the dialog box.

  • C6000 Compiler
    • Basic Options:
      • Target Processor Version - should be 6700 or 6400 for the C6713 and C6416 boards, respectively
    • Predefined Symbols:
      • Pre-define NAME - either "CHIP_6713" or "CHIP_6416", also some projects use "DEBUG" or "_DEBUG"
    • Include Options:
      • Add dir to #include search path - the include directories of all the libraries used in the project must be included here
      • Note: you must locate these folders specifically on your PC as the locations might vary
      • ..\csl\include
      • ..\dsk6416\include or ...\dsk6713\include
      • ..\C6400\imglib\include if using the IMGLIB
  • C6000 Linker
    • File Search Path:
      • Add <dir> to library search path - the lib directories of all the libraries used in the project
      • Note: you must locate these folders specifically on your PC as the locations might vary
      • ..\csl\lib
      • ..\dsk6416\lib or ...\dsk6713\lib

Common Compling/Linking Errors

Note: these errors are due to incorrect project property settings. If you are not putting your semicolons in, you won't find your answers here!


  • Where is the rts6xxx.lib file??
    • The rts library files can be found in the folder:
    • ..\Texas Instruments\C6000 Code Generation Tools 7.0.4\lib


  • ERROR: Compiler error, 'Can't find file ...'
  • Solution:
    • When importing book examples some of the files included in the project can not be found.
    • Delete the file from the project, then select Project->Link Files to Active Project and locate the missing files
    • Common examples
      • csl6713.lib, dsk6713bsl.lib - located in the ..\csl\lib and ...\dsk6713\lib directories, respectively
      • C6713dskinit.h, C6713dskint.c - located in the Support folder supplied with the book examples


  • ERROR: Linking error which mentions FAR memory access
  • Solution:
    • Project Properties -> C\C++ Build -> C6000 Compiler -> Runtime Model Options
      • Constant access model - Set to Far
      • Data access model - Set to Far

License Server

For Code Composer to function properly you must be using a licensed version. In the lab we use a license server to handle the licensing of our PCs. If a PC you are working with becomes unlicensed do the following to re-activate the connection to the license server.

  • In CCS select Help->Licensing Options...
    • Then mark the box Activate a License
    • In Step 2 - Install a License File, select Specify a License Server and use the address: sipi-dsp-11.usc.edu and port: 57566 (Spring 2011 only)

Using the Debugger

GEL Files/Sliders

In CCSv4 the GEL Files/Sliders operate differently than in previous iterations.

  • Load GEL
    • While debugging select Tools->GEL File to load a GEL file for the current debugging session
    • Select Scripts->'GEL NAME' to access the GEL you loaded. Typically this will load the Slider.
  • Using GEL Slider
    • Unlike CCSv3.x modifications to variables due to the GEL Slider only occur when the simulation is halted in CCSv4
    • To update variables without having to halt the simulation:
      • Set a breakpoint at the line in your code where the modifiable variable is accessed.
      • Right click the breakpoint and select Breakpoint Properties
      • In the breakpoint properties dialog, under Debugger Response->Action select Refresh All Windows

Breakpoint Properties

Above we used the breakpoint properties to update variables using the GEL sliders.

Other potential uses of breakpoints include:

  • Update View - can be used to refresh a Graph or Image automatically

DSP Lab Equipment

List of the equipment we currently have in the lab.

  • DSP Boards
    • 12 6713
    • 2 6416
    • 3 6416T (1 Ghz Processor) (1 broken)
  • Daughter Cards
    • 9 - ND Tech Video Daughtercard (3 added)
      • Analog Video Input (composite)/ LCD Display Output
      • Works with 6713 and 6416
      • User Manual
    • 4 - Old Video Daughtercard
      • Composite and S-Video Input/ Composite and S-Video Output
      • Works with 6416 only
      • Does not work with audio
    • 4 - eDSP Multi Channel Audio card
      • 4 Channel line/mic input - 4 Channel output
      • 6713 and 6416T Compatible
      • Product Website
  • Audio Equipment
    • 4 Behringer ECM8000 Measurement Microphone
      • Omnidirectional measurement microphones
      • Flat frequency response, good for beamforming, etc.
    • 4 dbx RTA-M Measurement Microphone
      • Similar to above, omnidirectional measurement microphones
    • 4 Shure SM48 Vocal Microphone
      • Good for recording voice for speaker recognition, etc.
    • 3 Microphone Preamplifiers
      • High quality preamplifiers, get strong signal into board
  • Video Equipment
    • 4 Toshiba Teli CS5260BD Video Cameras
    • 1 JAI S3200 Video camera w/ high quality zoom lens
    • 5 Older Video Cameras

Optimization

  • Measure running time in CPU cycles
    • Use a function TIMER_getCount() like in example below.
      • The reason why you multiply by 8 is because the maximum resolution of the timer in C6416 is 8 CPU cycles in this example.
      • If you use C6713, it should be 4. For details, refer to [1] for C6416 and [2] for C6713.
 // Configure timer
 hTimer = TIMER_open(TIMER_DEVANY,0); 
 TIMER_configArgs(hTimer, 0x000002C0, 0xFFFFFFFF, 0x00000000);  
 start    = TIMER_getCount(hTimer);    // called twice to avoid L1D miss.
 start    = TIMER_getCount(hTimer); 
 stop     = TIMER_getCount(hTimer); 
 overhead = stop - start;
 start = TIMER_getCount(hTimer); // begin "profile area"
 foo(); // Any function / routine you want to measure 
 stop = TIMER_getCount(hTimer); // end "profile area"
 t = (stop-start-overhead) * 8;
 printf("# cycles to run foo(): %d\n", t);
  • We strongly recommend to use EDMA for the transmission of data from video daughter card to DSK board
    • Experiment result (loopback examples) : Comparison in terms of frames per seconds
      • DSK6713 / VM3224K2(new video daughtercard) / cam2lcd2  : 7.5 frames / sec
      • DSK6713 / VM3224K2(new video daughtercard) / cam2lcd3_EDMA : 10 frames / sec
      • DSK6713 / VM3224K2(new video daughtercard) / cam2lcd3_QDMA : 10 frames / sec
    • We havn't tested with DSK 6416 and older video daughter card but we expect similar performance gain of EDMA.

eInfoChips Video Daughtercard

  • If you have a problem with horizontal banding when using the eInfoChips video daughtercard (the one without the LCD) you have to modify the values passed to the configure the EMIF interface function. The values (the 0x0? number) below are the correct values, and the values in the sample code are incorrect. The correct values should match the value given in the comment.
    /* Configure the EMIF */
    //set read/write setup, strob and hold to 6, 4 and 1
    EMIFA_RSET(CECTL2,
    EMIFA_CECTL_RMK(
    EMIFA_CECTL_WRSETUP_OF(0x06), // Write Setup width: 6
    EMIFA_CECTL_WRSTRB_OF(0x04),  // Write Strobe width: 4
    EMIFA_CECTL_WRHLD_OF(0x01),   // Write Hold width: 1
    EMIFA_CECTL_RDSETUP_OF(0x06), // Read Setup width: 6
    EMIFA_CECTL_TA_OF(0x03),      // Turn-around Time: 3 (default)
    EMIFA_CECTL_RDSTRB_OF(0x04),  // Read Strobe width: 4
    EMIFA_CECTL_MTYPE_ASYNC32,    // Memory Type: Async 32 bit wide
    EMIFA_CECTL_WRHLDMSB_OF(0x00),// Write Hold MSB
    EMIFA_CECTL_RDHLD_OF(0x01)    // Read Hold width: 1
    ));
  • If it does not work even after you change EMIF interface function above, then change Runtime Model Options in properties of your project. Go to C/C++ Build -> C6000 Compiler -> Runtime Model Options.
    • Set Const access model and Data access model as far
  • YCrCb / Frame structure
    • For video with Rx by Ry resolution, each frame is represented by Rx * Ry /2 pixels because it's interlaced.
    • For color representation, Y component is expressed by 16 bits, Cr and Cb by 8 bits each. But, in the implementation of eInfoChips Video Daughtercard, each component of neighboring 2 pixels is represented by one variable which has twice larger bits in the constecated form. For example, Y components for 2 adjacent pixels are implemented by one 32bit (unsigned int) variable.
    • Example (SWLoopBack) : Capture video then play it on external display
   /* Example of SWLoopBack */
   // Define pointers to YCrCb's of encoder and decoder
   unsigned int *pDstY = NULL, *pSrcY = NULL;
   unsigned short *pDstCb = NULL, *pSrcCb = NULL;
   unsigned short *pDstCr = NULL, *pSrcCr = NULL;
   // in the main()
   while(1) {
       // Get the pointer to the Frame Captured
       pDecFrame = vDecGetFrame();
       // Get pointer to Y components
       pDstY = (unsigned int*)(pEncFrame->y);
       pSrcY = (unsigned int*)(pDecFrame->y);
       // Get pointer to Cb components
       pDstCb = (unsigned short*)(pEncFrame->cb);
       pSrcCb = (unsigned short*)(pDecFrame->cb);
       // Get pointer to Cr components
       pDstCr = (unsigned short*)(pEncFrame->cr);
       pSrcCr = (unsigned short*)(pDecFrame->cr);
       // Divide by 4 to scan all the pixels in a frame
       // Why 4 ?  
       // because frames are interlaced and one data point represents 2 pixels of the frame
       frameWords = (352*288)/4;
       // Scan all the pixels in a frame
       for ( i=0; i<frameWords; i++) {
           // Copy values from decoder to encoder
           *pDstY = *pSrcY;
           *pDstCb = *pSrcCb;
           *pDstCr = *pSrcCr;
           // Increase pointers by one
           pDstY++; pSrcY++;
           pDstCb++; pSrcCb++;
           pDstCr++; pSrcCr++;
       }
       // Send a Frame to Encoder
       pEncFrame = vEncSendFrame( pEncFrame);
   }