DSP28335介绍
它是德州仪器(Texas Instruments)推出的一款数字信号处理器(Digital Signal Processor,DSP),属于C2000系列。C2000系列DSP广泛应用于工业控制、汽车电子、太阳能逆变器、数码电源控制和其他需要高性能实时信号处理的应用。
DSP28335的一些主要特性和功能:
-
核心处理器:DSP28335采用了TMS320C28x核心,支持定点DSP运算。它拥有高性能的算术单元和控制单元,可处理复杂的数字信号处理算法。
-
时钟频率:DSP28335通常运行在高频时钟下,最高频率可以达到数十兆赫兹(MHz),这使得它能够高效地处理实时信号。
-
存储器:DSP28335配备了片内Flash存储器,用于存放程序代码和常量数据。此外,它还有片内RAM,用于存放变量数据和堆栈操作。
-
通信接口:DSP28335支持多种通信接口,如SPI(串行外设接口)、I2C(串行总线接口)、SCI(串行通信接口)和CAN(控制器局域网)等。这些接口能够方便地与外部设备进行通信和数据交换。
-
定时器:DSP28335拥有多个高精度定时器,可用于生成精确的定时事件,适用于实时控制和定时触发任务。
-
ADC和PWM:DSP28335还集成了模数转换器(ADC)和脉宽调制器(PWM),使其成为处理模拟信号和控制电机驱动等应用的理想选择。
-
外设接口:DSP28335还提供了丰富的外设接口,包括GPIO(通用输入/输出口)、中断控制器、DMA(直接内存访问)控制器等,以满足不同应用的需求。
-
开发环境:为了便于开发,德州仪器提供了Code Composer Studio(CCS)集成开发环境,这是一个功能强大的IDE,可用于编写、编译、调试和下载DSP28335的应用程序。
LED点亮原理
如上图所示,DSP28335原理图上的LED左边接入高平电压,右边接入GPIO端口。如果点亮LED就需要左边高电平,右边低电平。
创建CCS工程
首先打开CCS并创建项目,需要配置芯片类型和后续需要连接的仿真器类型,这一步也可以在项目中修改。具体配置如图所示:
创建完成的文件内容如下:
第二步,我们需要在网上或者TI官网下载DSP28335的系统文件,没有这一步就无法控制DSP28335。项目系统文件(不是作者本人的项目,只是个样例)。
在自己项目中创建APP、include、source三个文件夹。如下图所示:
然后对我们自己的项目进行配置。将系统文件项目下载到本地, 打开项目,将该目录下的include、src、CMD中的文件复制到自己的项目中,下图为系统文件的一些文件:
将上面的文件放到我们项目中,头文件放在APP/include下,点C文件放在APP/source下。
复制CMD文件在粘贴到自己项目中,删除自己的28335_RAM_lnk.cmd文件,然后将CMD文件夹中的F28335.cmd屏蔽。
右键点击项目,选择Properties(属性)打开,添加include路径。
在include界面选择下图中1位置添加我们项目中APP/include路径,点击2位置进行应用。
点击小锤子进行编译。
编译通过就可以下一步了,如果是使用我推荐的链接的话,编译之后发生报错,这是因为我使用的项目确实其他文件,只需要删掉就行了。
上图的错误是说我们这个ADC_cal没有定义,找到该函数所在位置删除即可。
编写点灯代码
#include "DSP2833x_Device.h" // DSP2833x Headerfile Include File
#include "DSP2833x_Examples.h" // DSP2833x Examples Include File
#define LED4 GpioDataRegs.GPADAT.bit.GPIO0
#define LED3 GpioDataRegs.GPADAT.bit.GPIO1
#define LED1 GpioDataRegs.GPADAT.bit.GPIO2
#define LED2 GpioDataRegs.GPADAT.bit.GPIO3
void configtestled(void);
void main(void)
{
InitSysCtrl();
//InitGpio();
InitXintf16Gpio();
DINT;
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
configtestled();
LED1=1;
DELAY_US(10);
LED2=1;
DELAY_US(10);
LED3=1;
DELAY_US(10);
LED4=1;
DELAY_US(10);
while(1){
LED1=~LED1;
DELAY_US(100000);
LED2=~LED2;
DELAY_US(100000);
LED3=~LED3;
DELAY_US(100000);
LED4=~LED4;
DELAY_US(100000);
}
}
void configtestled(void)
{
EALLOW;
GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 0; // GPIO0复用为GPIO功能
GpioCtrlRegs.GPADIR.bit.GPIO0 = 1; // GPIO0设置为输出
GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 0; //
GpioCtrlRegs.GPADIR.bit.GPIO1 = 1;
GpioCtrlRegs.GPAMUX1.bit.GPIO2 = 0; //
GpioCtrlRegs.GPADIR.bit.GPIO2 = 1;
GpioCtrlRegs.GPAMUX1.bit.GPIO3 = 0; //
GpioCtrlRegs.GPADIR.bit.GPIO3 = 1;
EDIS;
}
DSP28335的LED被点亮。