DSP相关笔记_1:LaunchXL-F28379D的简单教程系列(一)GPIO输出

LaunchXL-F28379D的简单教程系列(一)GPIO输出

注:这是本人关于Ti的C2000系列的学习笔记,所用工具有官方的开发软件CCS10版本,帮助文库以及函数库软件controlSUITE。硬件部分LaunchXL-F28379D和逻辑分析仪一台

本文分为函数库和寄存器两种方法

但都需要理解硬件的架构
图一
在这里插入图片描述

图二
在这里插入图片描述
图一较为简单,而图二相对更加具体,我们这里也基本只会涉及到图一讲解,图二待以后用其他外设的时候解释一下。
根据图一要想我们的GPIO作为输出口并正常工作至少需要配置GPxDIR、GPxMUX1或GPxMUX2、GPxGMUX1或GPxGMUX2、GPxPUD这几个寄存器。
注:
第一点:
这里解释一下,因为本DSP的封装引脚很多一共168个,由于寄存器只有32位,所以将所有的引脚分为了A,B,C,D,E,F六组
• Port A consists of GPIO0-GPIO31
• Port B consists of GPIO32-GPIO63
• Port C consists of GPIO64-GPIO95
• Port D consists of GPIO96-GPIO127
• Port E consists of GPIO128-GPIO159
• Port F consists of GPIO160-GPIO168
因此其中小x就是对应的A,B,C,D,E,F,但在函数库编写的时候是直接写引脚的编号。
假设我们要对GPIO0进行操作,首先明确它在A组,才能通过A组对其寄存器进行相关操作。
第二点:
就是(GPxGMUX1或GPxGMUX2)和(GPxGMUX1或GPxGMUX2),其实因为是两位所以一个GPxMUX1或GPxMUX2、GPxGMUX1或GPxGMUX2的寄存器,其实只涉及了16引脚,因此将它分为1和2两组。

GPxDIR寄存器是对方向的配置,0是输入(input),1是输出(output)。
GPxMUX和GPxGMUX是通过不同的配置进行外设的选择,简单就是复用的配置,这里可以看一下配置资料:
在这里插入图片描述
当然我们因为这里只需要普通GPIO功能就只需要把他们都设为0就行了。
GPxPUD是配置需不需上拉的寄存器,GPIO0-11都是默认不上拉,而其余的是默认上拉。
对GPIO值操作的寄存器有四个GPxSET,GPxCLEAR,GPxTOGGLE,GPxDAT
这里推荐不要直接对GPxDAT进行操作,通过GPxSET置位、GPxCLEAR复位、GPxTOGGLE翻转间接操作

直接上代码

方法一:方波个数5个(i=5)

#include "F28x_Project.h"
void delay_loop();
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();
    //方法一:库函数编写,前提InitGpio()要有
    //实验对象:GPIO0->P0
    GPIO_SetupPinMux(0,GPIO_MUX_CPU1,0x0);//param1:引脚,param2:控制器,param3:外设(0,2,4,8默认为GPIO)
    GPIO_SetupPinOptions(0,GPIO_OUTPUT,GPIO_PUSHPULL);//param1:引脚,param2:输入或输出,param3:引脚模式

    int i;
    for(i=5;i>0;i--)
    {
        GPIO_WritePin(0,0);
        delay_loop();
        GPIO_WritePin(0,1);
        delay_loop();
        GPIO_WritePin(0,0);
    }
}

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

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

方法二:方波个数6个(i=6)

#include "F28x_Project.h"
void delay_loop();
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();
    //方法二:寄存器编写
    //实验对象:GPIO0->P0
    EALLOW;//允许写入保护
    GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 0;
    GpioCtrlRegs.GPAGMUX1.bit.GPIO0 = 0;
    GpioCtrlRegs.GPADIR.bit.GPIO0 = 1;
    GpioCtrlRegs.GPAPUD.bit.GPIO0 = 1;
    EDIS;//关闭写入保护



    int i;
    for(i=6;i>0;i--)
    {
        GpioDataRegs.GPACLEAR.bit.GPIO0 = 1;
        delay_loop();
        GpioDataRegs.GPASET.bit.GPIO0=1;
        delay_loop();
        GpioDataRegs.GPACLEAR.bit.GPIO0 = 1;
    }
}

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

逻分结果:
在这里插入图片描述
总结:这是粗略讲了一下,因为后面使用外设的时候这都是基本操作,都可以通过函数库和寄存器实现,不过我更多会使用函数库的方法后面,因为我也才玩不久,现在也是慢慢啃英文参考资料,如果有啥错了直接给我评论就行了,只是记录一下。

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

  • 15
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值