目录
1 新建工程
1.1 首先进入软件后,这是初始画面,点击左上角的project。
1.2 出现以下界面,选择第一个New CCS Project
1.3 下面是具体的一个选择界面,仿真器型号选V1 V2 V3都可以,只要能用就行,不能用后面再换编辑
1.4 这是创建后的画面,注意核对左边的文件夹,是否一样
2 配置工程文件
2.1 复制底层文件到工程
2.2 文件的删除和禁用(均在CCS里面完成)
1)删除 28335_RAM_lnk.cmd 文件
2)配置DSP2833x_common 文件
A. 展开cmd文件
B. 展开gel/ccsv4,只保留f28335.gel文件,结果如下图:
C. 展开source,屏蔽DSP2833x_SWPrioritizedDefaultIsr.c和DSP2833x_SWPrioritizedPieVect.c文件,操作方法和A步骤一致,结果如下图:
3)配置DSP2833x_headers 文件
4)配置FPUfastRTS 文件
5)配置 IQmath 文件
6)选中工程名(我的是Led_try),右键新建文件夹,命名为APPS,存放所写程序 。PS:选做
2.3 索引配置(就是编译的时候,CCS能找到我们上一步保留的各种工程文件)
1)选中工程名(我的是Led_try),右键单击,选最后一个Properties
2)在Build\C2000 Compiler\Include Options里添加如下索引:
3)在Build\C2000 Linker\File Search Path的两个框里添加如下索引:
隐藏关卡
3 点亮LED灯实验
3.1 配置引脚
3.2 完整程序
3.3编译以及烧录
可能遇到的问题:
连接不上板子
关于这方面的资料已经很多了,但都比较零散,也以此文记录自己从算法优化转向开关电源的学习的历程。
初始装备:你需要已经安装CCS。
恭喜你,已经完成了第一步新建工程,通过了第一关!
让我们开始第二关吧,也就是配置工程文件,这一步的意义,就是让我们可以用别人造好的“轮子”,主要是让我造,我也不会呀。
务必按照这个路径 C:\ti\controlSUITE\device_support\f2833x\v142 复制里面的 DSP2833x_common 和 DSP2833x_headers 两个文件夹到工程下
同样的选择这个路径 C:\ti\controlSUITE\libs\math 复制里面的 IQmath 和 FPUfastRTS 两个文件到我们的工程下。
PS:以上路径,仅针对和我一样安装CCS在C盘的小伙伴,此时可能有的伙伴可能找不到自己新建的工程在哪里,那么关闭软件,重新打开吧,下图就是你的新建工程路径
言归正传,下图就是复制后的图,必须一个不少哦(—甲壳虫文件除外Binaries,这个是仿真后才出来)。
选中 28335_RAM_lnk.cmd 文件右键选中Delete
将 F28335.cmd 文件选中,单击右键选择Exclude from Build
PS: 28335_RAM_lnk.cmd ————是将程序烧录到RAM。
F28335.cmd ————是将程序烧录到FLASH。也就是断电后,重新开机后程序都在里面。
因为这个模式不适合调试程序,所以先屏蔽了,选择不编译。
展开cmd,屏蔽 DSP2833x_Headers_BIOS.cmd 文件,结果如下图:
展开FPUfastRTS\V100,只保留 include 、 lib 、source三个文件夹,结果如下:
展开IQmath \v160,只保留 gel、include、lib 三个文件夹,结果如下:
太不容易了,终于该删的删,该屏蔽的屏蔽,都做完了,大家可以休息一下了,今天的学习量已经巨大了,该追剧追剧,该打游戏打游戏。
你来到了第二关的最后一小关,这里做完,大多数编程场景应该问题不大(因为我也不知道,能满足多少编程场景,比如生成ePWM,PID调节,还没去尝试),反正最后一步了,点个LED灯问题不大。
"${PROJECT_LOC}/DSP2833x_common/include"
"${PROJECT_LOC}/APPS"
"${PROJECT_LOC}/DSP2833x_headers/include"
"${PROJECT_LOC}/FPUfastRTS/V100/include"
"${PROJECT_LOC}/IQmath/v160/include"
添加后,结果如下图:
首先是第一个框:
"${PROJECT_LOC}/FPUfastRTS/V100/lib/rts2800_fpu32_fast_supplement.lib"
"${PROJECT_LOC}/IQmath/v160/lib/IQmath_fpu32.lib"
"${PROJECT_LOC}/IQmath/v160/lib/IQmath.lib"
第二个框:
"${PROJECT_LOC}/IQmath/V160/lib"
"${PROJECT_LOC}/FPUfastRTS/V100/lib"
最后一步,按下图所示勾选
第二关就此结束,工程文件的配置,就此结束,然后大家可以考虑开始编程了。
都通关了,怎么可以没有一点黑科技,作弊走起
首先学一个秘籍:导入工程
第一步:XXXXXXXXXXXXXXXX
第二步:点第一个Browse...选导入工程文件
链接:https://pan.baidu.com/s/1-3l1qC0upZVbk2A-3SZkDQ?pwd=of4k
提取码:of4k
以上为秘籍——已经配置好的空工程项目,直接开始写程序,意思是上面的都可以不看,不学,不用一步一步的照着做。咳咳,大家可以偷懒了!
参考文献:《轻松玩转DSP——基于TMS320F2833x》是2018年机械工业出版社出版的图书,作者是马骏杰
此处所需装备:TMS320F28335开发板一块以及对应的原理图和仿真器
打开原理图,可以看见D2 D3正极接入了VDD3V3这个电源,负极接入了GPIO0、GPIO1两个接口,于是运用初中物理知识,正极有了差两个负极,可以将两个接口置为低电平,这两个灯就可以亮了。理论可行开始实践。(不同的板子原理图不一样哦)
在这里就不扯什么寄存器了,直接上代码,在代码里解释
GpioCtrlRegs
结构体代表了GPIO控制寄存器
GPXMUX为配置寄存器,这里的X为A、B、C对应不同的引脚
A(0-31) B(32-63) C(64-87)所以对应的哪个GPIO口,就用哪个
GPIO6就用A为GPAMUX1(0-15),如果是GPIO18就用GPAMUX2(16-31)
EALLOW;// 打开寄存器访问权限
GpioCtrlRegs.GPAMUX1.bit.GPIO6 = 0; // GPIO1复用为GPIO功能
GpioCtrlRegs.GPADIR.bit.GPIO6 = 1; // GPIO1设置为输出
GpioCtrlRegs.GPAPUD.bit.GPIO6 = 0; // GPIO1允许上拉
GpioCtrlRegs.GPAMUX1.bit.GPIO7 = 0; // GPIO2复用为GPIO功能
GpioCtrlRegs.GPADIR.bit.GPIO7 = 1; // GPIO2设置为输出
GpioCtrlRegs.GPAPUD.bit.GPIO7 = 0; // GPIO2允许上拉
GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 0; // GPIO1复用为GPIO功能
GpioCtrlRegs.GPADIR.bit.GPIO0 = 1; // GPIO1设置为输出
GpioCtrlRegs.GPAPUD.bit.GPIO0 = 0; // GPIO1允许上拉
GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 0; // GPIO2复用为GPIO功能
GpioCtrlRegs.GPADIR.bit.GPIO1 = 1; // GPIO2设置为输出
GpioCtrlRegs.GPAPUD.bit.GPIO1 = 0; // GPIO2允许上拉
EDIS;// 关闭寄存器访问权限
所以其他寄存器同理,GPX对应什么就是什么。
上述整体代码,就是在配置引脚,首先通过MUX配置寄存器,将 引脚配置为GPIO功能
然后,通过DIR方向控制寄存器,将GPIO口设置为输出,因为这只需要当负极,不需要传输数据进入单片机。
最后通过上拉寄存器PUD,使能上拉电阻。
ok配置什么的弄完了,剩下的就和C语言没什么不一样了
//先把头文件都弄过来
#include "DSP28x_Project.h"
#include "DSP2833x_Device.h"
#include "DSP2833x_Examples.h"
#include "math.h"
#include "IQmathLib.h"
//将GPIO口的数据寄存器,直接定义为LED,简便一些
#define LED1 GpioDataRegs.GPADAT.bit.GPIO0
#define LED2 GpioDataRegs.GPADAT.bit.GPIO1
#define LED3 GpioDataRegs.GPADAT.bit.GPIO6
#define LED4 GpioDataRegs.GPADAT.bit.GPIO7
int main(void)
{
/*系统初始化*/
InitSysCtrl();//这个函数用于初始化系统控制器,包括时钟源、时钟分频等系统级别的配置。
DINT;//这个指令用于禁用全局中断。它会清除 CPU 的中断使能位,确保在初始化过程中不会发生任何中断。
InitPieCtrl();//这个函数用于初始化中断控制器模块
IER = 0x0000;//将中断使能寄存器 IER(Interrupt Enable Register)的值设置为 0x0000,
//即禁用所有中断。
IFR = 0x0000;//将中断标志寄存器 IFR(Interrupt Flag Register)的值设置为 0x0000,
//即清除所有中断标志。
InitPieVectTable();//这个函数用于初始化中断向量表。中断向量表是一张保存了
//每个中断处理程序地址的表格,它告诉 CPU 在中断发生时去执行哪个中断处理程序。
//此处为烧录FLASH的代码,在调试好RAM前,不用管它
// MemCopy(&RamfuncsLoadStart,&RamfuncsLoadEnd,&RamfuncsRunStart);
// InitFlash();
//初始化,配置GOIO为点亮LED
EALLOW;
GpioCtrlRegs.GPAMUX1.bit.GPIO6 = 0; // GPIO1复用为GPIO功能
GpioCtrlRegs.GPADIR.bit.GPIO6 = 1; // GPIO1设置为输出
GpioCtrlRegs.GPAPUD.bit.GPIO6 = 0; // GPIO1允许上拉
GpioCtrlRegs.GPAMUX1.bit.GPIO7 = 0; // GPIO2复用为GPIO功能
GpioCtrlRegs.GPADIR.bit.GPIO7 = 1; // GPIO2设置为输出
GpioCtrlRegs.GPAPUD.bit.GPIO7 = 0; // GPIO2允许上拉
GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 0; // GPIO1复用为GPIO功能
GpioCtrlRegs.GPADIR.bit.GPIO0 = 1; // GPIO1设置为输出
GpioCtrlRegs.GPAPUD.bit.GPIO0 = 0; // GPIO1允许上拉
GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 0; // GPIO2复用为GPIO功能
GpioCtrlRegs.GPADIR.bit.GPIO1 = 1; // GPIO2设置为输出
GpioCtrlRegs.GPAPUD.bit.GPIO1 = 0; // GPIO2允许上拉
EDIS;
while(1)
{
LED3 = 0; //点亮LED3;因为我的原理图的低电平,点亮
DELAY_US(1);//使用DAT寄存器赋值,需要间隔4个时钟周期
LED2 = 1; //熄灭LED2;
DELAY_US(500000);//延时500ms
LED3 = 1;
DELAY_US(1);//使用DAT寄存器赋值,需要间隔4个时钟周期
LED4 = 0;
DELAY_US(500000);//延时500ms
LED4 = 1;
DELAY_US(1);
LED1 = 0;
DELAY_US(500000);//延时500ms
LED1 = 1;
DELAY_US(1);
LED2 = 0;
DELAY_US(500000);//延时500ms
}
}
我这里配置的是四个LED循环亮,大家复制过去改改就是自己的了
先编译,没问题过后开始烧录。
开始烧录到RAM,进行开发板上的调试,如无误后,最后烧录到FLASH
上述都无误后,开始烧录到FLASH
第一步,先把28335_RAM_lnk.cmd屏蔽掉,再把 F28335.cmd 解放出来
第二步,把这个代码取消注释
//此处为烧录FLASH的代码,在调试好RAM前,不用管它
// MemCopy(&RamfuncsLoadStart,&RamfuncsLoadEnd,&RamfuncsRunStart);
// InitFlash();
第三步,同样是点甲壳虫,就可以烧录到FLASH
展开 targetConfigs 文件夹,双击 TMS320F28335.ccxml 这个文件
稍等一会,出现如下界面
更换仿真器型号
成功的界面如下:
祝大家成功通过教学关卡,可以开始摸索新手村了,我也要去摸索了
如有侵权,联系,马上删