|
EDA365欢迎您!
您需要 登录 才可以下载或查看,没有帐号?注册
x
GPIO通常用来做普通的输入输出,比如按键啊,LED啊,或者芯片的片选段之类的,算是最基本的操作。( }' J* _3 ]! T
话不多说,直接上 代码+注释 记录一下,以备以后使用" v# |% ]. y; G; B4 C
我用的板子是研旭实用板
% G/ B! U3 c2 M9 n; J
* k$ X" r8 s) l6 O9 x0 X& Mled.c
+ S6 ^* B* @3 Q- M0 j! n8 _#include "led.h"
2 |$ a* j1 U+ T I- N7 f//LED和蜂鸣器初始化4 g# B6 \. @1 C( v, Y
void Led_Gpoi_Init(void)
; y0 U5 D8 R: L{
# N# u( o4 Q5 e0 c; `% ]% JEALLOW;
$ o* g4 _/ L5 O) b( r5 z1 KGpioCtrlRegs.GPAMUX1.bit.GPIO0 = 0; // GPIO0复用为GPIO功能
' E% P% J/ b; i( H) MGpioCtrlRegs.GPADIR.bit.GPIO0 = 1; // GPIO0设置为输出
' h% t M$ B4 K6 LGpioCtrlRegs.GPAMUX1.bit.GPIO1 = 0; // GPIO1 = GPIO1- z1 M. F2 X, M; h
GpioCtrlRegs.GPADIR.bit.GPIO1 = 1; //GPIO0设置为输出: |6 w0 t& t! v1 A$ R0 Y' n
GpioCtrlRegs.GPAMUX1.bit.GPIO6 = 0; //配置同上8 J2 v$ |; t3 P1 ]) e
GpioCtrlRegs.GPADIR.bit.GPIO6 = 1;1 I% v" B9 b: O: m
GpioCtrlRegs.GPAMUX1.bit.GPIO7 = 0; //
; F' O5 z3 q8 Y# z1 n- m( jGpioCtrlRegs.GPADIR.bit.GPIO7 = 1;
& T' |% H- b/ R8 C9 {8 qGpioCtrlRegs.GPBMUX2.bit.GPIO60 = 0; //蜂鸣器GPIO设置,GPIO60复用为GPIO功能
; T: k1 E! A. L! n# r GpioCtrlRegs.GPBDIR.bit.GPIO60 = 1; //设置为输出
% q6 \9 F. R. N7 X& i2 Y0 A LED1 = 1; LED2 = 1; LED3 = 1; LED4 = 1;BUZZ_OFF
) E$ A8 w/ c( `6 s' ~- M5 FEDIS;+ l) F% ]+ z/ G& T5 Y n- L
}
; @0 f! F5 p, R( J* Z$ A' j7 L; Z7 m2 A
led.h) K* r' m- y3 e) g6 A7 d5 h$ V
#ifndef LED_H_' r w% t3 ` o6 n- s
#define LED_H_& ]5 R$ R" M' N! U
4 J* w {4 p7 g; w4 u$ H
#include "main.h"9 N( S( B! o+ z6 E9 S, U% p8 s5 k# r
. T( P1 w5 G3 q' K
//根据原理图,低电平LED亮- _2 G3 c( v* Q, }, Q7 m+ ]
#define LED3 GpioDataRegs.GPADAT.bit.GPIO0 //宏定义LED的数据寄存器) K# Z6 T1 T0 I0 R
#define LED4 GpioDataRegs.GPADAT.bit.GPIO1
* P2 B7 s# p7 \#define LED1 GpioDataRegs.GPADAT.bit.GPIO6/ o0 l! r6 ?0 O% ^
#define LED2 GpioDataRegs.GPADAT.bit.GPIO7
( r: _' h3 R; q/ r( p# l4 M: i: J1 C, F$ ~" }: b
#define BUZZ_OFFGpioDataRegs.GPBSET.bit.GPIO60=1; //蜂鸣器不鸣叫
* f9 Z6 {0 r5 ~- S, A% |#define BUZZ_ONGpioDataRegs.GPBCLEAR.bit.GPIO60=1;//蜂鸣器鸣叫/ ~2 H' D4 q$ k! n9 ~, b" E
% Q7 X* ]4 Q" _0 w$ C
void Led_Gpoi_Init(void);
+ i1 b; l; }" Q8 A4 g& ]7 H
- O5 e! ?8 z- c" V A#endif /* LED_H_ */- R( P" S; l0 d: H! A! H3 y
5 s; L. G6 f- h9 ~key.c {# N# h* |! g7 n
#include "key.h"% h3 c; g e: i5 ^2 G
//按键IO口初始化
2 ?! E# n9 a8 r0 q6 f& yvoid Key_Gpoi_Init(void)
4 @# u) |- Y* t8 G{8 A6 I4 q0 I" E- z+ W8 z% z
EALLOW;
+ g9 q) v7 G8 ~* x8 i6 hGpioCtrlRegs.GPAMUX1.bit.GPIO13 = 0;//按键GPIO设置,GPIO13复用为GPIO功能+ p. H% ?. q/ O5 }- f
GpioCtrlRegs.GPADIR.bit.GPIO13 = 0; //设置为输入
0 |. `* ]) K, C M7 s( a+ U+ X. U/ nEDIS;9 H1 @0 f$ Y* W& T/ E- r/ `
}" P- d' O- F, v3 X' Z
' M' _9 ~: J3 }& a0 {* u
. b8 A# V2 F' v: uu8 KeyScan(void)
9 ]5 O3 n- o2 ^7 @/ Z{
$ ]* k' X1 y/ i& D# E: istatic u8 key_up=1;//按键按松开标志' c( Z0 r* w) u4 o* e: G1 s# a
{+ C7 T5 i/ a1 y* `
' F/ \' H/ H8 W5 |9 L if( key_up&&(KEY0==0) ) //有键按下 ||KEY1==0||KEY2==0)
5 A3 b* u( ^5 q M{, n. b- K, @- Y5 g; ]' k' e+ {. `
DELAY_US(10000);//去抖动
g& _1 c; J+ Y3 d6 M2 a, R1 w9 X& i key_up=0; //表示按键没松开+ d8 ^& T" H/ k/ {5 U
if(KEY0==0) //按下KEY0
9 e# k9 E/ L0 G! K4 d# ^ {/ Z$ t, B2 c7 M; q+ Z; d, \" ?
return 1;
7 U$ j8 E( f+ f2 W u+ i }& y0 i8 ^- I3 H! `
// else if(KEY1==0) @/ v8 l9 F- t/ d( H2 }! \# U
// {return 2;}( I1 Q" s: D3 v( m
// else if(KEY2==1)5 V+ w' F) }9 T2 X$ }% F
// {return 3;}}# @9 }8 K9 k" I7 z$ y0 S p' w
}
8 G: [! L! `, y3 @9 @ else if(KEY0==1)key_up=1; //&&KEY1==1&&KEY2==1没有键按下% E/ {1 G0 X E5 S9 w
return 0;// 无按键按下; q* M* h+ s2 b$ \1 N/ Z! J* }5 d. U( J
}
2 `! W# q% P) s8 f8 |' b: l! w; D$ N" f9 N# D+ z
key.h* e( D+ ^" _' `2 \! h
#ifndef KEY_H_
$ F6 X$ }7 i. |5 u#define KEY_H_$ w" r% {+ r8 r* r0 q7 _7 U
#define KEY0 GpioDataRegs.GPADAT.bit.GPIO133 N1 e- P' h8 u0 H( w" a, K
#include "main.h"
: C5 ?) g; w: C* k% z* F) j/ Q/ P$ v* e8 x E5 U- O
void Key_Gpoi_Init(void);* c% k& }5 m! n8 u8 ?
u8 KeyScan(void);, P ]% E; a x
) }' ^% J7 X! o+ ^6 w+ l$ @#endif /* KEY_H_ */
2 H7 T) I4 r( y) u, t0 G
, X: q9 |' x; o M* z. zMAIN.C6 X( `8 y5 j9 d- O
void main(void)7 Y2 l9 l: B6 T0 [! V* r( J* X
{
/ m- Y! _6 {0 _+ ^8 Q( P# ~1 | u8 key=0;
" C) S/ J$ t, f9 l; j9 e0 R0 x" l//初始化
( m' v F! E' K& S! x InitSysCtrl(); //初始化系统时钟到150M,关看门狗,开启外设时钟
0 R2 c7 \& C: b; O0 P# S( X2 d5 _ InitGpio(); // 初始化GPIO到复位状态- l( v& |) Q; @1 o7 k* ?
- y. Z' ?) x" ]9 a DINT; //关闭CPU中断
) p4 n! I2 k; ]' G) W) g' i9 W2 a* N2 M InitPieCtrl();* i: h0 A h4 ]! _
IER = 0x0000;8 {3 ~; T8 [3 t" G( e* g+ u; {' k
IFR = 0x0000;
: [, d4 I2 G0 G, s# A; {6 t InitPieVectTable(); //初始化中断向量表
' d9 |( I A/ I. d
; @- e# Y0 S. Z* }& u: l* ? //外设配置
, b* Y) W( [# D, C1 y- i Led_Gpoi_Init(); //led端口初始化
2 k/ P9 c, Z; I9 [ Key_Gpoi_Init(); //按键IO初始化
( Y7 l2 z J B. @ while(1)2 b# X* y3 B* r% z
{
3 W( [% R( e0 Z, h% M' |9 G key = KeyScan() ; //扫描按键
. V8 }* [. d% n switch(key) //根据键值来做出不同的相应
& Q3 o" p+ g; y' C. p {2 [" w. V$ d4 m" k7 i/ k% A
case 1 ED1=0;break;
! T6 ?9 m6 M6 ]# @$ |0 H case 2:.......& T% Y+ g( G! o& w, {
.....
* t# Z/ @' e$ d1 e( f ......., {, \( E) u& O
} H/ v6 v: p! m! ^# @* Y& h% n
}
/ [6 ?8 y2 o$ o2 W# ]}/ n2 _, n& ?9 ]- E, `9 z' c& {
M0 E( |7 ~& [' J! D! Z% X3 @8 e0 w
main.h/ I$ \' c8 L+ E, n5 \
#ifndef _MAIN_H9 t8 p I+ l" g0 n# |
#define _MAIN_H' `' M1 d0 N0 z5 B
" v. ^5 U' p3 w1 v& X
#include "DSP2833x_Device.h" // Headerfile Include File
+ D# Y% U9 r4 q#include "DSP2833x_Examples.h" // Examples Include File$ D. w4 y) w$ I* o
; ~* V) k' B% o0 L/ `
#include "flash_ram.h"& G. B* b {4 S5 R6 ?6 p. n7 A
#include "led.h"
* p& M9 `. \9 F- X- R2 X$ p#include "key.h"5 @) b/ z8 J1 D+ A* Y" F, `% a3 m$ D
#include "extint.h"+ w, ~* n5 q/ F. m7 H
#include "timer.h"0 U4 X, `/ Z; I& N* }3 C* f. C
#include "sci.h"
3 _& j( j1 x3 H" N#include "pwm.h"
5 D2 E/ [ H* U+ r2 V6 ~5 I! ?#include "cap.h") @: z+ `% N: |/ ?) a
#include "ad.h"/ Q8 t0 J& j) z( K: b
#include "can.h"" J& y+ Y0 F1 j& g. }
#include "spi.h", Z" I8 \* ^- B1 m" \) B1 g1 }
% T% N! `$ p$ m& A0 V* u
#include "NRF2401.h": K8 ^. O y. S! y8 H
" o! Q. u1 F) l: ~#endif* I8 }& H* k9 Z4 a# w
|
|