1 TMS320F28335 GPIO 介绍
1.1 GPIO 概念
1.2 GPIO 结构框图
1.3 GPIO输入限定功能
1.4 GPIO 相关寄存器
(1)GPxCTRL 寄存器
(2) GPIO置位寄存器(GPAQSEL)
(3) GPIO方向控制寄存器(GPxDIR)
(4)GPIO功能选择控制寄存器(GPXMUX1、GPXMUX2)
(5)GPIO数据寄存器(GPXDAT)
(6)GPIO清零寄存器(GPxCLEAR)
(7)GPIO 电平翻转寄存器(GPxTOGGLE)
(8)GPIO上拉控制寄存器
1.5 GPIO配置步骤
2 实际应用
2.1 LED 实验
2.2 程序解析
#include "DSP2833x_Device.h" // Headerfile Include File
#include "DSP2833x_Examples.h" // Examples Include File
#include "LED.h"
void LED_Init(void)
{
EALLOW;//关闭保护
//LED14 端口配置
GpioCtrlRegs.GPCMUX1.bit.GPIO68=0; GpioCtrlRegs.GPCDIR.bit.GPIO68=1; GpioCtrlRegs.GPCPUD.bit.GPIO68=0;
//LED13 端口配置
GpioCtrlRegs.GPCMUX1.bit.GPIO67=0; GpioCtrlRegs.GPCDIR.bit.GPIO67=1; GpioCtrlRegs.GPCPUD.bit.GPIO67=0;
//LED12 端口配置
GpioCtrlRegs.GPCMUX1.bit.GPIO66=0; GpioCtrlRegs.GPCDIR.bit.GPIO66=1; GpioCtrlRegs.GPCPUD.bit.GPIO66=0;
//LED11 端口配置
GpioCtrlRegs.GPCMUX1.bit.GPIO65=0; GpioCtrlRegs.GPCDIR.bit.GPIO65=1; GpioCtrlRegs.GPCPUD.bit.GPIO65=0;
//LED10 端口配置
GpioCtrlRegs.GPCMUX1.bit.GPIO64=0; GpioCtrlRegs.GPCDIR.bit.GPIO64=1; GpioCtrlRegs.GPCPUD.bit.GPIO64=0;
//LED9端口配置
GpioCtrlRegs.GPBMUX2.bit.GPIO61=0; GpioCtrlRegs.GPBDIR.bit.GPIO61=1; GpioCtrlRegs.GPBPUD.bit.GPIO61=0;
//LED8 端口配置
GpioCtrlRegs.GPBMUX2.bit.GPIO60=0; GpioCtrlRegs.GPBDIR.bit.GPIO60=1; GpioCtrlRegs.GPBPUD.bit.GPIO60=0;
GpioDataRegs.GPCSET.bit.GPIO68=1;GpioDataRegs.GPCSET.bit.GPIO67=1; GpioDataRegs.GPCSET.bit.GPIO66=1; GpioDataRegs.GPCSET.bit.GPIO65=1; GpioDataRegs.GPCSET.bit.GPIO64=1; GpioDataRegs.GPBSET.bit.GPIO61=1; GpioDataRegs.GPBSET.bit.GPIO60=1;
EDIS;//开启寄存器保护
}
//延迟子函数
void delay()
{
Uint32 i;
Uint32 j;
for(i=0;i<32;i++)
for (j = 0; j < 100000; j++) {}
}
#ifndef APP_LED_H_
#define APP_LED_H_
#include "DSP2833x_Device.h" // DSP2833x 头文件
#include "DSP2833x_Examples.h" // DSP2833x 例子相关头文件
#define LED14_OFF (GpioDataRegs.GPCSET.bit.GPIO68=1)
#define LED14_ON (GpioDataRegs.GPCCLEAR.bit.GPIO68=1)
#define LED14_TOGGLE (GpioDataRegs.GPCTOGGLE.bit.GPIO68=1)
#define LED13_OFF (GpioDataRegs.GPCSET.bit.GPIO67=1)
#define LED13_ON (GpioDataRegs.GPCCLEAR.bit.GPIO67=1)
#define LED13_TOGGLE (GpioDataRegs.GPCTOGGLE.bit.GPIO67=1)
#define LED12_OFF (GpioDataRegs.GPCSET.bit.GPIO66=1)
#define LED12_ON (GpioDataRegs.GPCCLEAR.bit.GPIO66=1)
#define LED12_TOGGLE (GpioDataRegs.GPCTOGGLE.bit.GPIO66=1)
#define LED11_OFF (GpioDataRegs.GPCSET.bit.GPIO65=1)
#define LED11_ON (GpioDataRegs.GPCCLEAR.bit.GPIO65=1)
#define LED11_TOGGLE (GpioDataRegs.GPCTOGGLE.bit.GPIO65=1)
#define LED10_OFF (GpioDataRegs.GPCSET.bit.GPIO64=1)
#define LED10_ON (GpioDataRegs.GPCCLEAR.bit.GPIO64=1)
#define LED10_TOGGLE (GpioDataRegs.GPCTOGGLE.bit.GPIO64=1)
#define LED9_OFF (GpioDataRegs.GPBSET.bit.GPIO61=1)
#define LED9_ON (GpioDataRegs.GPBCLEAR.bit.GPIO61=1)
#define LED9_TOGGLE (GpioDataRegs.GPBTOGGLE.bit.GPIO61=1)
#define LED8_OFF (GpioDataRegs.GPBSET.bit.GPIO60=1)
#define LED8_ON (GpioDataRegs.GPBCLEAR.bit.GPIO60=1)
#define LED8_TOGGLE (GpioDataRegs.GPBTOGGLE.bit.GPIO60=1)
void LED_Init(void);
void delay();
#endif /* APP_LED_H_ */
main 函数
要点亮 LED 指示灯,在 main 函数内需要先调用 LED 初始化函数,然后调用
LED1_ON 宏定义。如果要让 LED 闪烁,需要在 LED1_ON 和 LED1_OFF 语句或者直接使用 LED1_TOGGLE 宏加入一定的延时,这个时间只要保证肉眼能够观察到闪烁效果即可。
#include "DSP2833x_Device.h" // DSP2833x 头文件
#include "DSP2833x_Examples.h" // DSP2833x 例子相关头文件
#include "LED.h"
void main(void)
{
InitSysCtrl();//配置系统时钟150MHZ,配置看门狗,禁止看门狗
LED_Init();
while(1)
{
// GpioDataRegs.GPBTOGGLE.bit.GPIO60=1;
LED8_TOGGLE;
delay();
}
}
主函数非常简单,首先调用 InitSysCtrl(),完成系统时钟配置和使能各外设时钟,包括 GPIO 时钟。然后调用 LED 初始化函数,将 GPIO68 引脚配置为普通 GPIO、输出方向、使能上拉。最后进入 while 循环内调用 LED14_TOGGLE 宏, 让 GPIO68 引脚输出状态间隔 delay 时间翻转一次,即高电平变低电平,低电平变高电平,从而实现点亮 LED 并使其闪烁。至于 delay 函数延时时间具体多少,自己可以设定查看,后面会教大家使用 TI 提供给我们的延时函数。