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.\lib\cslDM642.lib
-l.\lib\rts6400.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中!  完~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章