找回密码
 注册
关于网站域名变更的通知
查看: 651|回复: 2
打印 上一主题 下一主题

DSP28335的GPIO使用

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2016-6-28 14:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
GPIO通常用来做普通的输入输出,比如按键啊,LED啊,或者芯片的片选段之类的,算是最基本的操作。) J9 r5 `. B$ O* ]. l
话不多说,直接上 代码+注释 记录一下,以备以后使用( X$ f3 P* g+ n3 M, N* X2 D$ L
我用的板子是研旭实用板
, v4 c# |, z, S2 z$ `4 S  \! ^) P( V! V" k. g
led.c' b  a: s$ v% D9 |/ T. B
#include "led.h"' Y8 }9 q+ N% ^) H) J* M7 r* F
//LED和蜂鸣器初始化
& y& T% N2 Z4 D. N; W: cvoid Led_Gpoi_Init(void)
6 _/ g- M3 j- i5 Q/ z" c: p{
5 B9 ^8 o1 R3 r" c; g) z/ X0 aEALLOW;$ t8 {  X" M+ f) a/ T$ ~% p
GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 0; // GPIO0复用为GPIO功能4 e. O5 ^4 ~7 D. |. ]
GpioCtrlRegs.GPADIR.bit.GPIO0 = 1;  // GPIO0设置为输出
% u' L% i) d# E; D# \1 v: k9 oGpioCtrlRegs.GPAMUX1.bit.GPIO1 = 0; // GPIO1 = GPIO1: T/ R7 C; k! S0 Z! O$ n  D+ z: [
GpioCtrlRegs.GPADIR.bit.GPIO1 = 1;  //GPIO0设置为输出' t' z* A' v: M! y" E5 H1 E
GpioCtrlRegs.GPAMUX1.bit.GPIO6 = 0; //配置同上
5 w  x0 B  l3 f) yGpioCtrlRegs.GPADIR.bit.GPIO6 = 1;
9 K& [9 H* _8 }9 E$ d1 i. LGpioCtrlRegs.GPAMUX1.bit.GPIO7 = 0; //
/ b, K  h4 Z$ x9 C9 Z. rGpioCtrlRegs.GPADIR.bit.GPIO7 = 1;
3 C+ D' R+ Z* d* T% z7 ~4 EGpioCtrlRegs.GPBMUX2.bit.GPIO60 = 0; //蜂鸣器GPIO设置,GPIO60复用为GPIO功能1 x+ {( J4 {( i2 I; ^6 U  D
       GpioCtrlRegs.GPBDIR.bit.GPIO60 = 1;  //设置为输出
5 X. _8 C! a% Z6 y: F3 N        LED1 = 1;  LED2 = 1;  LED3 = 1;  LED4 = 1;BUZZ_OFF; K% {" Q# M7 v' X/ O% e; {
EDIS;
3 K* E7 @+ h' u}
  K/ N# g9 f4 u6 n3 l
/ R3 u1 Q' s. |) ~led.h% X% E/ t0 J* i
#ifndef LED_H_( j/ A  r/ b3 `: y, U
#define LED_H_
% C* {! _( U1 [, W  ~+ q+ W0 D$ c" k! J! y5 Y7 @
#include "main.h"
& m6 t5 e  d  H( y# r7 G
% {* @) W& T. D, i//根据原理图,低电平LED亮
+ R7 _/ l0 b2 T2 N: F3 @. a#define  LED3  GpioDataRegs.GPADAT.bit.GPIO0   //宏定义LED的数据寄存器! R$ D0 X8 O* u6 m, X
#define  LED4  GpioDataRegs.GPADAT.bit.GPIO1( M0 v7 F. |) q1 R2 m/ G
#define  LED1  GpioDataRegs.GPADAT.bit.GPIO68 d6 Y7 g8 `9 E# F- M0 a/ `
#define  LED2  GpioDataRegs.GPADAT.bit.GPIO7" t, Y& s% u# I! y" A
' g5 b$ ]( M& Y- _% j( `) D
#define  BUZZ_OFFGpioDataRegs.GPBSET.bit.GPIO60=1; //蜂鸣器不鸣叫4 ?* r! B) o+ v0 }4 w
#define  BUZZ_ONGpioDataRegs.GPBCLEAR.bit.GPIO60=1;//蜂鸣器鸣叫, ~- A" b/ S' D( J7 k+ W9 d. D
  b; t6 E2 ~  a% \9 k
void Led_Gpoi_Init(void);
2 M- j% `0 z5 A9 j  Y) z" w8 B$ Z2 y2 n( e' R: M3 q
#endif /* LED_H_ */
3 e5 x7 Y& K8 }" i* S4 \$ n5 [4 z- l, Y* q6 ]
key.c( r# n9 I5 I( v5 W% \' i4 H" c8 D% U
#include "key.h": H  d* s+ O( \- Z4 ^
//按键IO口初始化% H% b  C7 i- s
void Key_Gpoi_Init(void)
% ]: Z0 h) f$ M# V  d6 Z% g{1 t) s) d" b# K+ _; h7 v9 L
EALLOW;. J. H/ i8 A% w- t) {
GpioCtrlRegs.GPAMUX1.bit.GPIO13 = 0;//按键GPIO设置,GPIO13复用为GPIO功能
) r8 P4 q& N  K  o) p+ d5 B8 YGpioCtrlRegs.GPADIR.bit.GPIO13 = 0;  //设置为输入) }6 V6 p. z0 T; ]
EDIS;( \2 k$ H- y/ Q2 a& q* X
}4 f8 l" ]9 J/ J

) Z: Y2 z8 l  e& e' W4 V
# t9 ]* E8 R% i# J, c6 lu8 KeyScan(void): k6 f* {/ b# o
{
5 U; h0 J- @5 o9 E% u4 f) u2 f) ~static u8 key_up=1;//按键按松开标志# S; V+ E8 ?' u, G$ ^
5 d. F( E/ t2 k. ]4 q8 f
4 T" v" E# s8 u& y% c  }, N
    if( key_up&&(KEY0==0) )  //有键按下 ||KEY1==0||KEY2==0)
- R/ C5 m) z$ o( Q0 [{
9 _1 x- K. O/ F8 S& B       DELAY_US(10000);//去抖动& ^! g) y3 r1 N+ q8 b
  key_up=0;     //表示按键没松开7 H; @4 y6 `2 `$ r
  if(KEY0==0)    //按下KEY06 \6 g6 Y/ l' L5 O3 ~( o" w
  {+ k7 x! C5 ~, U) V
  return 1;! y/ y) x3 V: ^/ Q+ V
  }: C- X: s5 {8 T3 b' g9 b
//   else if(KEY1==0)& g; ?/ P' H6 q' X1 F
//   {return 2;}
# X( D4 C/ w5 P0 V6 K3 L, P2 ?- S//   else if(KEY2==1)# l$ r9 T6 ^5 U+ J$ U. r' R
//   {return 3;}}! s; `2 h9 R$ \% h
}
4 l, |& L* R2 l' g) r5 M    else if(KEY0==1)key_up=1;  //&&KEY1==1&&KEY2==1没有键按下# Z. @6 q: z9 \8 i, b/ Y" T
   return 0;// 无按键按下
" I1 L$ q" P. A6 j6 M9 @}$ u% Q# {: S. m

& {, }1 B5 n' p9 v$ _* W/ q8 a3 ^( _key.h- p- q- b, v$ ^, ^) {6 v1 M1 H
#ifndef KEY_H_
9 l# m2 e3 |: O& `6 b) j: r#define KEY_H_
  s! K- A' x; @# B#define KEY0  GpioDataRegs.GPADAT.bit.GPIO132 s, \! `; o1 }0 U: b4 d( m& ?# t5 R1 E
#include "main.h"# N3 P# y& T  T5 j
/ J$ [+ J/ f' z& K( r
void Key_Gpoi_Init(void);
  \/ E8 \8 {! w0 s  N7 ku8 KeyScan(void);
3 f& u  k* l& `  H* X$ E
0 t$ l% c" [+ O0 ~% b#endif /* KEY_H_ */
  t; _4 {" ~, l3 ^/ \
# a3 R7 l; y: c% U) IMAIN.C7 S% X3 `0 J* Z8 c0 W& N
void main(void)7 X* R. D& s" e
{* l. u3 P8 D: j) r2 ?
    u8 key=0;   1 x0 ^7 _7 c, j* w1 K  N  S
//初始化
* j& C' @- e- X/ ?1 y     InitSysCtrl(); //初始化系统时钟到150M,关看门狗,开启外设时钟3 d7 p4 u' W8 G  X& D
     InitGpio();    // 初始化GPIO到复位状态/ A; b, G3 e) s

- C3 e* @2 y8 D/ }) ?; o& Z7 S8 |    DINT;              //关闭CPU中断3 D& J  D. A, W1 m( y1 ?
    InitPieCtrl();
6 y% K# H2 ~5 @; ^9 t  `& m6 \    IER = 0x0000;8 z: F$ ]+ k1 Y  Z: N' H
    IFR = 0x0000;
+ K; [) Z! I+ }7 \/ u' S    InitPieVectTable();  //初始化中断向量表+ N' w( A* C- E0 e- s; q
" t6 @( Z. e  _* H
    //外设配置9 j* c7 e7 q2 Q5 L" X% I, Q
    Led_Gpoi_Init();   //led端口初始化. E- n' D6 a, ?  i
    Key_Gpoi_Init(); //按键IO初始化
6 G" z4 B4 x+ D7 H; J    while(1)/ H% z/ F  o7 Y: [# Q* a
    {
8 x& \5 @& V+ O" e2 I       key = KeyScan()  ; //扫描按键/ `! ^1 H+ N& ?. e! x; D% P! [
      switch(key)        //根据键值来做出不同的相应6 p4 Z* S: G5 K4 {% ^9 Z
      {
! `' r. q7 S- Z+ [* P+ o6 f+ `     case 1ED1=0;break;
: m9 F" ]6 S2 v# D; R0 l     case 2:.......
' H  R. Z" v) K6 }' ]% d3 t      .....
! C1 a7 a' X# ]) y; n( r    .......9 R4 b; J0 w8 L0 @
    }) f, v: ^6 o  q& T& K; P6 @
   }
' `! B2 p0 }  p. ]}
" Z+ D, C+ g) e
, t+ {; e5 [4 M5 N; H7 S" t3 Emain.h
% a& f6 c8 C* k" ]) j1 C9 B#ifndef _MAIN_H
! C; P" @) e+ a. [3 g5 m! T* z: G#define _MAIN_H" w* ^; n# I: D! L$ L% @
4 u% y; y& [7 [6 {: [2 t' m- P8 s) G
#include "DSP2833x_Device.h"     // HeadeRFile Include File
/ F3 }; ]+ d( T! e0 _1 F#include "DSP2833x_Examples.h"   // Examples Include File
+ L4 ~7 E7 B' Y; ?& X5 N6 Z- R& A  z. t( V# \5 r7 ?1 C
#include "flash_ram.h", x1 G2 m; X* h3 }# E9 A6 y
#include "led.h"
* g5 M4 h6 N2 }- U+ x. W: A! c#include "key.h", y& i( G/ m. b6 y
#include "extint.h"
& T" x- X) w: N0 ]/ Y#include "timer.h"
- K" k" T1 z9 d8 h9 V) F#include "sci.h"
$ Q4 s' b. k8 L0 ^- P6 b4 x  J! _8 r#include "pwm.h"/ R, h7 f3 }/ p) R; W9 p* H% N( f
#include "cap.h", ^# z! r9 L; J/ U7 Z
#include "ad.h"
) s8 J$ H3 N! n+ z#include "can.h"6 y$ [% @6 F# n5 N
#include "spi.h"9 S; L5 _+ J" [2 H1 |! s" s
/ r+ E1 S4 b' `* r
#include "NRF2401.h"
% y. e8 H4 r6 I; G+ @; r% E$ [5 @, e% ]9 G5 Q/ k
#endif( y$ O; Z3 d* z3 ~) |3 j  U

该用户从未签到

2#
发表于 2016-6-29 10:16 | 只看该作者
感谢楼主分享!!!  G) q1 v' U- m) v( B

该用户从未签到

3#
发表于 2016-6-29 10:44 | 只看该作者
看贴学心得,回贴是美德
' e4 a9 ~1 u  Y( L; [2 Q* L$ Q
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-7-18 13:25 , Processed in 0.125000 second(s), 24 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表