1.DSP学习记录之通用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();
}
}
更多推荐


所有评论(0)