找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

巢课
电巢直播8月计划
查看: 95|回复: 2
打印 上一主题 下一主题

DSP28335的GPIO使用

[复制链接]

245

主题

1028

帖子

1921

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

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

EDA365欢迎您!

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

x
GPIO通常用来做普通的输入输出,比如按键啊,LED啊,或者芯片的片选段之类的,算是最基本的操作。
6 ]0 `8 g' z( j/ X话不多说,直接上 代码+注释 记录一下,以备以后使用. r2 g/ d1 B% e/ x# U. U
我用的板子是研旭实用板
; ?7 `8 f! k; y, c: R0 s& R' O/ e. u" b! j) h5 H
led.c
, g2 z3 E$ y& V#include "led.h"4 r' V8 c  p9 V  P9 j; g8 k
//LED和蜂鸣器初始化) J$ D, C2 o# i' A
void Led_Gpoi_Init(void); d' z6 q+ q% l. q
{2 L4 ~5 V5 i7 n' [! j" @
EALLOW;
7 K- w/ C7 g+ N4 C; [8 B, p# K, }GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 0; // GPIO0复用为GPIO功能' p! x  X: W( L( h4 a6 D: G
GpioCtrlRegs.GPADIR.bit.GPIO0 = 1;  // GPIO0设置为输出+ ^: l! A4 s0 D- J3 ~0 S. `
GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 0; // GPIO1 = GPIO1) V, I4 d3 ~  B8 h- }
GpioCtrlRegs.GPADIR.bit.GPIO1 = 1;  //GPIO0设置为输出9 s3 i. e; @& T0 q
GpioCtrlRegs.GPAMUX1.bit.GPIO6 = 0; //配置同上
$ F+ W0 q+ b: Z9 X0 }GpioCtrlRegs.GPADIR.bit.GPIO6 = 1;* M/ m# z# G& x, ?$ }+ R5 v, V
GpioCtrlRegs.GPAMUX1.bit.GPIO7 = 0; //
6 {! v2 f! T" a' t  {! j- i9 QGpioCtrlRegs.GPADIR.bit.GPIO7 = 1;
8 I! f; x# {/ h9 ]; n& dGpioCtrlRegs.GPBMUX2.bit.GPIO60 = 0; //蜂鸣器GPIO设置,GPIO60复用为GPIO功能/ n( }& q0 {2 S3 o
       GpioCtrlRegs.GPBDIR.bit.GPIO60 = 1;  //设置为输出
. R, c! B# T3 U9 l4 c/ @9 i3 p        LED1 = 1;  LED2 = 1;  LED3 = 1;  LED4 = 1;BUZZ_OFF( E& m, l6 Y- h$ v0 X1 r6 W1 Z( I
EDIS;- K7 y* s; z) B  v3 L4 P( d
}& o/ K+ S+ Y, [* K. n3 f1 m1 O; C
# M  T! M$ G' Q" Q/ M
led.h6 A" r3 j4 H* g4 O4 v
#ifndef LED_H_. _. M# R  E2 I. j6 K: p
#define LED_H_6 p& K7 V& Y* I5 _; z& E8 T
5 {7 L2 ?5 M0 r& U7 I: N) S- c
#include "main.h"6 G3 n+ A0 D. a! i4 J4 \6 L7 r

; V6 [. i2 s% x4 s//根据原理图,低电平LED亮6 v, I. R9 o( b( [
#define  LED3  GpioDataRegs.GPADAT.bit.GPIO0   //宏定义LED的数据寄存器% c) C4 K0 C1 [
#define  LED4  GpioDataRegs.GPADAT.bit.GPIO1
8 t4 h+ J+ |1 ~5 m4 {4 |3 C#define  LED1  GpioDataRegs.GPADAT.bit.GPIO61 l- d1 I' J2 e4 E4 t% i$ z
#define  LED2  GpioDataRegs.GPADAT.bit.GPIO7
: G$ m/ o8 y1 b! K9 @, M$ L' f, |$ h. W; \
0 c' f6 k0 n* z# n5 d. Y9 P#define  BUZZ_OFFGpioDataRegs.GPBSET.bit.GPIO60=1; //蜂鸣器不鸣叫6 J% ], Q6 P" q
#define  BUZZ_ONGpioDataRegs.GPBCLEAR.bit.GPIO60=1;//蜂鸣器鸣叫5 K( b# }, C1 r+ Z
, v" ^2 |% o4 _0 W
void Led_Gpoi_Init(void);  M: L- A" M* C/ w
4 u; K) _  t  W& ]
#endif /* LED_H_ */
* i' r  Q' u6 l$ {, h! D
1 ^7 n4 X4 j7 j. J0 Ikey.c7 Z9 O6 V$ n  D8 l7 t
#include "key.h"
  b7 L3 r; c5 J0 K//按键IO口初始化
/ [  G! u! F5 d8 N7 Yvoid Key_Gpoi_Init(void)
* \$ S. ^1 o  {  `% U{
. j" e8 t% q9 A  u2 a9 XEALLOW;5 l3 u1 X: z1 N. G0 g+ H
GpioCtrlRegs.GPAMUX1.bit.GPIO13 = 0;//按键GPIO设置,GPIO13复用为GPIO功能
9 a+ ~! `; |+ T( J! s( @: ]9 P. mGpioCtrlRegs.GPADIR.bit.GPIO13 = 0;  //设置为输入
( ~( D) ?& B' _% @9 pEDIS;
( y, L- A) c* R* t}
+ T! s  G- R1 u! W) I; d9 k2 H1 h7 m; \* }7 i
2 a! n" _0 ]+ `+ ]" f% a) m. J
u8 KeyScan(void)
% H# [: j9 e5 r{3 |5 V3 @2 G5 V, Z4 V; X/ W
static u8 key_up=1;//按键按松开标志  R$ ?2 y' J6 z

2 r  T: h: ]3 l* u: K( h. _
! `/ v5 A; P# K! F- S2 y1 v    if( key_up&&(KEY0==0) )  //有键按下 ||KEY1==0||KEY2==0)8 b, b1 P7 _' Y- q9 {' u6 |1 `
{
2 U  J, B! V7 l* d- s       DELAY_US(10000);//去抖动3 a" Q8 Q, f9 ^7 s
  key_up=0;     //表示按键没松开
7 W* U3 h( J( P  if(KEY0==0)    //按下KEY04 o6 D4 o0 D; n$ Z
  {3 j" m! m+ C( E
  return 1;% w, q! ?" A" M! ^
  }
1 g5 O; t* X- O0 Z//   else if(KEY1==0)
8 I4 w9 E0 \0 m6 D! {* |- p7 U# ~  O//   {return 2;}
2 s. G. S+ v! x//   else if(KEY2==1)3 S5 @1 M; V! W6 `  d
//   {return 3;}}3 k5 T- l5 Q- U. l5 |- W+ I
}: A. N, e1 @# @( F1 f5 H
    else if(KEY0==1)key_up=1;  //&&KEY1==1&&KEY2==1没有键按下
2 u& d7 O0 T) j+ e9 I: Y( Y* T; e   return 0;// 无按键按下1 l" V/ d- C- H, Q! ]1 L
}
+ C6 |. v; O* z
& |: S4 c( |8 l  \0 p& Ukey.h! F# G$ y3 _+ J9 \5 y
#ifndef KEY_H_, _1 d# h7 A8 ~8 ]
#define KEY_H_
  }3 Z& H. m4 d# W+ Z! T% e#define KEY0  GpioDataRegs.GPADAT.bit.GPIO13
; m6 ~4 C: B2 Q& ~0 ]8 e0 F#include "main.h"2 o  w8 c. N* d% b, r  w" i
5 Y! E: R. U, ?2 [
void Key_Gpoi_Init(void);
2 {& G9 P4 P8 w$ Y$ ^u8 KeyScan(void);" Y3 Q0 a+ e) U$ c

4 G& l3 O9 \2 q: F- o9 e#endif /* KEY_H_ */: l& o) e' Q! s, S9 r
. g7 E1 ~+ \0 t1 m0 ^% V
MAIN.C
3 X% _# D8 _" H) dvoid main(void)% s1 R) A# X- z% J! m6 j
{
/ J# K) ]: }6 d5 j+ @5 P) h( L    u8 key=0;   : D. u1 [8 L% l* \$ t6 F3 P% |
//初始化
- y6 d8 }5 W$ L' n  `. o     InitSysCtrl(); //初始化系统时钟到150M,关看门狗,开启外设时钟3 Y8 f$ \' G% L% ~
     InitGpio();    // 初始化GPIO到复位状态
. ?0 v) k3 v. Y4 l7 j
9 C5 r/ I' s% A0 E% V" X" P    DINT;              //关闭CPU中断& y% }& o0 R9 i; r3 E
    InitPieCtrl();
$ s; |$ M2 ?& t# d+ R9 e. d3 G    IER = 0x0000;
. p4 z$ h+ P4 F* Y) m! q: _5 g    IFR = 0x0000;
# E% n9 r5 P6 r  ]) b0 F    InitPieVectTable();  //初始化中断向量表
) ]* N8 Z# b; Q
; M$ I. c/ o6 S# ~' q    //外设配置  d% }9 Z0 |, c) K. o' p. Y
    Led_Gpoi_Init();   //led端口初始化
' S& E, j$ F# e9 x5 ?    Key_Gpoi_Init(); //按键IO初始化' L9 p# a! H8 `& s. c2 M" I
    while(1)
' Z% h0 |( w+ w9 @; n    {
* B  i: G$ a5 I# r% w" C* }       key = KeyScan()  ; //扫描按键! q6 [8 ?/ z2 D, w$ E8 d
      switch(key)        //根据键值来做出不同的相应
8 g; d2 {+ i' L; w1 W2 X, l4 b1 h      {
  {/ M$ K% ]  x1 A6 [     case 1ED1=0;break;0 v$ c4 X$ I. J5 K/ J$ v
     case 2:.......
! V9 r7 d3 d- g0 V      .....
. w# `) K9 n7 E- L# U& b    .......
) T+ ~3 I$ F, k. G    }& P' I3 c( x, y
   }
$ O! [  J7 I( z) K+ [% n/ z}
# ^4 |( _0 \8 t2 P  Y+ b( V! P. v' b2 z
main.h% w2 @% r0 i. }) g: ]
#ifndef _MAIN_H! x# ?! r+ E2 _0 c3 K/ j6 `
#define _MAIN_H
/ e% |! t, m, G+ ^6 ~& K' `4 D) C& ~3 F0 J) v
#include "DSP2833x_Device.h"     // Headerfile Include File7 x. d2 p1 m2 D4 ^2 l* Q5 A
#include "DSP2833x_Examples.h"   // Examples Include File5 B% A, o* r* @% Z/ `( Z0 J

3 _" X. p# B% J: z4 Q/ y' j#include "flash_ram.h"
  V. d8 T  P% z' n#include "led.h"
+ c+ c/ Q) K6 e2 O#include "key.h"! _. y# c9 n+ e5 L
#include "extint.h"
1 D' C4 U8 J# M; A#include "timer.h"
5 |2 r2 f" t% i8 |#include "sci.h"
" j9 a: D/ Z0 c" F% T% ~8 ~8 Z. y#include "pwm.h"4 d+ h7 [' s% s* d
#include "cap.h"
8 g( m: g: ], y* ^( w( ~$ @#include "ad.h"
* R! v5 R2 J" c* j# B5 E#include "can.h"
4 I/ c$ K* H- m* q  }#include "spi.h"+ V% |6 ^) P# y1 `1 ~! x

: g% ~) _9 `4 {; Q2 T#include "NRF2401.h"
- Z4 f& {$ K8 Z9 W9 d4 x0 u  m6 S% B' v' d' e0 ?. `; |4 z
#endif
, c' c# j' y9 t1 _
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!

162

主题

614

帖子

1255

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1255
2#
发表于 2016-6-29 10:16 | 只看该作者
感谢楼主分享!!!
0 O! `" r7 r& h: E

156

主题

559

帖子

1202

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1202
3#
发表于 2016-6-29 10:44 | 只看该作者
看贴学心得,回贴是美德# f$ a! v# I4 @/ S" q
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

巢课

技术风云榜

关于我们|手机版|EDA365 ( 粤ICP备18020198号 )

GMT+8, 2025-6-3 20:25 , Processed in 0.055774 second(s), 31 queries , Gzip On.

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

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

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