F28069M_GPIO简单控制

写在开头

由于本博客markdown解析器和本人笔记解析器不兼容,所以下方为简化版教程,完整教程请下载本文PDF格式(每一次都会在文章最后给出PDF版下载地址)

首先

看一下我简陋的代码

#include "DSP28x_Project.h"

void gpio_setup(void);

void main()
{
    InitSysCtrl();
    DINT;
    IER=0x0000;
    IFR=0x0000;
    InitPieVectTable();
    gpio_setup();
    while(1)
    {
        if(GpioDataRegs.GPADAT.bit.GPIO21==1)
        {
            GpioDataRegs.GPBDAT.bit.GPIO54=0;
            DELAY_US(50000);
            GpioDataRegs.GPBDAT.bit.GPIO54=1;
            DELAY_US(50000);
        }
        else
        {

            GpioDataRegs.GPADAT.bit.GPIO23=0;
            DELAY_US(100000);
            GpioDataRegs.GPADAT.bit.GPIO23=1;
            DELAY_US(100000);
        }
    }

}

void gpio_setup(void)
{
    EALLOW;
    GpioCtrlRegs.GPBMUX2.bit.GPIO54=0;
    GpioCtrlRegs.GPBPUD.bit.GPIO54=0;
    GpioCtrlRegs.GPBDIR.bit.GPIO54=1;
    EDIS;
    EALLOW;
    GpioCtrlRegs.GPAMUX2.bit.GPIO23=0;
    GpioCtrlRegs.GPAPUD.bit.GPIO23=0;
    GpioCtrlRegs.GPADIR.bit.GPIO23=1;
    EDIS;
    EALLOW;
    GpioCtrlRegs.GPAMUX2.bit.GPIO21=0;
    GpioCtrlRegs.GPAPUD.bit.GPIO21=0;
    GpioCtrlRegs.GPADIR.bit.GPIO21=0;
    EDIS;
}

代码很low,但是能用。看不懂来打我啊,然后继续。

怎么开始

  1. 首先需要建立一个CCS工程,详情请看上一篇文章。
  2. 然后就是套路系统初始化,中断初始化

        InitSysCtrl();           //系统初始化
        DINT;                    //关闭全局中断
        IER=0x0000;              //初始化中断控制寄存器
        IFR=0x0000;              //关闭CPU中断
        InitPieVectTable();      //清除CPU中断信号

这一段很套路,代码前面都需要这样初始化,来一下

  1. 系统初始化之后就是I/O口初始化,此为初始化函数,须在I/O使用前在主程序内调用(记得声明函数)。

    void gpio_setup(void)
    {
        EALLOW;
        GpioCtrlRegs.GPBMUX2.bit.GPIO54=0;
        GpioCtrlRegs.GPBPUD.bit.GPIO54=0;
        GpioCtrlRegs.GPBDIR.bit.GPIO54=1;
        EDIS;
        EALLOW;
        GpioCtrlRegs.GPAMUX2.bit.GPIO23=0;
        GpioCtrlRegs.GPAPUD.bit.GPIO23=0;
        GpioCtrlRegs.GPADIR.bit.GPIO23=1;
        EDIS;
        EALLOW;
        GpioCtrlRegs.GPAMUX2.bit.GPIO21=0;
        GpioCtrlRegs.GPAPUD.bit.GPIO21=0;
        GpioCtrlRegs.GPADIR.bit.GPIO21=0;
        EDIS;
      
  2. 用户编写函数

    while(1)
    {
        if(GpioDataRegs.GPADAT.bit.GPIO21==1)
        {
            GpioDataRegs.GPBDAT.bit.GPIO54=0;
            DELAY_US(50000);
            GpioDataRegs.GPBDAT.bit.GPIO54=1;
            DELAY_US(50000);
        }
        else
        {
    
            GpioDataRegs.GPADAT.bit.GPIO23=0;
            DELAY_US(100000);
            GpioDataRegs.GPADAT.bit.GPIO23=1;
            DELAY_US(100000);
        }
    }

GPIO_相关寄存器

  1. GP(A/B/C)MUX(1/2)
  2. GP(A/B)CTRL
  3. GP(A/B)QSEL(1/2)
  4. GP(A/B/C)DIR
  5. GP(A/B/C)PUD
  6. GP(A/B/C)DAT
  7. GP(A/B/C)SET
  8. GP(A/B/C)CLEAR
  9. GP(A/B/C)TOGGLE
  10. XINT寄存器GPIOXINT1/2/3/4/5/6/7SEL
  11. XNMI寄存器GPIOXNMISEL
  12. 低功耗寄存器GPIOLPMSEL

最后

不同的书有自己不同学习顺序,我的教程完全按着我自己的认知顺序编写。我的学习方法就是实践中学习,拒绝枯燥学习。完全是兴趣来主导学习,所谓学习方法,其实我感觉每个人都是不一样的,不用刻意模仿谁,做回自己,兴趣决定学习方向才是最重要。

实践最重要,不要空想,想学必然会有学费(所谓学费为学习用的东西等,这些东西不能省)

本代码,硬件连接

再最后

文章PDF版本在这里下载

最后修改:2019 年 02 月 04 日 09 : 31 AM
有了你的打赏,我也是自由更新。