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