鄙人使用的DSP是TMS320F28335PGFA,开发板是pop28335(师兄遗留的,开发板大同小异,貌似POP现在倒闭了?),仿真器是XDS100V3。电脑系统为windows8.1,CCS软件版本是6.0.1。
上一篇简单介绍了DSP以及怎么部署开发环境,本着以做为主的原则,这一篇就要做出第一个实验:流水LED灯。为了做出这个实验,还得学习GPIO相关的内容。本篇用到的资源在以下这个链接里下载。
https://download.csdn.net/download/huagengpai1994/10875803
里面有四个文件夹,分别是例程、数据手册、用户手册和应用手册。
1 实验准备
1.1 实验简介
实验达到的效果是让led灯间歇依次高亮,也就是流水LED灯。
LED灯属于外设,要想控制外设就得知道硬件是怎么连接的,所以看原理图是必要的第一步。
在开发板原理图上可以找到LED灯部分,如下图。
可以看到有8个LED灯,一端通过限流电阻接在3.3V高电压上,D3.3表示直流3.3V。另一边分别接在GPIO60,GPIO61,GPIO2,GPIO3,GPIO4,GPIO5,GPIO6,GPIO7。
GPIO全称是:General Purpose Input Output (通用输入/输出)。它是DSP芯片用来与外界电路进行信息互换的端口。只要让GPIO输出低电压,那么对应的LED灯支路就会有电流通过,该LED灯被点亮,反之不亮。所以关键在于GPIO的使用。
1.2 GPIO介绍
DSP28335一共88个IO口分为3组
A组:GPIO0~GPIO31
B组:GPIO32~GPIO63
C组:GPIO64~GPIO87
下图是核心板原理如上DSP的部分,可以看到有很多GPIO口。
TI官方给出了一些手册用来说明芯片的使用。我这里有用户手册,数据手册和应用手册,下载链接在本文开头给出了。在用户手册的《sprufb0d(TMS320x2833x, 2823x System Control and Interrupts)》第六章General-Purpose Input/Output (GPIO)中详细说明了GPIO。这里就不挨个解读了,建议将该章通读一遍,虽然是英文的但应该都能看明白。
2 代码解读
把上篇的模板拷贝过来一份,直接使用该模板进行开发。
鄙人的本程序也是参考别人的例程开发的(买板子的时候店家给的,不知道是不是官方的),该例程只有一个main.c文件。所有例程都在资料里,本篇的相关的内容应该是例程17。
2.1 准备工作
在Hello DSP 文件夹下新建文件夹APP,然后在其中新建LED文件夹,接着在LED文件夹下新建LED.C和LED.h两个文件。APP是用来保存外设的文件,LED是一个外设。新建public.c和public.h,用来包含公共的头文件,否则main.c的内容过于多。这样是基于模块化的编程,将功能分离,逻辑上更简洁。
在public.c中写入以下代码:
在public.h中写入以下代码:
第1,2,7行代码是固定程式,在这里就是这样去写。C语言里这叫条件编译,是为了防止重定义。
第4,5行,表示包含这两个头文件,第一个头文件是为了包含DSP系统的基本文件,包含它相当于包含了另两个文件。第二个就是包含我们编写的外设文件,LED.h。
2.2 LED.h
在LED.h中写入一下代码。
#ifndef LED_H
#define LED_H
#include "DSP28x_Project.h"
/**************************************宏定义************************************************/
#define LED1_OFF GpioDataRegs.GPBSET.bit.GPIO60 = 1 //LED D10 点亮
#define LED1_ON GpioDataRegs.GPBCLEAR.bit.GPIO60 = 1 //LED D10 熄灭
#define LED2_OFF GpioDataRegs.GPBSET.bit.GPIO61 = 1 //LED D11 点亮
#define LED2_ON GpioDataRegs.GPBCLEAR.bit.GPIO61 = 1 //LED D11 熄灭
#define LED3_OFF GpioDataRegs.GPASET.bit.GPIO2 = 1 //LED D12 点亮
#define LED3_ON GpioDataRegs.GPACLEAR.bit.GPIO2 = 1 //LED D12 熄灭
#define LED4_OFF GpioDataRegs.GPASET.bit.GPIO3 = 1 //LED D13 点亮
#define LED4_ON GpioDataRegs.GPACLEAR.bit.GPIO3 = 1 //LED D13 熄灭
#define LED5_OFF GpioDataRegs.GPASET.bit.GPIO4 = 1 //LED D14 点亮
#define LED5_ON GpioDataRegs.GPACLEAR.bit.GPIO4 = 1 //LED D14 熄灭
#define LED6_OFF GpioDataRegs.GPASET.bit.