|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
GPIO通常用来做普通的输入输出,比如按键啊,LED啊,或者芯片的片选段之类的,算是最基本的操作。
6 Z3 E2 c" c+ t. b) r5 R9 |话不多说,直接上 代码+注释 记录一下,以备以后使用
; Q0 R% z8 m0 B我用的板子是研旭实用板; q/ {- X1 h' q
6 R, k. l4 ]2 T/ K8 D- G# S
led.c
& b: `/ C4 K6 }+ Q/ y#include "led.h": U1 _3 K1 U9 @! h; Y, t, P
//LED和蜂鸣器初始化
* r( a5 `) p" U# R5 T# m! I e0 Bvoid Led_Gpoi_Init(void)- d5 y% r5 w$ r0 Z! r
{: ~* C2 m7 s: {/ @, n
EALLOW;+ c0 k" R8 @" R* `
GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 0; // GPIO0复用为GPIO功能; c6 v# S& u6 `6 A
GpioCtrlRegs.GPADIR.bit.GPIO0 = 1; // GPIO0设置为输出$ u0 C4 ~: t8 M& B
GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 0; // GPIO1 = GPIO1
3 S0 \2 p' N2 q7 V- K h, M3 T0 R1 uGpioCtrlRegs.GPADIR.bit.GPIO1 = 1; //GPIO0设置为输出1 d! p: z2 [# I: i8 [* p! _
GpioCtrlRegs.GPAMUX1.bit.GPIO6 = 0; //配置同上4 O0 v1 \. c; h7 Y
GpioCtrlRegs.GPADIR.bit.GPIO6 = 1;& y5 A' @7 T9 l; W9 {- ]
GpioCtrlRegs.GPAMUX1.bit.GPIO7 = 0; //4 q+ K7 m$ \. K5 j( H& U
GpioCtrlRegs.GPADIR.bit.GPIO7 = 1;
% b( L- X# S; v/ F3 G) mGpioCtrlRegs.GPBMUX2.bit.GPIO60 = 0; //蜂鸣器GPIO设置,GPIO60复用为GPIO功能
9 P/ d0 d1 g8 G% ] GpioCtrlRegs.GPBDIR.bit.GPIO60 = 1; //设置为输出# ]% c9 Z5 n5 h4 `( X# l8 r# G( a
LED1 = 1; LED2 = 1; LED3 = 1; LED4 = 1;BUZZ_OFF
# T- y0 E: Q) K) x$ v' P: P3 c- OEDIS;
( j; j- T6 ~% q}1 ^: ]# E; O" P& e6 X5 x `8 X- O8 g
9 y0 K+ {) [) y. h8 y9 c' a
led.h
/ _* W. K1 I' c1 G3 i#ifndef LED_H_
) C( A: Q( _: D- t) Q0 o; n#define LED_H_
8 R9 Q, S5 X2 X: W3 \! g1 P N- n9 c4 T, K1 I8 G
#include "main.h"9 l( g H6 T6 T* V$ @ X$ r" U, y
8 E: Q4 B+ D5 e8 _
//根据原理图,低电平LED亮
. F2 M- t. S& f: a+ [; j f#define LED3 GpioDataRegs.GPADAT.bit.GPIO0 //宏定义LED的数据寄存器5 o7 {6 P) ]1 }# D4 ~, I N1 O- V
#define LED4 GpioDataRegs.GPADAT.bit.GPIO1% H6 `, j! \/ d6 S. H J
#define LED1 GpioDataRegs.GPADAT.bit.GPIO6
2 x, V+ n" D! M8 F' h#define LED2 GpioDataRegs.GPADAT.bit.GPIO7
% x- |5 C( f8 v* \: _
1 l$ G8 V2 y, ]0 f. ^* ?) ?9 H2 c#define BUZZ_OFFGpioDataRegs.GPBSET.bit.GPIO60=1; //蜂鸣器不鸣叫8 v" s7 c) B# y& o3 u: S
#define BUZZ_ONGpioDataRegs.GPBCLEAR.bit.GPIO60=1;//蜂鸣器鸣叫7 y) k ^6 \% y8 m
8 j3 q; A! ^% Y+ M v' r7 i2 |void Led_Gpoi_Init(void);
: j6 R+ w2 ]9 r/ V( x9 M: M
. I7 V6 ~ y) [#endif /* LED_H_ */
' f) V5 \; @7 J0 t# u: P9 m, f& F: D: A: z3 Y5 d
key.c' ~7 G0 n# `0 z0 K) P3 x7 u! h& _
#include "key.h"
5 k/ Z, l4 ?) x$ u: {; C//按键IO口初始化
5 h+ ?8 N5 Y* J; c2 `void Key_Gpoi_Init(void)9 f; h$ w4 @/ ^9 i) m2 ~3 k
{( n! ^2 ]% X- L% J' v
EALLOW;, N+ e- X6 m' [0 w
GpioCtrlRegs.GPAMUX1.bit.GPIO13 = 0;//按键GPIO设置,GPIO13复用为GPIO功能
) K" B" b" }' u6 @3 g1 p RGpioCtrlRegs.GPADIR.bit.GPIO13 = 0; //设置为输入
! O$ ?# Q/ C9 B0 CEDIS;
/ Q( l2 _# A' W2 |3 m& r. R. x& p0 x}/ T4 D! n/ e( ]/ @3 c* q
Y% W: _' J$ a8 I/ v
8 v: L3 i2 b( E) s+ Du8 KeyScan(void)3 u( M" J2 ?& d1 }
{) E; _5 G' x1 c' r W
static u8 key_up=1;//按键按松开标志
) T5 }" \$ s3 Y
* L9 o8 ]+ _4 U; P/ P0 q" S! B' Y2 ~) s
if( key_up&&(KEY0==0) ) //有键按下 ||KEY1==0||KEY2==0)5 }7 a3 v6 N& y- K; ]7 Z
{9 K: P+ }# e) d r# v+ h% _$ I
DELAY_US(10000);//去抖动7 k. t$ q4 Z1 u1 W3 w! {5 k, K3 z
key_up=0; //表示按键没松开+ x M* `4 I9 [. r
if(KEY0==0) //按下KEY0
8 t% p% f$ [1 _0 ]$ m {
' y F3 V7 }4 G+ T4 r# { return 1;
( F y8 c) b5 i+ m3 x+ [4 H6 ] }. K }. G) A- G( a; L* P! ]% G
// else if(KEY1==0)
0 S) W, I* }8 M! l, I" E0 L: ?// {return 2;}1 W7 F7 G; w2 w/ ~
// else if(KEY2==1)
" h+ e7 {, \) F# `0 t6 }- h3 }' t) w// {return 3;}}' v: ^& D: h+ ^# `- J
}, d1 K4 O- z$ T
else if(KEY0==1)key_up=1; //&&KEY1==1&&KEY2==1没有键按下: o9 q" o8 I8 \- R' P, C8 ?
return 0;// 无按键按下+ j' I! m$ d @$ K8 [3 m5 z& @
}( v m: Y" t$ P- N# N3 R& V
0 Y+ J/ [$ k/ y% l$ M
key.h5 ]6 \5 ~ U; q% `# _8 _3 r6 E8 C
#ifndef KEY_H_
( l- f8 d) p/ w) V# D#define KEY_H_: F* m0 @ r+ y$ n# k
#define KEY0 GpioDataRegs.GPADAT.bit.GPIO13
: u+ F1 E' N: c. _#include "main.h". r/ \& r" V6 f7 {, E
7 @6 k8 o, r( c9 f* L/ Hvoid Key_Gpoi_Init(void);
4 I9 m' X: l/ i E. f: Ku8 KeyScan(void);
1 c' x( A2 K. n/ n) a
b3 g( u' X8 C- e1 X2 b1 z6 a#endif /* KEY_H_ */ r& `; l9 O; Y, ~3 o7 W
- C% w. ?4 x9 ?. W7 z: l. K$ h
MAIN.C
. B# F/ _: s7 ?void main(void)
7 y: }& x q- A X- q! L{8 U# Z! K! R- l/ f& ^: N8 D, F
u8 key=0; ; f$ u7 W3 D% D4 r3 E
//初始化1 w+ [( Y5 `* a* }/ p
InitSysCtrl(); //初始化系统时钟到150M,关看门狗,开启外设时钟1 L0 ]# R; y9 @
InitGpio(); // 初始化GPIO到复位状态8 G2 b3 _) {" b5 M
8 K- F# I+ I( F" Z- T4 B DINT; //关闭CPU中断- v( X: V* x+ E# |
InitPieCtrl();
1 e$ H, I$ Y% A! m IER = 0x0000;) q8 [$ h; s, C# i! L. L
IFR = 0x0000;% B5 P! [9 S! Y; E( [& r3 @- c
InitPieVectTable(); //初始化中断向量表
1 v' a" P' H0 j0 |
* F% v; `9 r1 i/ L/ |1 S //外设配置/ r8 K& u) y9 }, B
Led_Gpoi_Init(); //led端口初始化
4 M! L2 `/ ?/ n5 S0 s/ U Key_Gpoi_Init(); //按键IO初始化6 F7 g) n6 Q2 e6 d/ a+ Q0 S3 j6 R" P
while(1)( r* q' z3 @3 m0 `
{
( }& q. W7 {/ l# T- @5 c' v2 t3 m key = KeyScan() ; //扫描按键
' a) x. [% R# |& z9 C# y switch(key) //根据键值来做出不同的相应
1 A1 ~ h- a2 b {
1 c2 T7 }" {! F" k case 1 ED1=0;break;8 s1 W" f; w) N0 ]. w; O$ q( Y
case 2:.......8 s: P& n& E F, X. b
.....
# o* O/ Y' O6 i( I# l0 C .......
, H( d3 c! c+ e% K" J }' x" j3 D- k# _3 l; Q) Z
}. z1 O" e5 k; `' S
}6 O1 E3 o0 |- x3 e
* M/ A: ~- X1 [$ p) ]! J8 C l
main.h1 p, |- u" L( _! h7 z# A/ h
#ifndef _MAIN_H
9 j3 J+ f! w& X1 b8 K; ?: W. I#define _MAIN_H$ M: o6 _+ ~# \' i
" u! h# J7 W0 w$ K8 k6 i5 C#include "DSP2833x_Device.h" // HeadeRFile Include File6 e9 K# E" O" ~* ^6 x) T) i3 c1 {. J. z
#include "DSP2833x_Examples.h" // Examples Include File
, p( v* T+ U; Z% [. E- i3 U3 q4 I4 |. K" _% S* B# c8 |# d% U
#include "flash_ram.h"
; u( ?/ j9 f( G: U#include "led.h"
+ T5 e b- K) H! O% d# d9 z. J# ]#include "key.h"
& P9 o; \0 ~6 ~6 ]#include "extint.h"
. `0 u; |' c+ D3 J% y#include "timer.h"
9 J* A3 v6 A+ O, V#include "sci.h"
/ m$ @& {/ t1 y#include "pwm.h"
' W- x. f% d5 d6 T0 o& c! @! f#include "cap.h"
% N3 X: U. o" {+ D4 K, l7 B#include "ad.h"# M0 i' H, i* r$ I
#include "can.h"' ^. t, |/ Q+ G z3 }8 k: k' ?9 g* `
#include "spi.h"- O+ V7 Z& ?( E6 n+ F
+ x4 [2 H$ | U- F6 M2 `#include "NRF2401.h"
) Q$ B3 n/ F( y
+ Z( }' N2 g$ K: ]) c) P#endif, V5 B1 c& S- O/ x2 D
|
|