基于普中TMS320F28335外设学习-GPIO

一、基本寄存器介绍

在这里插入图片描述
以GPIOA为例,红色为控制寄存器,绿色为数据寄存器,蓝色为中断和功耗选择寄存器,三类具体如下:
(1)
在这里插入图片描述
其中,
GPACTRL:将为输入引脚指定采样周期,位功能
在这里插入图片描述
GPAQSEL1/2:控制配置采样数,也可以认为是滤波数,当干扰信号持续采样周期小于该寄存器设置的采样周期数时,干扰信号被滤除,该寄存器各位功能
在这里插入图片描述
GPAMUX1/2:控制GPIO的四种外设功能(普通IO/外设等)
GPIOADIR:控制GPIO的输入/输出模式
在这里插入图片描述

GPIOAPUD:使能或者禁止上拉功能:0为上拉;1为禁止上拉
(2)
在这里插入图片描述
(3)
在这里插入图片描述

二、软件实现

步骤:
使能对应IO时钟–>配置IO为普通IO功能–>配置IO为输出/上拉设置–>程序控制亮灭

(1)在APP文件夹新建文件夹命名LEDS,添加.c和.h文件,并添加路径
(2)配置系统时钟,如下图在这里插入图片描述
通过查手册知我们需要GPIOINENCLK寄存器
在这里插入图片描述
点开SYS_CTRL_REGS结构体,选择对位操作,选择PCLKCR3寄存器,给1
在这里插入图片描述
完成时钟配置代码:

SysCtrlRegs.PCLKCR3.bit.GPIOINENCLK = 1;//时钟开启

(这DSP用起来和查万年历似的,一个套一个,真难)

(3)对GPIO进行配置

通过上文GPIO寄存器介绍,GPIO68属于GPIOC(GPIOA:0~ 31;GPIOB:32~ 63;GPIOC:63 ~87),
选择GPIOCMX1,对特定位操作,GPIO68,设定通用普通GPIO功能,如下:

GpioCtrlRegs.GPCMUX1.bit.GPIO68=0;

设定GPIO传输方向:
控制方向寄存器GPIODIR设定为输出

GpioCtrlRegs.GPCDIR.bit.GPIO68=1;

设定GPIO上拉电阻:

GpioCtrlRegs.GPCPUD.bit.GPIO68=0;

控制GPIO电平,LED采用共阳极接法,我们在初始状态熄灭LED,故设定高电平

GpioDataRegs.GPCSET.bit.GPIO68=1;

若要想让GPIO输出低电平,需:

GpioDataRegs.GPCCLEAR.bit.GPIO68=1;

贴一个最全的文章:https://blog.csdn.net/mango_cpu/article/details/113808388

三、代码

LEDS.C

#include "LEDS.h"

//开发板原理图LED为GPIO68--GPIO64,这里我们选择三个LED灯组成流水灯
//即GPIO68、GPIO67\GPIO66
void LED_Init(void)
{
	EALLOW;//关闭写保护

	SysCtrlRegs.PCLKCR3.bit.GPIOINENCLK = 1;//时钟开启


	GpioCtrlRegs.GPCMUX1.bit.GPIO68=0;//设定通用GPIO功能
	GpioCtrlRegs.GPCDIR.bit.GPIO68=1;//设定GPIO输出功能
	GpioCtrlRegs.GPCPUD.bit.GPIO68=0;//使能GPIO上拉电阻

	GpioCtrlRegs.GPCMUX1.bit.GPIO67=0;
	GpioCtrlRegs.GPCDIR.bit.GPIO67=1;
	GpioCtrlRegs.GPCPUD.bit.GPIO67=0;

	GpioCtrlRegs.GPCMUX1.bit.GPIO66=0;
	GpioCtrlRegs.GPCDIR.bit.GPIO66=1;
	GpioCtrlRegs.GPCPUD.bit.GPIO66=0;

	GpioDataRegs.GPCSET.bit.GPIO68=1;//设定GPIO输出高电平
	GpioDataRegs.GPCSET.bit.GPIO67=1;
	GpioDataRegs.GPCSET.bit.GPIO66=1;

	EDIS;//开启写保护
}

main.c



#include "DSP2833x_Device.h"     // DSP2833x Headerfile Include File
#include "DSP2833x_Examples.h"   // DSP2833x Examples Include File
#include "leds.h"


void delay(void)
{
    Uint16 		i;
	Uint32      j;
	for(i=0;i<128;i++)
		for (j = 0; j < 100000; j++);
}

//开发板原理图LED为GPIO68--GPIO64,这里我们选择三个LED灯组成流水灯
//即GPIO68、GPIO67\GPIO66


void main()
{
	InitSysCtrl();

	LED_Init();

	while(1)
	{
		GpioDataRegs.GPCCLEAR.bit.GPIO68=1;
		delay();
		GpioDataRegs.GPCSET.bit.GPIO68=1;
		delay();

		GpioDataRegs.GPCCLEAR.bit.GPIO67=1;
		delay();
		GpioDataRegs.GPCSET.bit.GPIO67=1;
		delay();
		
		GpioDataRegs.GPCCLEAR.bit.GPIO66=1;
		delay();
		GpioDataRegs.GPCSET.bit.GPIO66=1;
		delay();
	}

}


Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐