DSP_基于TMS320F28335和CCS7.2的编程入门

1.准备工作

1.1. 软件

       CCS

DSP芯片的编程环境

controlSUITE

初学者建议都装上

TI官方提供的通用:头文件、源文件、cmd文件、gel文件、lib文件及实例程序

如:C:\ti\controlSUITE\device_support\f2833x\v142

1.2硬件1..

仿真器 + 开发板 | 公司设计的DSP板(就是所谓的“目标板”)

2.创建CCS项目

2.1 Project → NeW CCS Project

主要把DSP芯片的型号和使用的仿真器的型号选对即可,具体参考下图

DSP_基于TMS320F28335和CCS7.2的编程入门_第1张图片

2.2. 项目文件目录设计

右击项目名称 → NEW → Folder,可以向项目添加新的目录

DSP_基于TMS320F28335和CCS7.2的编程入门_第2张图片

DSP_基于TMS320F28335和CCS7.2的编程入门_第3张图片

建议初学者的项目文件目录可设计如下:

DSP_基于TMS320F28335和CCS7.2的编程入门_第4张图片

为什么这么设计?  因为TI官方提供的这些文件基本上是不需要修改的

2.3. 添加Include路径

右击项目名称 → Properties

DSP_基于TMS320F28335和CCS7.2的编程入门_第5张图片

DSP_基于TMS320F28335和CCS7.2的编程入门_第6张图片

注意:DSP2833x_SOURCE 和 MyProgram不需要添加Include路径,只把DSP2833x_INCLUDE添加进去即可

2.4. 拷贝TI官方提供的cmd文件

1、路径:C:\ti\controlSUITE\device_support\f2833x\v142\DSP2833x_headers\cmd下的,DSP2833x_Headers_nonBIOS.cmd

2、路径:C:\ti\controlSUITE\device_support\f2833x\v142\DSP2833x_common\cmd下的,28335_RAM_lnk.cmd

Ctrl+C复制,鼠标选中 DSP2833x_CMD,Ctrl+V粘贴

DSP_基于TMS320F28335和CCS7.2的编程入门_第7张图片

2.5. 拷贝TI官方提供的头文件(.h)

在TI官方提供的套件里,有两个文件夹包含了我们需要的头文件,一个是DSP2833x_headers,一个是DSP2833x_common

在设计操作GPIO点亮LED灯的程序中,发现DSP2833x_common中的DSP2833x_SWPrioritizedIsrLevels.h、SFO.h和SFO_V5.h并不是必须的,可以都拷贝进去,并不会影响程序的编译。

DSP_基于TMS320F28335和CCS7.2的编程入门_第8张图片

2.6. 拷贝TI官方提供的源文件(.c/.asm)

官网提供的源文件既包含.c文件也包含.asm文件,主要给出了.h文件中声明的函数的具体函数定义,建议用到哪个再去加哪个可能更好。系统初始化需要用肯定要用到的源文件可以先添加,如下图绿色方框所示。

DSP_基于TMS320F28335和CCS7.2的编程入门_第9张图片

如果想一步到位,把所有的源文件全部拷贝进去,编译会出错.

DSP_基于TMS320F28335和CCS7.2的编程入门_第10张图片

说是重复定义,不难猜测针对DefaultIsr,源文件你只能从DSP2833x_DefaultIsr.c和DSP2833x_SWPrioritizedDefaultIsr.c选择一个。针对PieVect,源文件你只能从DSP2833x_PieVect.c和DSP2833x_SWPrioritizedPieVect.c选择一个。暂选DSP2833x_DefaultIsr.c和DSP2833x_PieVect.c,DSP2833x_SWPrioritizedDefaultIsr.cDSP2833x_SWPrioritizedPieVect.c

删除后,编译成功!

当前使用的源文件如下图所示:

DSP_基于TMS320F28335和CCS7.2的编程入门_第11张图片

 2.7. 总结

将关于TMS320F28335芯片的DSP编程通用文件整理到压缩包DSP28335基础软件包.rar。

后续若需要新建项目,可拷贝下图的前三个文件到项目的目录下直接使用。

DSP_基于TMS320F28335和CCS7.2的编程入门_第12张图片

 文件夹:DSP2833x_SWPrioritized(一般不用),则是包含之前删除的两个.c文件。

3. GPIO点LED灯

要快速完成一个GPIO点LED灯的功能,可以分为三小步。

3.1. 初始化

#include "DSP28x_Project.h"

void main(void)
{
   InitSysCtrl();
   DINT;
   InitPieCtrl();
   IER = 0x0000;
   IFR = 0x0000;
   InitPieVectTable();
   // 上述就是基本的初始化,你可以暂时不用理解每一步具体是什么意思

}

 3.2. GPIO控制寄存器的配置

以下原理图为例

DSP_基于TMS320F28335和CCS7.2的编程入门_第13张图片

DSP_基于TMS320F28335和CCS7.2的编程入门_第14张图片

 一个RGBLED灯的三个管脚分别连接在主芯片TMS320F28335的GPIO58 GPIO59 GPIO61上,从原理图中可以看出,只要在对应的GPIO输出低电平,就可以点亮对应颜色的LED灯。但在输出之前低电平之前,需要对GPIO进行配置。

配置GPIO有两个比较关键的寄存器

一个是MUX寄器,一个芯片IO复用2~4种功能是很常见的,MUX用来配置GPIO使用的功能是什么,以GPIO61为例,我们查看数据手册

DSP_基于TMS320F28335和CCS7.2的编程入门_第15张图片

当我们往这个寄存器的第26位和第27位,写入00时,GPIO61就被配置成了通用的I/O啦,

不用担心把位操作错了,代码如下:

GpioCtrlRegs.GPBMUX2.bit.GPIO61 = 0;

 一个是DIR寄存器,DIR是Direction的缩写,方向寄存器,DIR用来配置GPIO的输入/输出方向,还是以GPIO61为例,我们查看数据手册

DSP_基于TMS320F28335和CCS7.2的编程入门_第16张图片

从GPIO63到GPIO32都是一样的,在对应位写0就配置成输入,写1就配置成输出。我们配置成输出,代码如下:

GpioCtrlRegs.GPBDIR.bit.GPIO61 = 1;

 除此之外,还有PUD和QSEL寄存器,暂时没吃透,后面用到可能就自然理解啦

3.3. GPIO数据寄存器

1、直接往里面写

GpioDataRegs.GPBDAT.bit.GPIO61 = 1;

GpioDataRegs.GPBDAT.bit.GPIO61 = 0;

2、用SET和CLEAR(置位/清零)

GpioDataRegs.GPBSET.bit.GPIO61 = 1;

GpioDataRegs.GPBCLEAR.bit.GPIO61 = 1;

3、TOGGLE(翻转)

GpioDataRegs.GPBTOGGLE.bit.GPIO61 = 1;

GpioDataRegs.GPBTOGGLE.bit.GPIO61 = 1;

 3.4. 总程序

DSP28x_usDelay(1000);处设3个断点,应该可以观察到不同颜色的LED被交替点亮。

#include "DSP28x_Project.h"  

void Gpio_setup(void);

void main(void)
{
   InitSysCtrl();
   DINT;
   InitPieCtrl();
   IER = 0x0000;
   IFR = 0x0000;
   InitPieVectTable();
   Gpio_setup();

    for(;;){
        GpioDataRegs.GPBCLEAR.bit.GPIO58 = 1;
        GpioDataRegs.GPBSET.bit.GPIO59 = 1;
        GpioDataRegs.GPBSET.bit.GPIO61 = 1;

        DSP28x_usDelay(1000);

        GpioDataRegs.GPBSET.bit.GPIO58 = 1;
        GpioDataRegs.GPBCLEAR.bit.GPIO59 = 1;
        GpioDataRegs.GPBSET.bit.GPIO61 = 1;

        DSP28x_usDelay(1000);

        GpioDataRegs.GPBSET.bit.GPIO58 = 1;
        GpioDataRegs.GPBSET.bit.GPIO59 = 1;
        GpioDataRegs.GPBCLEAR.bit.GPIO61 = 1;

        DSP28x_usDelay(1000);

    }
}

void Gpio_setup(void){
    EALLOW; // 配置GPIO时必须的操作,解保护

    GpioCtrlRegs.GPBPUD.bit.GPIO58 = 1;
    GpioCtrlRegs.GPBMUX2.bit.GPIO58 = 0;
    GpioCtrlRegs.GPBDIR.bit.GPIO58 = 1;

    GpioCtrlRegs.GPBPUD.bit.GPIO59 = 1;
    GpioCtrlRegs.GPBMUX2.bit.GPIO59 = 0;
    GpioCtrlRegs.GPBDIR.bit.GPIO59 = 1;

    GpioCtrlRegs.GPBPUD.bit.GPIO61 = 1;
    GpioCtrlRegs.GPBMUX2.bit.GPIO61 = 0;
    GpioCtrlRegs.GPBDIR.bit.GPIO61 = 1;


    EDIS; // 配置GPIO时必须的操作,开保护
}

//===========================================================================
// No more.
//===========================================================================

你可能感兴趣的:(DSP,DSP)