DSP

DSP28335的GPIO使用

2019-07-13 10:25发布

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