点亮LED教程 —— 基于 TI DSP28335 和 CCS9(超详细图文教程)
一、前言
本文介绍如何使用 TI 的 DSP28335 开发板通过 CCS9 创建一个简单工程,实现点亮板载 LED 的功能。
涵盖项目创建、代码结构、工程目录组织、库文件添加及程序调试流程,帮助初学者快速入门。
二、创建工程及项目结构
- 打开 CCS(Code Composer Studio)
打开软件以后,切换到CCS Edit界面。如下图
- 新建工程
- 点击 Project > New CCS Project
- 选择设备型号:TMS320F28335
选择对应的仿真器,如下图:
给开发板通电,并连接上仿真器。点击Verify。进行测试。如下图,提示成功。
点击Finish,关闭界面,继续设置。
- 选择空项目模板(Empty Project)
- 选择目标芯片信号和仿真器型号
- 设置工程名,如 LED_Blink
- 点击完成,工程创建成功
自动创建了cmd文件和ccxml文件。如下图
- 项目目录结构建议
建议项目中创建如下文件夹分类,便于管理和维护:
在工程文件目录E:\V101\LED_Blink下,增加APP、SOURCE、USER文件夹。新建后CCS同步更新。按照如下步骤,创建LED_led.c和LED_led.h
- 在ccs中右键点击
APP文件夹- 选择New > Source File或New > Header File(根据需求,创建源文件时,选择Source File)
- 在弹出的对话框中输入文件名(
LED_led.c或LED_led.h),点击完成- CCS会自动在工程文件夹
APP目录下创建对应的文件,并加入项目中
- CCS会自动在工程文件夹
- 在USER中创建main.c
- 最终的文件格式如下
LED_Blink/
├── APP/ // 自定义应用功能模块,例如LED相关代码
│ ├── LED_led.h // LED头文件
│ └── LED_led.c // LED源文件
├── SOURCE/ // 准备存放TI官方提供的DSP2833x库文件,下一章说明
│ ├── DSP2833x_GlobalVariableDefs.c
│ ├── DSP2833x_SysCtrl.c
│ ├── DSP2833x_usDelay.c
│ └── ...
├── USER/ // 用户自定义代码,主程序等
│ └── main.c
├── DSP2833x_Headers_nonBIOS.cmd // 链接头文件,暂时还没添加进来
├── 28335_RAM_lnk.cmd // 链接脚本
└── ...
三、添加TI官方必要控制库文件(不可省略)
为了让程序正常运行,使用 TI 的 DSP28335 必须添加一些官方的库文件,这些文件提供了芯片的初始化、系统控制、GPIO、中断管理、延时等底层功能。缺少它们,编译或链接会报错。库文件位置为DSP2833x_common及DSP2833x_headers文件夹下。
1、必须添加的源文件清单
文件名 | 说明 | 建议放置目录 |
DSP2833x_ADC_cal.asm | ADC 校准函数,TI预置的汇编代码,用于ADC精度校正 | SOURCE 文件夹 |
DSP2833x_DefaultIsr.c | 默认中断服务程序,防止未定义中断崩溃 | SOURCE 文件夹 |
DSP2833x_GlobalVariableDefs.c | 全局变量定义,系统和外设使用的全局变量 | SOURCE 文件夹 |
DSP2833x_Gpio.c | GPIO 口初始化和控制代码 | SOURCE 文件夹 |
DSP2833x_PieCtrl.c | PIE 中断控制器初始化代码 | SOURCE 文件夹 |
DSP2833x_PieVect.c | PIE 中断向量表初始化代码 | SOURCE 文件夹 |
DSP2833x_SysCtrl.c | 系统控制初始化代码,时钟、PLL、看门狗等 | SOURCE 文件夹 |
DSP2833x_usDelay.asm | 微秒级延时汇编函数 | SOURCE 文件夹 |
2.文件放置建议
- 创建 SOURCE 文件夹:项目根目录下,新建 SOURCE 文件夹(如果还没有的话)
- 复制所有以上源文件到 SOURCE 文件夹,保持文件名不变
- 这样便于代码管理,也符合 TI 官方示例工程的结构
3.重要说明
- DSP2833x_ADC_cal.asm和DSP2833x_usDelay.asm是汇编文件,编译器会调用其内置延时和校准功能
- DSP2833x_GlobalVariableDefs.c定义了核心全局变量,缺失会导致链接错误如 _main 找不到等
- DSP2833x_PieCtrl.c和DSP2833x_PieVect.c负责中断控制,初始化中断向量表,缺失会导致中断相关函数找不到
- DSP2833x_Gpio.c包含GPIO初始化代码,方便快速配置IO口
- DSP2833x_SysCtrl.c配置系统时钟和PLL,是系统稳定运行的基础
4.其他文件
- 链接文件:DSP2833x_Headers_nonBIOS.cmd(TI 官方给出的 DSP2833x_Headers_nonBIOS.cmd 是通用且固定的,几乎所有 DSP28335 的工程都用同一个)
将这个文件DSP2833x_Headers_nonBIOS.cmd赋值到项目的根目录下。CCS会自动识别出来。
- 28335_RAM_lnk.cmd(这个文件是程序和数据在 RAM 中的分配方案,告诉链接器每个段(.text、.cinit、.bss、.stack 等)要放到哪个 RAM 区域,此cmd文件已在初始化时候,进行了默认创建。
四、项目链接配置
在 TI CCS(Code Composer Studio)中,除了添加源文件,还必须告诉编译器去哪里找头文件(.h 文件),头文件和源文件是一一对应关系。否则编译时会报找不到头文件错误。
1.需要添加的头文件目录
一般来说,TI 官方库的头文件在两个目录:
- DSP2833x_Headers:芯片寄存器和外设寄存器的头文件
- DSP2833x_Common:通用的驱动代码头文件
这两个目录都要添加进编译器的头文件搜索路径。
2. CCS中添加方法
以 CCS 9.x 为例:
- 在Project Explorer里,右键点击你的项目名,选择Properties(属性)
- 在弹出的窗口左侧菜单中选择Build →C2000 Compiler → Include Options
- 点击Add...(添加)按钮
- 选择你本地存放的 TI 头文件路径,比如:
- E:/V101/DSP2833x_headers/include
- E:/V101/DSP2833x_common/include
(根据你本地实际路径填写)
- 确认添加,点击OK
3.注意事项
- 头文件路径必须是目录路径,不是具体文件
- 2个目录都要逐一添加,否则会导致部分头文件找不到
- 添加完路径后,编译器才能正确找到 DSP2833x_Device.h、DSP2833x_Examples.h、DSP2833x_GlobalVariableDefs.h 等关键头文件
4、创建调试配置(Target Configuration)
这是关键步骤,否则无法正确调试程序.这一步在创建文件的时候,已经做了,设置仿真器型号了,这里练习一下新建调试配置。
- 在 CCS 菜单栏选择View -> Target Configurations,打开目标配置管理器。
- 弹出如下窗口
- 在弹出窗口空白处右键,选择New Target Configuration。输入一个名称保存该配置文件(例如 XDS100_V2.ccxml),
- 先选择仿真器的型号
- 弹出对话框,选择你的设备型号,比如 F28335 或对应的开发板型号。
- 并保存到默认目录(一般是 C:\Users\用户名\ti\ccsTargetConfigurations\)。
- 该 .ccxml 文件即为你的调试配置文件。
- 点击save保存配置文件。把电路板连上电,插好仿真器,点击“Test Connection”测试连接。
正常情况下,会提示:“The JTAG DR Integrity scan-test has succeeded.”
证明仿真器链接成功。
5、关联调试配置到工程
- 首先,如上图所示,打开“Project Explorer (Workspace)”界面
- 右键工程(根目录),选择Debug As -> Debug Configurations...。
- 找到对应的调试配置,切换到“Main”选项卡。
- 在“Target Configuration”栏,点击“File System...”
- 选择刚刚创建的 .ccxml 文件。
- 点击“Apply”保存配置。
五、运行代码示例
#将以下代码,赋值到对应文件夹
1. APP/LED_led.h
#ifndef APP_LED_LED_H_ #define APP_LED_LED_H_ void LED_Init(void); void LED_On(void); void LED_Off(void); #endif /* APP_LED_LED_H_ */2. APP/LED_led.c
#include "DSP2833x_Device.h" #include "LED_led.h" void LED_Init(void) { EALLOW; GpioCtrlRegs.GPBMUX2.bit.GPIO60 = 0; // 设置GPIO60为普通GPIO GpioCtrlRegs.GPBDIR.bit.GPIO60 = 1; // 设置GPIO60为输出 GpioDataRegs.GPBSET.bit.GPIO60 = 1; // 默认LED关闭(高电平) EDIS; } void LED_On(void) { GpioDataRegs.GPBCLEAR.bit.GPIO60 = 1; // GPIO60输出低电平,LED亮 } void LED_Off(void) { GpioDataRegs.GPBSET.bit.GPIO60 = 1; // GPIO60输出高电平,LED灭 }3. USER/main.c
#include "DSP2833x_Device.h" #include "DSP2833x_Examples.h" #include "APP/LED_led.h" void main(void) { DisableDog(); // 关闭看门狗 InitSysCtrl(); // 初始化系统时钟和外设时钟 LED_Init(); // 初始化LED DINT; // 关闭中断 InitPieCtrl(); // 初始化中断控制器 IER = 0x0000; // 禁用CPU中断 IFR = 0x0000; // 清除中断标志 InitPieVectTable(); // 初始化中断向量表 LED_On(); // 点亮LED while(1) { // 主循环保持 } }六、编译、烧写及调试
- 编译工程
点击 Build 按钮,确认无编译或链接错误。最终生成一个“.out”文件
- 连接开发板
使用仿真器(如 XDS100V2),确认连接正确。并给电路板上电(如果没上点的话) - 烧写程序
点击 Debug按钮,下载程序到目标板。
- 点击运行按钮
“resume”
- 观察LED
如果程序正确执行,板载LED会点亮。
- 调试技巧
- 在 CCS 中设置断点
- 观察寄存器值(如 GPBSET、GPBCLEAR)
- 使用逻辑分析仪或示波器检测GPIO电平
七、总结
- 工程结构清晰,代码组织合理,便于维护
- 必须添加并正确配置TI官方头文件和库
- 链接文件配置正确,保证程序在目标内存运行
- GPIO初始化步骤包含多路复用解除和方向设置
- 关闭看门狗,初始化时钟是基础必备步骤
- 通过调用模块化的LED驱动函数,实现灵活控制
大体流程如上~本次直接打通!
后续教程2,如何烧写到Flash,掉电后,程序还在。
将本文的案例 代码 + word文档 。挂在百度网盘。友友们自取,欢迎讨论。
通过网盘分享的文件:手把手点亮LED.zip
链接: https://pan.baidu.com/s/15-puZ2Xpx3bXxETDG_F0lA?pwd=wsgv 提取码: wsgv
到最后,老铁双击评论666~