|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
GPIO通常用来做普通的输入输出,比如按键啊,LED啊,或者芯片的片选段之类的,算是最基本的操作。6 f8 H9 S2 Q A
话不多说,直接上 代码+注释 记录一下,以备以后使用
+ T2 J u3 @# J: ~; W' U我用的板子是研旭实用板8 g o* h/ V8 C; ~! |1 O- U
- `. k$ h0 Y5 c! A, i! I
led.c) M! o) l" p+ A
#include "led.h"
7 b B2 r' T" ?& L! P6 e0 I//LED和蜂鸣器初始化+ \& [- f0 G: [
void Led_Gpoi_Init(void)* [1 Q. l: x9 ?- Y9 f$ B# Y
{
8 Y" a; \+ a+ r0 M# q6 zEALLOW; h3 Q6 B9 w+ M4 n7 |
GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 0; // GPIO0复用为GPIO功能
# K: I7 r3 g6 Q+ L' N X# `GpioCtrlRegs.GPADIR.bit.GPIO0 = 1; // GPIO0设置为输出2 A- H/ N) `/ L9 ^3 J: e
GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 0; // GPIO1 = GPIO15 N v( I, s5 S2 d
GpioCtrlRegs.GPADIR.bit.GPIO1 = 1; //GPIO0设置为输出
) p% d1 |2 i$ F3 A8 D9 d& XGpioCtrlRegs.GPAMUX1.bit.GPIO6 = 0; //配置同上6 o' P2 U1 B6 ]: [8 K
GpioCtrlRegs.GPADIR.bit.GPIO6 = 1;" l- W0 ~7 z& h# c# H+ ^
GpioCtrlRegs.GPAMUX1.bit.GPIO7 = 0; //- E: z# D# l# M' d
GpioCtrlRegs.GPADIR.bit.GPIO7 = 1;
1 {: u$ u7 x4 v$ S5 \/ eGpioCtrlRegs.GPBMUX2.bit.GPIO60 = 0; //蜂鸣器GPIO设置,GPIO60复用为GPIO功能
' i# {$ ]9 r) i9 I2 z0 Q' G' B GpioCtrlRegs.GPBDIR.bit.GPIO60 = 1; //设置为输出
V6 B2 Y& Q' |; l5 |2 V9 P LED1 = 1; LED2 = 1; LED3 = 1; LED4 = 1;BUZZ_OFF: d- c! e! n8 |2 w/ ^6 D
EDIS;1 K- f. M$ T' o+ N, j& N, U5 V) y( d
}: V* L6 V9 a% ]* d
3 c( s$ H: b8 X( F" K! V$ Nled.h
N3 m. A/ j# S% a) C#ifndef LED_H_
5 n& h7 |$ H. T9 ?3 t! g#define LED_H_
/ w6 {1 M3 P8 s. c
/ B) ^4 p* f5 M) M8 ?" O#include "main.h"
) c0 n; K) e" ?: r% r) k$ ~( \: ~! E, P" x# d0 M
//根据原理图,低电平LED亮" m/ f- F8 L& D
#define LED3 GpioDataRegs.GPADAT.bit.GPIO0 //宏定义LED的数据寄存器
. d1 i0 {3 ]1 Y0 E; L#define LED4 GpioDataRegs.GPADAT.bit.GPIO1
( N7 }! {& E( T7 c#define LED1 GpioDataRegs.GPADAT.bit.GPIO63 A2 t9 H) H! y* L# r8 d
#define LED2 GpioDataRegs.GPADAT.bit.GPIO7+ M' K3 \ X) Q3 _3 S8 O7 M- [9 v
9 b* k8 U w& ~+ [: P% W0 s
#define BUZZ_OFFGpioDataRegs.GPBSET.bit.GPIO60=1; //蜂鸣器不鸣叫) e$ I* M! K& D# M6 t% [) A
#define BUZZ_ONGpioDataRegs.GPBCLEAR.bit.GPIO60=1;//蜂鸣器鸣叫
) [. p* l, {+ J2 g) E9 s
; n7 u6 U. \5 O! l1 |8 C8 Rvoid Led_Gpoi_Init(void);" {5 Y, f+ k5 c
: R2 `% {- w* \
#endif /* LED_H_ */
4 d6 c( C4 c- B: Q
5 l/ _: }! V' k+ Fkey.c1 L7 x3 v, o/ G" V
#include "key.h"( }" P; f C& b* t2 z7 }% f' ?; ]
//按键IO口初始化
" ^7 |2 z. |; t$ u# _void Key_Gpoi_Init(void)
! U8 s- @: n/ q' J$ x% q# T7 @: v{3 |9 F; i# q' t* M2 V$ N$ V$ J5 o' y
EALLOW;, f0 x1 W! b1 U, S
GpioCtrlRegs.GPAMUX1.bit.GPIO13 = 0;//按键GPIO设置,GPIO13复用为GPIO功能, h: r* `+ d+ r, d( [- w
GpioCtrlRegs.GPADIR.bit.GPIO13 = 0; //设置为输入( z. d/ t% U' A$ N2 Z( U, L/ n
EDIS;
$ ]* V1 r7 n6 z( f9 o}
: t9 W3 y4 }, w' o2 d2 z/ \6 U% t3 I8 P! o
+ [! a3 A/ }2 ~ a; Gu8 KeyScan(void) J6 h' [0 N: X
{! ^+ T P; {: I, b: P5 E
static u8 key_up=1;//按键按松开标志( g' I2 @) a; M8 g1 |
9 T, j3 G) @/ O! Q& o
) m1 x: ^% ?) A if( key_up&&(KEY0==0) ) //有键按下 ||KEY1==0||KEY2==0)
( {- [# @7 t1 E{
) X% @& G2 h0 |6 H& V DELAY_US(10000);//去抖动* ^( e# I6 _, Q% \6 P+ d& `% ]
key_up=0; //表示按键没松开% G% n7 W# E' n Z! A
if(KEY0==0) //按下KEY0
* T+ x" y: q% t5 e5 P6 J( X- X | {
+ F$ i( v" k4 [! j/ Q9 J return 1;
; E+ N# i& m- V$ w6 Y }& n8 p; `4 J7 |0 g& ~
// else if(KEY1==0)2 a( N6 N7 K- z z8 t
// {return 2;}
3 j2 n( \: L* J x( x8 |" Q// else if(KEY2==1)" o8 L. @/ w% ]" U5 S t* }
// {return 3;}}
9 h& x2 ~/ \% H7 f8 R}( v @2 e8 n& q+ \) y
else if(KEY0==1)key_up=1; //&&KEY1==1&&KEY2==1没有键按下
8 s0 x$ j8 D$ j& L return 0;// 无按键按下/ l5 g4 @8 f! u& F
}
- R& m! Q0 K- ]
# N: g$ \) U2 K) Vkey.h
( N+ C/ h. @- ?+ ~! I5 j8 i#ifndef KEY_H_+ M8 k+ R, j! m$ y/ q* `
#define KEY_H_2 F; S ]1 k! F
#define KEY0 GpioDataRegs.GPADAT.bit.GPIO13, G; q% E3 Q* K2 X
#include "main.h"' i1 W7 R& q' N+ B
: \% m" |9 w1 {5 H2 z6 u' gvoid Key_Gpoi_Init(void);* W# O2 f3 Y9 f' b
u8 KeyScan(void);, ?8 @# P8 \& q! Q0 r6 q8 l5 N1 z7 O
* X7 q* s7 \; j+ K8 |#endif /* KEY_H_ */
) X+ k, ]% r+ P. u8 i: z6 A6 ^; p. B. |, P$ U
MAIN.C; N/ [) p0 M2 h. e0 }( E2 g5 e
void main(void). ~7 e: V. b; I/ O- ?. A
{* M E, Z; f5 u+ R% d
u8 key=0;
# J; _, c8 q. V* t//初始化& A% ]" r$ t2 p% e
InitSysCtrl(); //初始化系统时钟到150M,关看门狗,开启外设时钟
# r7 q2 R+ V4 k( n InitGpio(); // 初始化GPIO到复位状态6 a" P5 ~7 Z5 p8 M6 s
. E \' v% v& H9 o8 ~# K
DINT; //关闭CPU中断 R3 h* h7 f# w8 n* ^; A
InitPieCtrl();
8 ~. N" } g/ q/ v IER = 0x0000;
# `- j$ a" Q1 ~- n* q IFR = 0x0000;
3 G6 c$ ^8 X- D InitPieVectTable(); //初始化中断向量表
: @) A( P; r) U) I
( O% P/ u. V. H+ S9 w //外设配置
0 f: q# _; B* S. g6 f7 l" b2 B Led_Gpoi_Init(); //led端口初始化6 q- t: y) F9 q2 i* J8 y
Key_Gpoi_Init(); //按键IO初始化
7 U$ K: [# d$ U2 n+ N. {- Z while(1)
! r3 x& ?8 N5 u/ |3 o9 b! c {
& z) o A; n% [$ `/ S- A2 { key = KeyScan() ; //扫描按键
: s) J/ x2 t: k- z* ~9 x switch(key) //根据键值来做出不同的相应3 Z0 l) S+ E* z" \0 C( i
{4 M3 F9 E6 _+ g4 \" F9 D" U$ {& e( u
case 1 ED1=0;break;
6 Y$ V* I* H$ ~; Y* B& Y% c case 2:.......! q% D9 I" i& @
.....1 z: @7 q% e- R/ L, H3 d$ ~, I
....... I0 F6 R: I# `+ ~& [& y2 f
}
/ c9 `7 C$ b5 `6 B8 w }
' u( g" ` w3 O D5 x}1 {) P& G8 x0 U+ D" D
/ y) Y, C; ^+ @: } X" l: N
main.h
+ h$ H& ~! l) @#ifndef _MAIN_H8 N4 z$ A4 n) O) f
#define _MAIN_H
% o. C1 Y3 D/ M# F& t( ~* I# e
% P) s J4 ]" F#include "DSP2833x_Device.h" // HeadeRFile Include File
5 j6 q4 L8 w* N* ]#include "DSP2833x_Examples.h" // Examples Include File
! S* v- }- W9 ^$ z6 v3 R1 \ k7 l+ [' g' H5 c* n: E1 R
#include "flash_ram.h"
5 J% k! u D$ m& T# y8 o1 k#include "led.h"4 l& g4 P; Y7 Y! t8 S
#include "key.h" ?" r% }. I9 t; p- U2 @
#include "extint.h"" _8 | u* A/ z8 c) n" Q
#include "timer.h"
) f. i& X" K1 P1 ]0 Y#include "sci.h"1 O3 g# n" }) _4 P8 X* s
#include "pwm.h"
+ t1 f( p$ A1 D) ~; w3 p' X#include "cap.h") h) t% d& Y9 E7 V" ^
#include "ad.h"
+ T3 q# A+ q- K2 g5 `/ L2 y6 {, J+ r#include "can.h"
4 y1 `1 r* S2 d#include "spi.h") w/ z, }0 o- T* _
$ K/ K; P$ x+ t4 e#include "NRF2401.h"
7 V" `! J2 r `7 N. b) O7 x, W; F4 H; ~8 V0 Z& _
#endif
- w/ y0 G3 S6 { |
|