第一个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

 

posted @ 2017-12-27 16:24  辰风阆苑  阅读(12380)  评论(0编辑  收藏  举报