第一個DSP程序 Hello DSP !(一步一步建立CCS6.0 工程)


  2017年快要過去了,總感覺並不十分充實。在這個年末,我也開始進入學習DSP的階段了,我將在接下來的一年時間里,在博客園記錄自己學習DSP的經歷。所用到的DSP型號為TMS320F28335,當然,有時也會跟TMS320F2812進行對比。

一、第一個DSP程序 Hello DSP

  就像第一個C語言程序輸出 “Hello World !”一樣,采用DSP輸出“Hello DSP !”也是那么的富有開始意義。開始吧,不管有什么困難,都會一個個的得到解決。

  本次實驗平台:PC: Windows7 64bit

         軟件: CCS6.0

         DSP型號:TMS320F2812

二、一步一步建立程序

  2.1 打開CCS6.0后,Project->New CCS Project 按照下圖設置好。Connection項根據自己的仿真器型號選擇,我的是XDS100v2。設置好后,點擊finish。

  

  

  2.2 編寫main.c函數

  點擊finish后得到下圖。

 

  於是這里需要添加各種頭文件。在程序所在的文件夾內建立兩個文件header和source。將各個頭文件和源文件加入到其中。

                   

  並且添加頭文件的路徑:

  

 

  2.3 編寫mian.c程序

  

 1 #include "DSP28_Device.h"
 2 #include <stdio.h>
 3 void main(void)
 4 {
 5 
 6     /*初始化系統*/
 7     InitSysCtrl();
 8 
 9     /*關中斷*/
10     DINT;
11     IER = 0x0000;
12     IFR = 0x0000;
13 
14     /*初始化PIE*/
15     InitPieCtrl();
16 
17     /*初始化PIE中斷矢量表*/
18     InitPieVectTable();
19     
20     printf("Hello DSP !")
21     for(;;); 
22 
23 }

 

  2.4 編譯程序

  編譯以后發現有很多的警告,還有錯誤。別急我們一個一個來解決。

  

  通過閱讀,發現,這里的問題都是CMD文件中存儲空間的分配導致的問題。

   其中一個解決辦法是調節2812_RAM_Ink.cmd文件中的memory和section。但是我調節了一下,可能是自己對CMD文件認識還不夠,發現錯誤並沒有消除,於是只能請教度娘了。最后功夫不負有心人,終於找到了解決方法。謝謝這位大大。

https://www.cnblogs.com/bg8ly/archive/2015/11/20/4981065.html  在Project-Properties-Build-Advanced Options-Library Function Assumptions下,Level of printf/scanf support required(--printf_support)選擇minimal。這是由於標准的printf()/sprintf()提供了非常多的特性支持,造成了在DSP上實現時,產生的代碼尺寸非常大,使得原來2812上的存儲空間不夠,所以有報錯和警告。

  這時再進行編譯,錯誤時沒有了,但是還有警告

  

  這里警告的意思是外設沒有分配SECTION,這里需要在CMD文件中給這些外設的分配SECTION就可以了。這里我按照《手把手教你學DSP-基於TMS320X281X》中P148頁中進行修改。

  

 1 MEMORY
 2 {
 3 PAGE 0 :
 4    PRAMH0     : origin = 0x3f8000, length = 0x001000
 5          
 6 PAGE 1 : 
 7    /* SARAM                     */
 8    RAMM0    : origin = 0x000000, length = 0x000400
 9    RAMM1    : origin = 0x000400, length = 0x000400
10 
11    /* Peripheral Frame 0:   */
12    DEV_EMU    : origin = 0x000880, length = 0x000180
13    FLASH_REGS : origin = 0x000A80, length = 0x000060
14    CSM        : origin = 0x000AE0, length = 0x000010
15    XINTF      : origin = 0x000B20, length = 0x000020
16    CPU_TIMER0 : origin = 0x000C00, length = 0x000008
17    CPU_TIMER1 : origin = 0x000C08, length = 0x000008
18    CPU_TIMER2 : origin = 0x000C10, length = 0x000008
19    PIE_CTRL   : origin = 0x000CE0, length = 0x000020
20    PIE_VECT   : origin = 0x000D00, length = 0x000100
21 
22    /* Peripheral Frame 1:   */
23    ECAN_A     : origin = 0x006000, length = 0x000100
24    ECAN_AMBOX : origin = 0x006100, length = 0x000100
25 
26    /* Peripheral Frame 2:   */
27    SYSTEM     : origin = 0x007010, length = 0x000020
28    SPI_A      : origin = 0x007040, length = 0x000010
29    SCI_A      : origin = 0x007050, length = 0x000010
30    XINTRUPT   : origin = 0x007070, length = 0x000010
31    GPIOMUX    : origin = 0x0070C0, length = 0x000020
32    GPIODAT    : origin = 0x0070E0, length = 0x000020
33    ADC        : origin = 0x007100, length = 0x000020
34    EV_A       : origin = 0x007400, length = 0x000040
35    EV_B       : origin = 0x007500, length = 0x000040
36    SPI_B      : origin = 0x007740, length = 0x000010
37    SCI_B      : origin = 0x007750, length = 0x000010
38    MCBSP_A    : origin = 0x007800, length = 0x000040
39 
40    /* CSM Password Locations */
41    CSM_PWL    : origin = 0x3F7FF8, length = 0x000008
42 
43    /* SARAM                    */
44    DRAMH0     : origin = 0x3f9000, length = 0x001000
45 }
46  
47  
48 SECTIONS
49 {
50    /* Allocate program areas: */
51    .reset           : > PRAMH0,      PAGE = 0
52    .text            : > PRAMH0,      PAGE = 0
53    .cinit           : > PRAMH0,      PAGE = 0
54 
55    /* Allocate data areas: */
56    .stack           : > RAMM1,       PAGE = 1
57    .bss             : > DRAMH0,      PAGE = 1
58    .ebss            : > DRAMH0,      PAGE = 1
59    .const           : > DRAMH0,      PAGE = 1
60    .econst          : > DRAMH0,      PAGE = 1      
61    .sysmem          : > DRAMH0,      PAGE = 1
62    .cio                : > DRAMH0,      PAGE = 1
63 
64    /* Allocate Peripheral Frame 0 Register Structures:   */
65    DevEmuRegsFile    : > DEV_EMU,    PAGE = 1
66    FlashRegsFile     : > FLASH_REGS, PAGE = 1
67    CsmRegsFile       : > CSM,        PAGE = 1
68    XintfRegsFile     : > XINTF,      PAGE = 1
69    CpuTimer0RegsFile : > CPU_TIMER0, PAGE = 1
70    CpuTimer1RegsFile : > CPU_TIMER1, PAGE = 1
71    CpuTimer2RegsFile : > CPU_TIMER2, PAGE = 1
72    PieCtrlRegsFile   : > PIE_CTRL,   PAGE = 1
73    PieVectTable      : > PIE_VECT,   PAGE = 1
74 
75    /* Allocate Peripheral Frame 2 Register Structures:   */
76    ECanaRegsFile     : > ECAN_A,      PAGE = 1
77    ECanaMboxesFile   : > ECAN_AMBOX   PAGE = 1
78 
79    /* Allocate Peripheral Frame 1 Register Structures:   */
80    SysCtrlRegsFile   : > SYSTEM,     PAGE = 1
81    SpiaRegsFile      : > SPI_A,      PAGE = 1
82    SciaRegsFile      : > SCI_A,      PAGE = 1
83    XIntruptRegsFile  : > XINTRUPT,   PAGE = 1
84    GpioMuxRegsFile   : > GPIOMUX,    PAGE = 1
85    GpioDataRegsFile  : > GPIODAT     PAGE = 1
86    AdcRegsFile       : > ADC,        PAGE = 1
87    EvaRegsFile       : > EV_A,       PAGE = 1
88    EvbRegsFile       : > EV_B,       PAGE = 1
89    ScibRegsFile      : > SCI_B,      PAGE = 1
90    McbspaRegsFile    : > MCBSP_A,    PAGE = 1
91 
92    /* CSM Password Locations */
93    CsmPwlFile      : > CSM_PWL,     PAGE = 1
94 
95 }
View Code

  此時,再編譯后,沒有錯誤和警告。

  

三、硬件試驗

  這里將硬件連接好,進行調試。結果如下

  

四、總結

  這次試驗總體來說還是比較順利的,其中遇到了一下問題,也一一都解決了。其中CMD文件非常重要,需要深入的理解。

  今后應該一星期會有一篇記錄出來。希望自己能夠不斷進步。

  2017-12-27

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM