DSP相关笔记_2:LaunchXL-F28379D的简单教程系列(二)GPIO输入

DSP相关笔记_2:LaunchXL-F28379D的简单教程系列(二)GPIO输入

注:
1)这是本人关于Ti的C2000系列的学习笔记,所用工具有官方的开发软件CCS10版本,帮助文库以及函数库软件controlSUITE。硬件部分LaunchXL-F28379D和逻辑分析仪一台。
2)DSP相关笔记_1:LaunchXL-F28379D的简单教程系列(一) GPIO输出

前言:接着上次做完简单的GPIO输出之后,我们继续进行GPIO输入的实验,但会涉及到GPIO的输出配置,也是寄存器和函数库两个版本。

老规矩结构决定功能,先上结构图:
简单版:
在这里插入图片描述详细版:
在这里插入图片描述
根据具体版的结构图,要完成GPIO的输入,不仅要配置(图中的小y我换成常用的小x表示,强迫症,哈哈哈)GPxPUD、GPxDIR、GPxMUX1或GPxMUX2、GPxGMUX1或GPxGMUX2,共四个寄存器,还需要配置GPxINV、GPxCTRL、GPxQSEL1或GPxQSEL2,共三个寄存器。为什么会多出3个寄存器,这就是我们需要理解每个寄存器对应什么功能。
注:这里需要配置之前GPIO输出的相关寄存器(GPxPUD、GPxDIR、GPxMUX1或GPxMUX2、GPxGMUX1或GPxGMUX2),但由于篇幅有限,就只会说一下输入额外用到的寄存器(GPxINV、GPxCTRL、GPxQSEL1或GPxQSEL2)。
1)GPxINV:是否需要进行取反,相当于加了一个非门。Reset:0,相当于默认就是0,没有非门。不过我们为了更加有体系的认识需要手动配置一下。

2)GPxCTRLGPxQSEL1GPxQSEL2 两个寄存器,配合完成输入的模式,其中GPxQSEL1或GPxQSEL2是因为一个引脚占2位所以需要分成两个寄存器管理,只需要选择对应的使用就可以。
a.GPxQSEL1或GPxQSEL2:选择输入模式,有异步模式(Asysnc),同步模式(sysnc,和系统时钟同步),采样模式两种(3-sample(一个采样周期采样3次)和5-sample(一个采样周期采样5次),直白点就是采样的数量)
b.当选择了采样模式之后,就需要进行对GPxCTRL的配置,进行采样周期配置,具体参照应用手册P970内容。

注:我们进行简单的GPIO输入实验,所以我选用的是异步模式,也就是GPxCTRL(默认00)位11就可以,而无法配置GPxCTRL ,但如果选择采样模式则需要GPxCTRL,不然默认是周期和系统时钟一样。
当使用采样时的结构图:
在这里插入图片描述
然后就是代码:
函数库版:

#include "F28x_Project.h"
void gpioInit_my(void);
void main(void)
{
    //1.配置时钟,需要包括F2837xD_SysCtrl.c
    InitSysCtrl();
    //2.初始化GPIO,需要包括F2837xD_Gpio.c
    InitGpio();
    //3.关CPU中断
    DINT;
    //4.初始化PIE,并清楚相关寄存器,需要包括F2837xD_PieCtrl.c,F2837xD_PieVect.c,F2837xD_DefaultIsr.c
    InitPieCtrl();
    IER = 0x0000;
    IFR = 0x0000;
    InitPieVectTable();
    gpioInit_my();

    int i;
    while(1)
    {
        if(GPIO_ReadPin(1) == 0)//如果输入低电平,则执行方波输出,否则一直为低电平
        {
            for(i=10;i>0;i--)
            {
                GPIO_WritePin(0,0);
                delay_loop();
                GPIO_WritePin(0,1);
                delay_loop();
                GPIO_WritePin(0,0);
            }
            break;
        }
        else
        {
            GPIO_WritePin(0,0);
        }

    }
}
void gpioInit_my(void)
{
    GPIO_SetupPinMux(0,GPIO_MUX_CPU1,0x0);//配置GPIO0,属于GPU1,普通GPIO1
    GPIO_SetupPinOptions(0,GPIO_OUTPUT,GPIO_PUSHPULL);//输出模式,推挽模式

    GPIO_SetupPinMux(1,GPIO_MUX_CPU1,0x0);//配置GPIO1,属于GPU1,普通GPIO1
    GPIO_SetupPinOptions(1,GPIO_INPUT,GPIO_PULLUP|GPIO_ASYNC);//输出模式,上拉模式(不要让输入悬空)和异步模式
}

void delay_loop()
{
    short i;
    for (i = 0; i < 100; i++) {}
}

结果图:
在这里插入图片描述

寄存器版:

#include "F28x_Project.h"
void gpioInit_my(void);
void main(void)
{
    //1.配置时钟,需要包括F2837xD_SysCtrl.c
    InitSysCtrl();
    //2.关CPU中断
    DINT;
    //3.初始化PIE,并清楚相关寄存器,需要包括F2837xD_PieCtrl.c,F2837xD_PieVect.c,F2837xD_DefaultIsr.c
    InitPieCtrl();
    IER = 0x0000;
    IFR = 0x0000;
    InitPieVectTable();
    gpioInit_my();

    //GpioDataRegs.GPACLEAR.bit.GPIO0 = 1;
    //GpioDataRegs.GPASET.bit.GPIO0   = 1;
    int i;
    while(1)
    {
        if(GpioDataRegs.GPADAT.bit.GPIO1 == 1)//输入为高电平,输出方波,否则低电平。
        {
            for(i=10;i>0;i--)
            {
                GpioDataRegs.GPACLEAR.bit.GPIO0 = 1;
                delay_loop();
                GpioDataRegs.GPASET.bit.GPIO0   = 1;
                delay_loop();
                GpioDataRegs.GPACLEAR.bit.GPIO0 = 1;
            }
            break;
        }
        else
        {
            GpioDataRegs.GPACLEAR.bit.GPIO0 = 1;
        }

    }
}
void gpioInit_my(void)
{
    EALLOW;
    //Gpio0 Output
    GpioCtrlRegs.GPAGMUX1.bit.GPIO0 = 0 ;
    GpioCtrlRegs.GPAMUX1.bit.GPIO0  = 0 ;
    GpioCtrlRegs.GPADIR.bit.GPIO0   = 1 ;
    GpioCtrlRegs.GPAPUD.bit.GPIO0   = 1 ;
    //Gpio1 Input
    GpioCtrlRegs.GPAGMUX1.bit.GPIO1 = 0 ;
    GpioCtrlRegs.GPAMUX1.bit.GPIO1  = 0 ;
    GpioCtrlRegs.GPADIR.bit.GPIO1   = 0 ;
    GpioCtrlRegs.GPAPUD.bit.GPIO1   = 0 ;//上拉输入,不要选课

    GpioCtrlRegs.GPAQSEL1.bit.GPIO1 = 3 ;//选择No Synchronization (Asynchronous Input),异步输入
    GpioCtrlRegs.GPAINV.bit.GPIO1   = 0 ;//不取反
    EDIS;
}

void delay_loop()
{
    short i;
    for (i = 0; i < 100; i++) {}
}

结果图:
在这里插入图片描述

总结:这是基于上次GPIO的输出的完善,结合输出功能演示GPIO的输入功能。由于芯片很强大很多细节我都没有说,因为只是简单的使用GPIO所以不会说得很多,我在想想。由于才看不久可能会有说错的地方请大家下面评论就行,我会立即完善自己的笔记的。

注:如果不会配置工程文件,controlSUITE中的指导书和网上都有工程文件配置。

参考资料:TMS320F2837XD Dual-Core Microcontollers Technical Reference Manual

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值