Bootstrap

DSP 基础学习 2:GPIO与第一个实验:流水LED灯


  鄙人使用的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.
;