找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

DSP28335的GPIO使用

[复制链接]

245

主题

1028

帖子

1921

积分

四级会员(40)

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

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

EDA365欢迎您!

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

x
GPIO通常用来做普通的输入输出,比如按键啊,LED啊,或者芯片的片选段之类的,算是最基本的操作。
# F, s& q+ `5 Q* E话不多说,直接上 代码+注释 记录一下,以备以后使用
( J) v' s9 k. m2 O我用的板子是研旭实用板
+ V+ b1 z# i$ \8 G, ?; C  c
* m, F/ j4 H7 ]' gled.c
6 a- ~9 Y& W% d; C2 J#include "led.h"% |! R1 b, u6 a2 C/ y9 a. p) n4 L: B; z
//LED和蜂鸣器初始化
$ B6 `0 C9 S( g8 k7 p2 R( ~void Led_Gpoi_Init(void)1 S* X% B) Z9 D9 a" j
{
2 s1 Y' ^2 t1 X1 b3 yEALLOW;% @: C1 M# O: }) Y9 i& t9 |
GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 0; // GPIO0复用为GPIO功能
& m: c: Z6 T7 f: @6 p7 UGpioCtrlRegs.GPADIR.bit.GPIO0 = 1;  // GPIO0设置为输出
! G' _2 @- L( a+ u; t, b' nGpioCtrlRegs.GPAMUX1.bit.GPIO1 = 0; // GPIO1 = GPIO1
0 [8 `5 S% V% _# h; k) GGpioCtrlRegs.GPADIR.bit.GPIO1 = 1;  //GPIO0设置为输出' s. `4 Y/ v  r5 p8 w7 R, ]( Z
GpioCtrlRegs.GPAMUX1.bit.GPIO6 = 0; //配置同上/ f6 d5 Z% t2 m7 ]3 I6 ]' P+ i
GpioCtrlRegs.GPADIR.bit.GPIO6 = 1;
. w5 u- @( t) O) eGpioCtrlRegs.GPAMUX1.bit.GPIO7 = 0; //- P/ U* Q3 L7 F/ r, g0 {/ l; ^1 m3 N
GpioCtrlRegs.GPADIR.bit.GPIO7 = 1;; \( e3 m( s: m9 F: W
GpioCtrlRegs.GPBMUX2.bit.GPIO60 = 0; //蜂鸣器GPIO设置,GPIO60复用为GPIO功能; o4 _+ g: P' i) Q/ o% x0 x' B
       GpioCtrlRegs.GPBDIR.bit.GPIO60 = 1;  //设置为输出  e* [- Y9 C( `7 D; R
        LED1 = 1;  LED2 = 1;  LED3 = 1;  LED4 = 1;BUZZ_OFF/ p/ u5 y4 P( H8 r
EDIS;" Z" N  O& y' q7 L( e& [
}
4 s! T2 ]- q3 a7 b. ]3 H9 [
9 ^( z. K7 t5 k) ~) xled.h! Q  j5 f  L- ~' ]5 o+ L
#ifndef LED_H_, C! R& s( _  B, ]- S
#define LED_H_: d: J9 ]# m; I' F

' M8 ?+ O- m$ x( F, [7 f* m! r" [, Z#include "main.h"
, Y  r+ k, |5 b
) w, s, L5 y& `; f) ^8 B//根据原理图,低电平LED亮
  i* ?  x: Y9 l3 H9 E#define  LED3  GpioDataRegs.GPADAT.bit.GPIO0   //宏定义LED的数据寄存器
1 n. Y4 h; i. P1 D+ H, _: g0 R5 u9 Q9 ^#define  LED4  GpioDataRegs.GPADAT.bit.GPIO1( W- y& K% W( X" k
#define  LED1  GpioDataRegs.GPADAT.bit.GPIO6
. ~# N7 c3 B2 I8 o* T4 v! n4 b#define  LED2  GpioDataRegs.GPADAT.bit.GPIO7
+ y2 f  J+ W# E- Q% @$ Z( j) Z) q* \3 u1 [! R& n+ C
#define  BUZZ_OFFGpioDataRegs.GPBSET.bit.GPIO60=1; //蜂鸣器不鸣叫
3 s% l  i( F8 \2 z6 K9 \#define  BUZZ_ONGpioDataRegs.GPBCLEAR.bit.GPIO60=1;//蜂鸣器鸣叫8 I# J) H5 |8 R( f) Y% V

9 d( Z7 u! l; \" u5 V/ uvoid Led_Gpoi_Init(void);
  f/ b) j3 x& C! d
2 G# c" q- Y( g& v, j( I( H0 o" v#endif /* LED_H_ */4 V* ^. u) N* n: J3 N  [* h
& B6 R7 e" u# X- B
key.c
* I: r' H9 N% X/ y: ]5 ~#include "key.h"# O5 _7 U, r) W% e3 Z9 j& \
//按键IO口初始化
: _$ `/ A5 Q! z/ p, Ivoid Key_Gpoi_Init(void)
( t, a! X- }9 e6 U' ^1 H8 V/ n{
2 L& e1 S) _! c6 u, l9 \4 REALLOW;4 r9 I7 ~9 B9 ?) S1 u
GpioCtrlRegs.GPAMUX1.bit.GPIO13 = 0;//按键GPIO设置,GPIO13复用为GPIO功能
+ W& b  @& U# A. Y0 K( q0 m, J. a6 dGpioCtrlRegs.GPADIR.bit.GPIO13 = 0;  //设置为输入4 O7 T. i! n6 s1 [
EDIS;4 _1 |5 [- ?! Q' D" d( ?6 a
}
2 R  k8 N, t; s( k# ^4 N! r8 G
+ t3 d% g1 }# A6 g! {3 o  ^% `# R7 K" W' c3 |
u8 KeyScan(void)
9 ^' ]; Y% Z$ \* O  z5 R{
- N- @* |( k% g' T3 @static u8 key_up=1;//按键按松开标志
7 {% P1 Y8 z4 p9 J
1 d$ t) D" @4 c" h: `4 e5 E+ e7 U& C' Q- Z' @( `* ]# g
    if( key_up&&(KEY0==0) )  //有键按下 ||KEY1==0||KEY2==0)/ r5 N7 O* F' W0 e& T
{# O2 E2 r6 y% @
       DELAY_US(10000);//去抖动( [. e; R" r  K0 {9 r
  key_up=0;     //表示按键没松开2 p- J0 D' O9 b8 k1 a5 P# a! ~$ o
  if(KEY0==0)    //按下KEY0
& X+ g* S2 U0 o; n" g  {, \3 v  X; Z, h
  return 1;: O" c: C# T6 i6 j- i
  }  E; T! {/ `& Q# b( I, U. }) Z
//   else if(KEY1==0)" t% g5 b% g8 W8 M
//   {return 2;}3 E6 G; t) |2 [6 E  Q, a' b, ?
//   else if(KEY2==1)
+ h0 r! |, x% m: R; k! {//   {return 3;}}1 l* u% e8 D& u2 u+ W. h$ j
}; `. F- K* e2 G. y1 }5 Q
    else if(KEY0==1)key_up=1;  //&&KEY1==1&&KEY2==1没有键按下+ j! |* P6 e4 }7 Q8 K. c
   return 0;// 无按键按下1 q1 Q9 {+ @% A3 S
}. K) a, y: w' [3 z

0 s: r/ W, p1 K9 w- F2 O; \key.h
7 |1 N# T5 \. U#ifndef KEY_H_+ B6 ]+ L9 t6 e6 I
#define KEY_H_4 `0 ^. c/ J2 _/ s6 }
#define KEY0  GpioDataRegs.GPADAT.bit.GPIO13
; A1 j( J) z# q. u5 i; ]#include "main.h"7 m# X( q7 H1 t9 @' X

. z8 Y4 G3 G  {) W6 G# ?+ }  wvoid Key_Gpoi_Init(void);
0 H" a( E8 ~- g! Q( ~' A% _; ku8 KeyScan(void);
6 N& P4 M7 q( A4 b* e% l* K
" y  R* D$ t5 _1 N# N3 t4 W0 H, T#endif /* KEY_H_ */
! B! }( z) }6 |/ X" |; f7 ~9 S. D0 j7 r- S, b9 `6 ]- p  a
MAIN.C
* R. Z$ ]2 l( R( D) rvoid main(void)2 e: w; p5 L7 |) M9 {
{
6 b! F, |$ X2 r$ j5 ^    u8 key=0;   
6 {" x. X+ I* s9 z0 K//初始化. M8 h+ E/ a3 s! C! p- |2 w; f
     InitSysCtrl(); //初始化系统时钟到150M,关看门狗,开启外设时钟
4 Z# g" t; n) j! k  @6 M     InitGpio();    // 初始化GPIO到复位状态5 u, g/ A+ R- j, R
7 i+ [3 X6 Y: ~. w( W$ V# B. |
    DINT;              //关闭CPU中断/ m# M" }, x, H& ~1 P
    InitPieCtrl();3 M: s6 b  }+ e' [
    IER = 0x0000;
4 |, d  G4 \6 u! C% @; u    IFR = 0x0000;5 B8 }* R* A# h8 O
    InitPieVectTable();  //初始化中断向量表3 M9 F; o1 O% G

: `# z0 P2 M, W# k( t% N) E" n* l    //外设配置( L9 o8 M5 m" W
    Led_Gpoi_Init();   //led端口初始化
9 Z% J8 s9 I* f  N8 o- P% Y    Key_Gpoi_Init(); //按键IO初始化
( W/ ?- D" ?9 `    while(1)
: Z6 F) w( n* O9 E, R    {* p8 D: k4 e/ b9 H
       key = KeyScan()  ; //扫描按键
$ Z% |* ]7 d! G8 H& m# R      switch(key)        //根据键值来做出不同的相应$ A2 K# E$ N  g' r  d4 ]
      {7 f# h; ^2 l4 S" y6 }
     case 1ED1=0;break;3 U- T/ W& ?8 U! u
     case 2:........ ?+ y/ N" f% L2 L6 L" {! V% H4 X
      .....
& u1 J, B3 ?+ [! ^! h1 ~. K( I5 ]    .......
  _$ M' u) x. K& R    }4 G1 \1 y" U/ a4 ?+ Y
   }/ d* ^% v; M# G. K1 P  l. n% ?4 q
}
* Q1 R+ e+ d5 h5 ]
- x3 X% ]- B5 r- W' Jmain.h: o9 Y+ @# ~9 E/ p+ D
#ifndef _MAIN_H4 |; `; S  h5 K$ g4 ?3 R& e9 d
#define _MAIN_H+ r# b+ ]2 [6 ^
6 x2 `1 ]; r7 w' y+ u1 z
#include "DSP2833x_Device.h"     // Headerfile Include File
# ?! N+ w3 T6 k#include "DSP2833x_Examples.h"   // Examples Include File1 e1 k; t! T2 o$ K

4 w* q: c( H6 e1 x( z#include "flash_ram.h"
% I7 t+ d7 q  G$ d: s+ Q#include "led.h"
. O  l- {; f8 f- }#include "key.h"0 ~- ]: n0 `- W3 o
#include "extint.h"
# ?7 l$ U$ H9 T3 T#include "timer.h"4 s3 b2 X8 x. R0 w4 B, Z+ P2 o6 @
#include "sci.h"
( V" e* W/ r' ^+ ~( O2 h" {$ K#include "pwm.h"
. H0 v1 E$ U& p) |0 _/ Q, R. E' f; e#include "cap.h"
4 A0 R' |- @1 W$ M. E4 f( j6 Y#include "ad.h": I9 S. W. u5 g0 T3 K8 q/ s
#include "can.h"
/ Q( x. K9 w, ~" d) r#include "spi.h"- y/ `: l! O# J, Q. P7 |3 d

2 a! W1 u2 ~4 {9 f8 ]6 J#include "NRF2401.h"' o/ M4 ]& E; Z3 I- a
$ t$ a5 r4 f" h4 _. S# L
#endif2 \2 t6 R+ B7 u5 E- l, B9 _5 S2 U) B
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!

162

主题

614

帖子

1255

积分

四级会员(40)

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

积分
1255
2#
发表于 2016-6-29 10:16 | 只看该作者
感谢楼主分享!!!1 x# s' q& L4 s2 i

156

主题

559

帖子

1202

积分

四级会员(40)

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

积分
1202
3#
发表于 2016-6-29 10:44 | 只看该作者
看贴学心得,回贴是美德6 ?, q7 |5 l5 C2 J$ S- G* H( A" I
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

巢课

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

GMT+8, 2025-7-1 03:59 , Processed in 0.056259 second(s), 29 queries , Gzip On.

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

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

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