| 
 | 
	
    
 
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册  
 
x
 
GPIO通常用来做普通的输入输出,比如按键啊,LED啊,或者芯片的片选段之类的,算是最基本的操作。" c; s! Z5 K. B4 G5 X: i: n7 U 
话不多说,直接上 代码+注释 记录一下,以备以后使用7 L* Z9 L3 u! w( F% I 
我用的板子是研旭实用板 
4 f3 n5 m8 ~5 v3 U6 J, P7 Y3 l% w$ t$ d 
led.c 
2 G& O9 Y0 @' ~#include "led.h"$ z& h) K( P6 E8 B( Q& |# D 
//LED和蜂鸣器初始化 
/ W1 H2 t% _& n: R5 Ovoid Led_Gpoi_Init(void) 
+ e/ D0 _# k$ d' l{/ u' P2 C4 p  h, W1 E# ^3 ~  d; c 
EALLOW; 
5 B# J' Q, j  S- Y! E- d  ]# TGpioCtrlRegs.GPAMUX1.bit.GPIO0 = 0; // GPIO0复用为GPIO功能# H0 }& e+ _7 r! R) k+ c" J6 n 
GpioCtrlRegs.GPADIR.bit.GPIO0 = 1;  // GPIO0设置为输出 
" b/ {  p* Z* [( K/ ?1 [& a1 `GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 0; // GPIO1 = GPIO1$ T% Y1 f# o/ ^# k6 U9 x 
GpioCtrlRegs.GPADIR.bit.GPIO1 = 1;  //GPIO0设置为输出+ E: {0 `* j6 X7 C3 N 
GpioCtrlRegs.GPAMUX1.bit.GPIO6 = 0; //配置同上& [1 e4 W4 i6 }% K! v 
GpioCtrlRegs.GPADIR.bit.GPIO6 = 1;( x' [/ d8 O. l. [! ^, _ 
GpioCtrlRegs.GPAMUX1.bit.GPIO7 = 0; //: o1 R% {6 o% q, K! U 
GpioCtrlRegs.GPADIR.bit.GPIO7 = 1; 
4 ^& k8 d( T) B% W% Z' mGpioCtrlRegs.GPBMUX2.bit.GPIO60 = 0; //蜂鸣器GPIO设置,GPIO60复用为GPIO功能0 |- @4 C6 f, _0 Y. V8 T0 w/ h 
       GpioCtrlRegs.GPBDIR.bit.GPIO60 = 1;  //设置为输出7 l5 Z) p5 l/ M# e+ B 
        LED1 = 1;  LED2 = 1;  LED3 = 1;  LED4 = 1;BUZZ_OFF 
& a2 i1 k$ b: X- v2 v* g7 zEDIS; 
  i6 [& \# R4 J}8 r4 G/ y: B4 T& \+ s- x5 _ 
2 i7 g) b8 u! q# d 
led.h 
4 R: I  @4 @  @! z1 w) E* d' R#ifndef LED_H_ 
* v1 l+ k- J' J* @8 f$ A8 }. X#define LED_H_ 
+ v& n6 ~( t" ]! w% m( O1 D, h. O8 x  `/ V( O) k4 N$ ? 
#include "main.h"% l0 e$ p) d% C7 m 
. t! F, l" d- i! u 
//根据原理图,低电平LED亮 
' Q% u* |) a7 [8 W#define  LED3  GpioDataRegs.GPADAT.bit.GPIO0   //宏定义LED的数据寄存器 
) h% t* d0 E* B  @# c1 R$ \#define  LED4  GpioDataRegs.GPADAT.bit.GPIO1- |) V' ~3 b; z2 H1 j8 h. q+ o 
#define  LED1  GpioDataRegs.GPADAT.bit.GPIO6 
# _# S' U  n6 ]" Y#define  LED2  GpioDataRegs.GPADAT.bit.GPIO7 
# z' x- b' l% ]: A; w0 u, i% q4 X1 [  A 
& Q% u( D2 }2 f& P7 N' r! ~#define  BUZZ_OFFGpioDataRegs.GPBSET.bit.GPIO60=1; //蜂鸣器不鸣叫 
7 a+ \1 s2 M# w/ Q#define  BUZZ_ONGpioDataRegs.GPBCLEAR.bit.GPIO60=1;//蜂鸣器鸣叫& t# f7 H& P" A4 c6 _. } 
 
, U2 _) y; e" J* lvoid Led_Gpoi_Init(void);- `) Y/ \# t( U! B. L 
: s' I% y" D+ q/ Q8 l% k7 N 
#endif /* LED_H_ */ 
5 u+ e" j( a% R7 G: G, g5 A9 x5 e/ S6 e1 j' [% d4 h 
key.c 
% e9 R, e% ^, Y' r1 N, Q#include "key.h"/ q% I, w. I& o 
//按键IO口初始化 
( ], z4 ~: N8 Z6 ]/ V' J0 v$ Yvoid Key_Gpoi_Init(void) 
  [% V9 J7 d! B{  I, i' m* E' P 
EALLOW; 
* m0 ]5 b8 g) v5 ?! E; RGpioCtrlRegs.GPAMUX1.bit.GPIO13 = 0;//按键GPIO设置,GPIO13复用为GPIO功能 
- j' W5 x0 ~' z% H( FGpioCtrlRegs.GPADIR.bit.GPIO13 = 0;  //设置为输入3 U- l# }4 \3 @ 
EDIS; 
4 n: L7 V6 Z. @+ V}7 H6 T$ y1 l4 A5 ~" R5 T  }, V 
 
) t' e+ o/ M8 N6 ]# O. |" d# m# B& Z9 d, C, D" B 
u8 KeyScan(void) 
4 a% v7 z3 x: R# G{/ B$ b" n' h6 X6 k7 ^/ g 
static u8 key_up=1;//按键按松开标志 
5 H+ g* S) [- c0 ?/ J" [# t  S2 T7 A, H) Z7 b8 | 
8 ?6 Y% {6 w" x( l4 c* _. D 
    if( key_up&&(KEY0==0) )  //有键按下 ||KEY1==0||KEY2==0) 
3 n/ q+ b( n1 D& s{% }3 P7 V# I3 D8 ~3 [5 g* u 
       DELAY_US(10000);//去抖动 
- t) Y  H* v6 E4 y# \: \, @) Y  key_up=0;     //表示按键没松开% `7 w) y/ c5 @  U$ G2 ~5 S 
  if(KEY0==0)    //按下KEY06 r  Z& E& x* T8 L( c 
  { 
: u1 q+ N4 x! c  return 1; 
) D8 `- f) P( z2 p7 ~  }2 V) x3 A' |  `) K; B 
//   else if(KEY1==0) 
8 f7 b* U' `5 B0 \% ^! ]7 R3 v//   {return 2;} 
' \- C% [5 C) z8 [+ W- `//   else if(KEY2==1) 
- ]; u  P# G6 S9 _% J% z//   {return 3;}} 
# h* _' t" P  |: }} 
6 C# Z9 g; w# O6 }  D    else if(KEY0==1)key_up=1;  //&&KEY1==1&&KEY2==1没有键按下 
( c% A8 S: C  I" A( X9 a   return 0;// 无按键按下$ n) Q5 s% V* c3 p) _& w 
}* K1 J- h6 v) ^ 
1 p( ^0 U/ a2 w5 n 
key.h7 g2 S5 ]! D, q3 j( m% }0 [ 
#ifndef KEY_H_ 
) e0 v: [# u3 E. {. P3 Z. r#define KEY_H_ 
: x4 s8 b) u( P#define KEY0  GpioDataRegs.GPADAT.bit.GPIO13 
5 W" X4 Y9 r* K#include "main.h" 
4 A: \5 s; S+ L( X) x4 ~% W1 V5 T 
7 f( g3 X3 m* Uvoid Key_Gpoi_Init(void); 
  C- K7 U8 X1 `( uu8 KeyScan(void); 
7 l/ H* B/ f& n- J; m 
) N* G! q5 @- E, x3 o8 L" A% Z) e#endif /* KEY_H_ */. b  `8 Y" J* K 
 
7 R3 M! W) _! `8 \) O. i& f6 m5 x3 UMAIN.C 
1 I3 J0 K1 s' F  B1 mvoid main(void) 
5 R9 ]% B# P# B7 c1 Q8 x{( Z- p9 I& y4 a# S- S/ Z, A 
    u8 key=0;    
  o6 {  r, b$ n/ S/ |//初始化2 `8 ^0 z/ Q3 U 
     InitSysCtrl(); //初始化系统时钟到150M,关看门狗,开启外设时钟 
  p, ]1 K$ b- O3 K2 ]8 i/ a* l     InitGpio();    // 初始化GPIO到复位状态8 i9 ~, H+ k$ i, B+ u6 L7 @ 
2 T  c5 `, m( a3 K& M8 V; U 
    DINT;              //关闭CPU中断 
! T$ M, y$ M2 N' Z# l    InitPieCtrl(); 
1 A6 l  @* P! b2 N% ^: |    IER = 0x0000; 
( K$ v' r8 z2 c( w! s    IFR = 0x0000;+ x% l" c8 i, n5 F+ m 
    InitPieVectTable();  //初始化中断向量表 
5 X7 R  v* a5 ~5 P& T+ n9 } 
/ x: W8 v( H9 b* F9 G: u  f    //外设配置% O3 D3 A4 B& o4 X& r3 C 
    Led_Gpoi_Init();   //led端口初始化6 M8 ?* B) K0 v# c0 @, A! E0 H' M 
    Key_Gpoi_Init(); //按键IO初始化 
) u! j  P: |6 g8 q7 Y% c% R+ N$ k    while(1) 
. w7 c$ {) T+ r8 m    { 
$ [! K- L& M4 M; M9 X8 v6 c, Q       key = KeyScan()  ; //扫描按键9 O$ X6 ]8 \% l% [ 
      switch(key)        //根据键值来做出不同的相应 
& |' N& W8 ]* |; t, E! ?6 `      { 
) |2 k( @4 l" P" t# H     case 1 ED1=0;break; 
; q! p7 x8 ]0 \9 d     case 2:.......6 g8 [# K; Y2 p9 h7 K; h2 R7 s! Y9 ~ 
      .....% J* W% L5 f) t+ ?7 J( L; n 
    ....... 
2 M9 u& w" ]3 |9 u( d/ B6 F" l    }. s8 X* ^3 E! P3 R6 S 
   }' ^& j5 h) k  a& `8 e 
}8 ~! X2 E2 m# D+ Q+ s9 X, ^ 
 
1 i& ?  {" D% \% R8 ]+ o# b5 pmain.h 
- S' c6 d: X1 }% |#ifndef _MAIN_H8 U- M! f. F( ~3 \ 
#define _MAIN_H 
' B+ Z: z9 |) H" H' L2 k/ W: W' a; g% @$ R+ ^8 r 
#include "DSP2833x_Device.h"     // HeadeRFile Include File 
! A# c0 u  O. A3 O3 x#include "DSP2833x_Examples.h"   // Examples Include File 
' K1 o6 w( r7 Q( m, e 
, j9 X  T: G3 \, w#include "flash_ram.h"* v; n9 w. J$ @3 g( S 
#include "led.h" 
* Q0 w' ?. T+ X( ?! N  N#include "key.h"0 D. D8 s  |, I; ? 
#include "extint.h"  B7 J4 d6 Q# D/ ?/ w  P. u 
#include "timer.h"& ^4 L$ J9 M7 [ 
#include "sci.h"* y2 T/ N: S) t/ f* T0 K 
#include "pwm.h"8 w8 k5 S+ |/ N: `5 _0 N 
#include "cap.h" 
1 b4 O2 z: ~, K4 N$ O8 D3 \! A#include "ad.h"9 v; V4 Q5 A: E1 w, I6 U 
#include "can.h"3 v; D# Q& w, M+ u! }9 M 
#include "spi.h" 
' b& _2 G' C& h7 L4 B# N0 }& V, h. l 
: V" M& Z0 S- s3 U#include "NRF2401.h"0 a9 V  F+ Q5 L- S 
 
, o5 {' J& J1 ?( |+ D9 E#endif* \- t; B/ f# E: @+ b0 ` 
 |   
 
 
 
 |