TMS320DM642学习----第二篇(软件环境搭建+工程文件结构)

一、CCS3.3安装:

下载解压CCS3.3的破解安装包如下所示,双击setup准备安装(SEED开发者论坛资料:http://www.seeddsp.com/bbs/forum.php?mod=viewthread&tid=230&highlight=CCS3.3):

双击之后如下图所示(单击next,一路同意就行了需要注意的就是安装路径的地方):

这里选择安装路径时可以自定义注:这里还需要选择你的设备的型号,不要选错了,也不必多选

       

接下来就是一路确定就行了,中途的所有警告都可以直接忽略掉!

二、安装XDS560PLUS的驱动:

下载XDS560的驱动安装包(官网链接:http://www.seeddsp.com/index.php/Home/Product/detail/name/1/id/32.html):

解压之后选择自己对应的CCS版本的驱动进行安装(我选择了CCS3.x中间那个进行了安装):

接下来就按照提示一步步安装就可以了~

三、工程文件结构:

从图中可以看出主要的文件如下

1.GEL file文件夹中的*.gel文件:用于初始化CPU和配置寄存器,节选部分GEL文件中的代码如下:

 GEL文件详细讲解(官网PDF资料:http://www.ti.com.cn/cn/lit/an/spraa74a/spraa74a.pdf

/*--------------------------------------------------------------*/
/* The StartUp() function is called each time CCS is started.   */
/* Customize this function to perform desired initialization.   */
/*--------------------------------------------------------------*/
StartUp()
{
    setup_memory_map();
    GEL_Reset();  
    init_emif();
}
/* Setup memory map for DM642 EVM. */
setup_memory_map()
{
    GEL_MapOn();
    GEL_MapReset();
    /* On-chip memory map */
    GEL_MapAdd(0x00000000, 0, 0x00040000, 1, 1); /* Internal Memory       */
    GEL_MapAdd(0x01800000, 0, 0x00000058, 1, 1); /* EMIFA CTL REGS        */
    GEL_MapAdd(0x01840000, 0, 0x000082FC, 1, 1); /* INT MEM CTL REGS      */
    GEL_MapAdd(0x01C40000, 0, 0x00000270, 1, 1); /* VP0 Control           */
    GEL_MapAdd(0x01C44000, 0, 0x00000270, 1, 1); /* VP1 Control           */
    GEL_MapAdd(0x01C48000, 0, 0x00000270, 1, 1); /* VP2 Control           */
    GEL_MapAdd(0x01C80000, 0, 0x00000680, 1, 1); /* EMAC CTL REGS         */
    GEL_MapAdd(0x01C81000, 0, 0x00002000, 1, 1); /* EMAC Wrapper          */
    GEL_MapAdd(0x74000000, 0, 0x02000000, 1, 1); /* VP0 Channel A Data    */
    GEL_MapAdd(0x78000000, 0, 0x02000000, 1, 1); /* VP1 Channel A Data    */
    GEL_MapAdd(0x7E000000, 0, 0x02000000, 1, 1); /* VP2 Channel B Data    */
    /* Off-chip memory map */
    GEL_MapAdd(0x80000000, 0, 0x02000000, 1, 1); /* 32MB SDRAM EMIF-A, CE0*/
    GEL_MapAdd(0x90000000, 0, 0x00080000, 1, 1); /* 4MB Flash EMIF-A, CE1 */
    GEL_MapAdd(0x90080000, 0, 0x00080000, 1, 1); /* 4MB FPGA EMIF-A, CE1  */    
    GEL_MapAdd(0xA0000000, 0, 0x10000000, 1, 1); /* EMIF-A, CE2 EXPANSION */
    GEL_MapAdd(0xB0000000, 0, 0x10000000, 1, 1); /* EMIF-A, CE3 EXPANSION */
}

这里频繁的调用了GEL_MapAdd()这个函数接口:

GEL_MapAdd( address , page , length , readable , writeable) 

address:存储器起始地址 
page:存储器类型  0 表示程序存储器,1 表示数据存储器 
length:定义的存储器长度 
readable:定义存储器是否可读,1 可读,0 不可读 
writeable:定义存储器是否可写,1 可写,0 不可写
通过函数的设置和映射,从而分配好了各个DSP内部模块的地址空间和程序空间!

2.Include文件夹中的*.lib文件:包含了CSL库函数(chip support library),也包含了部分函数.c文件的接口头文件,其中CSL库是TI官方提供的DSP内部模块的驱动程序:

截取部分TI官网提供的DM642芯片的CSL库目录:

   包括了gpio的控制+edma的控制+i2C的控制+timer定时器的控制+dma数据通道的控制等等!(注:已集成到DSP/BIOS中:通过图形用户接口GUI对CSL进行配置)

3.Source文件夹中的*.c和*asm文件:main函数的实现,基本的逻辑和相关寄存器的配置和驱动调用部分

void main()
{
    /*Initialise CSL,初始化CSL库*/
    CSL_init();
    CHIP_config(&SEEDDM642percfg);    
    /*初始化Video Port1*/
    /*将Vedio Port1设为采集输入*/
    portNumber = 1;
    vpHchannel1 = bt656_8bit_ncfc(portNumber);
    bt656_capture_start(vpHchannel1);
    /*等待第一帧数据采集完成*/
    while(capNewFrame == 0){}
    /*将数据存入显示缓冲区,并清采集完成的标志*/
    /*. . . . . . .程序区域,数据处理,逻辑运算,数据传输 . . . . . . . */
    capNewFrame =0;
    for(i=0;i<numLines;i++)
    {
        /*传送临时Y缓冲区*/
        DAT_copy((void *)(capYbuffer + i * numPixels), 
                 (void *)(tempYbuffer + i * numPixels),
                 numPixels);
        /*传送临时Cb缓冲区*/
        DAT_copy((void *)(capCbbuffer + i * (numPixels >> 1)), 
                 (void *)(tempCbbuffer + i * (numPixels >> 1)),
                 numPixels>>1);
        /*传送临时Cr缓冲区*/
        DAT_copy((void *)(capCrbuffer + i * (numPixels >> 1)), 
                 (void *)(tempCrbuffer + i * (numPixels >> 1)),
                 numPixels>>1);              
     }
}

4.更目录下的*.cmd文件:用于分配DSP内部Cache高速缓存(L1&L2)以及外部扩展的Extenal Mem(SDRAM)的存储空间。*.cmd文件中定义了多个段如下所示:

-l.libcslDM642.lib
-l.lib
ts6400.lib
MEMORY
{
  L2 : o = 00000400h l = 0003fb00h  /* all SRAM ,L2,为DSP片内存储器,是第2级存储器[第一级存储器包括独立的程序Cach(L1P)
和数据Cach(L1D) ],它是一个统一的空间,部分程序和数据,统称为L2,可以作为普通的SRAM映射到存储空间
*/ CE01: o = 80000000h l = 00100000h /* external memory 00100000h */ CE02: o = 80100000h l = 00f000000h /* external memory */ } SECTIONS { .cinit > L2 /*初始化变量和常数表*/ .text > L2 /*可执行代码段的映射*/ .stack > L2 /*为系统堆栈分配存储器。该段用于将变量传递至函数或者用来分配局部变量*/ .bss > L2 /*L2 /*保留全局和静态变量空间。在启动和导入的时候,C/C++编译器会 会启动程序将.cint段中的数据复制出来,以初始化.bss段中的变量*/ .const > L2 /*包含由C/C++限定词const定义的字符常量和数据*/ .data > L2 /*初始化数据段*/ .far > L2 /*供外部文件调用的变量*/ .switch > L2 /*控制语句段映射*/ .sysmem > L2 /*初始化系统空间*/ .tables > L2 /*初始化数据表*/ .cio > L2 /*io口*/ .capChaAYSpace> CE01 .capChaACbSpace> CE01 .capChaACrSpace> CE01 .disChaAYSpace> CE02 .disChaACbSpace> CE02 .disChaACrSpace> CE02 .external > CE02 /*外部变量的初始化*/ }

.cinit段包含了程序中定义的变量和常量的初始化表

.const段存储了使用const关键字定义的一些常量和数据

.switch段定义了switch语句所对应的列表

.text段为程序的可执行代码部分

.bss段存储了程序定义的全局变量和静态变量

.data数据段(datasegment)通常是指用来存放程序中已初始化的全局变量的一块内存区域。数据段属于静态内存分配。

.stack段用于系统堆栈,在程序运行过程中如果出现了大量的中断过程就需要较大的堆栈空间来记录当前的系统运行状态,所以需要合理的分配

.sysstack段为第二系统堆空间

.sysmem段作为动态存储分配保留空间

.cio段为程序的输入和输出所使用

以上的数据都存储在DSP内部的高速缓存或者Cache-L2当中。

剩下的下面的部分为SDRAM存储器的区域,命名为CE01,上面的CMD的配置将程序中的图片等数据存储在外部DSRAM中!

官方参考链接:http://software-dl.ti.com/ccs/esd/documents/sdto_cgt_Linker-Command-File-Primer.html

其他参考链接:http://wiki.dreamrunner.org/public_html/DSP/CCS/CMD-File.html

 完~

原文地址:https://www.cnblogs.com/uestc-mm/p/7162139.html