1. 搭建CCS开发环境并点亮LED
任务说明
本案例目标是在TI C2000系列DSP(以TMS320F28379D为例)上完成CCS(Code Composer Studio)开发环境搭建,编写并烧录一个最小工程,实现开发板上LED的周期性闪烁。通过该案例,验证从工程创建、代码编写、编译烧录到硬件运行的完整工具链是否打通。
硬件连接与观测点
工程创建步骤
- 安装CCS 12.x及以上版本,在组件选择中勾选C2000 MCU支持。
- 打开CCS,选择File → New → CCS Project。
- Target选择TMS320F28379D,连接方式保持默认的XDS110。
- 工程模板选择Empty Project (with main.c),编译器版本选择TI v22.x。
- 工程创建完成后,在工程属性中将linker command file设置为
28379D_RAM_lnk_cpu1.cmd(位于C2000Ware安装目录的device_support文件夹中)。
代码实现
以下代码直接操作GPIO寄存器,不依赖任何驱动库,便于验证底层寄存器配置是否正确。LED接在GPIO31引脚(对应LaunchPad板载LED),输出高电平点亮。
// main.c - TMS320F28379D GPIO控制LED闪烁
#include "F2837xD_device.h" // 器件寄存器定义
// 简单软件延时函数(约500ms @ 200MHz CPU时钟)
void delay_loop(void) {
volatile unsigned long i;
for (i = 0; i < 5000000; i++) {
// 空循环等待
}
}
void main(void) {
// 1. 禁用看门狗
WdRegs.WDCR.all = 0x0068;
// 2. 使能GPIO时钟(GPIO时钟默认开启,此处确保)
CpuSysRegs.PCLKCR0.bit.GPIOINENCLK = 1;
// 3. 配置GPIO31为输出引脚
// GPAMUX1寄存器控制GPIO0-15,GPBMUX1控制GPIO16-31
// GPIO31属于GPB组,对应GPBMUX1的bit31-30
GpioCtrlRegs.GPBMUX1.bit.GPIO31 = 0; // 设置为GPIO功能(非外设复用)
GpioCtrlRegs.GPBDIR.bit.GPIO31 = 1; // 设置为输出方向
// 4. 初始状态:LED灭(GPIO31输出低电平)
GpioDataRegs.GPBSET.bit.GPIO31 = 1; // 先置高,再清除,确保初始为低
GpioDataRegs.GPBCLEAR.bit.GPIO31 = 1;
// 5. 主循环:LED闪烁
while (1) {
// 点亮LED(输出高电平)
GpioDataRegs.GPBSET.bit.GPIO31 = 1;
delay_loop();
// 熄灭LED(输出低电平)
GpioDataRegs.GPBCLEAR.bit.GPIO31 = 1;
delay_loop();
}
}
关键寄存器说明
| 寄存器 | 位域 | 值 | 作用 |
|---|---|---|---|
| GPBMUX1 | GPIO31 (bit31:30) | 00 | 选择GPIO功能,非外设复用 |
| GPBDIR | GPIO31 (bit31) | 1 | 配置为输出方向 |
| GPBSET | GPIO31 | 1 | 输出高电平(点亮LED) |
| GPBCLEAR | GPIO31 | 1 | 输出低电平(熄灭LED) |
编译与烧录
- 点击锤子图标(Build)编译工程,确认Console窗口输出
Build Finished且无错误。 - 用USB线连接开发板与PC,板载XDS110仿真器会被自动识别。
- 点击绿色甲虫图标(Debug),CCS将自动烧录程序并进入调试界面。
- 点击绿色运行按钮(Resume),程序开始执行。
验证方法与判定标准
验证步骤:
- 观察开发板上标注为LED1(连接GPIO31)的指示灯是否以约1Hz频率闪烁。
- 在CCS调试界面中,通过Expressions窗口添加
GpioDataRegs.GPBTOG.bit.GPIO31,单步执行时可观察到该位在0和1之间切换。
判定标准:
- LED以肉眼可见的稳定频率(约1Hz)交替亮灭,说明GPIO配置正确、主循环正常运行。
- 若LED常亮或常灭,检查GPBMUX1和GPBDIR寄存器配置是否正确;若LED完全不亮,检查硬件连接及3.3V供电。
预期输出:程序烧录并运行后,GPIO31引脚输出方波信号,周期约1秒(高电平500ms,低电平500ms),LED呈现闪烁效果。该结果由代码逻辑直接决定,可作为功能正常的判定依据。