[资料分享] 关于28335的GPIO基本的操作

Jacktang   2018-9-21 19:59 楼主
GPIO通常用来做普通的输入输出,比如按键啊,LED啊,或者芯片的片选段之类的,算是最基本的操作。

话不多说,直接上 代码+注释 记录一下,以备以后使用

我用的板子是研旭实用板



led.c

#include "led.h"
//LED和蜂鸣器初始化
void Led_Gpoi_Init(void)
{
EALLOW;
GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 0; // GPIO0复用为GPIO功能
GpioCtrlRegs.GPADIR.bit.GPIO0 = 1;  // GPIO0设置为输出
GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 0; // GPIO1 = GPIO1
GpioCtrlRegs.GPADIR.bit.GPIO1 = 1;  //GPIO0设置为输出
GpioCtrlRegs.GPAMUX1.bit.GPIO6 = 0; //配置同上
GpioCtrlRegs.GPADIR.bit.GPIO6 = 1;
GpioCtrlRegs.GPAMUX1.bit.GPIO7 = 0; //
GpioCtrlRegs.GPADIR.bit.GPIO7 = 1;
GpioCtrlRegs.GPBMUX2.bit.GPIO60 = 0; //蜂鸣器GPIO设置,GPIO60复用为GPIO功能
       GpioCtrlRegs.GPBDIR.bit.GPIO60 = 1;  //设置为输出
        LED1 = 1;  LED2 = 1;  LED3 = 1;  LED4 = 1;BUZZ_OFF
EDIS;
}



led.h

#ifndef LED_H_
#define LED_H_

#include "main.h"

//根据原理图,低电平LED亮
#define  LED3 GpioDataRegs.GPADAT.bit.GPIO0   //宏定义LED的数据寄存器
#define  LED4 GpioDataRegs.GPADAT.bit.GPIO1
#define  LED1 GpioDataRegs.GPADAT.bit.GPIO6
#define  LED2 GpioDataRegs.GPADAT.bit.GPIO7

#define  BUZZ_OFFGpioDataRegs.GPBSET.bit.GPIO60=1; //蜂鸣器不鸣叫
#define  BUZZ_ONGpioDataRegs.GPBCLEAR.bit.GPIO60=1;//蜂鸣器鸣叫

void Led_Gpoi_Init(void);

#endif /* LED_H_ */



key.c

#include "key.h"
//按键IO口初始化
void Key_Gpoi_Init(void)
{
EALLOW;
GpioCtrlRegs.GPAMUX1.bit.GPIO13 = 0;//按键GPIO设置,GPIO13复用为GPIO功能
GpioCtrlRegs.GPADIR.bit.GPIO13 = 0;  //设置为输入
EDIS;
}


u8 KeyScan(void)
{
static u8 key_up=1;//按键按松开标志


    if( key_up&&(KEY0==0) )  //有键按下 ||KEY1==0||KEY2==0)
{
       DELAY_US(10000);//去抖动
  key_up=0;     //表示按键没松开
  if(KEY0==0)    //按下KEY0
  {
  return 1;
  }
//   else if(KEY1==0)
//   {return 2;}
//   else if(KEY2==1)
//   {return 3;}}
}
    else if(KEY0==1)key_up=1;  //&&KEY1==1&&KEY2==1没有键按下
   return 0;// 无按键按下
}



key.h

#ifndef KEY_H_
#define KEY_H_

#define KEY0  GpioDataRegs.GPADAT.bit.GPIO13
#include "main.h"

void Key_Gpoi_Init(void);
u8 KeyScan(void);

#endif /* KEY_H_ */



MAIN.C

void main(void)
{
    u8 key=0;   

//初始化
     InitSysCtrl(); //初始化系统时钟到150M,关看门狗,开启外设时钟
     InitGpio();    // 初始化GPIO到复位状态

    DINT;              //关闭CPU中断
    InitPieCtrl();
    IER = 0x0000;
    IFR = 0x0000;
    InitPieVectTable();  //初始化中断向量表

    //外设配置
    Led_Gpoi_Init();   //led端口初始化

    Key_Gpoi_Init(); //按键IO初始化

    while(1)

    {

       key = KeyScan()  ; //扫描按键

      switch(key)        //根据键值来做出不同的相应

      {

     case 1:LED1=0;break;

     case 2:.......

      .....

    .......

    }

   }

}



main.h

#ifndef _MAIN_H
#define _MAIN_H

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

#include "flash_ram.h"
#include "led.h"
#include "key.h"
#include "extint.h"
#include "timer.h"
#include "sci.h"
#include "pwm.h"
#include "cap.h"
#include "ad.h"
#include "can.h"
#include "spi.h"


#include "NRF2401.h"


#endif


回复评论

暂无评论,赶紧抢沙发吧
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复