找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

DSP28335的GPIO使用

[复制链接]

245

主题

1028

帖子

1921

积分

四级会员(40)

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

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

EDA365欢迎您!

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

x
GPIO通常用来做普通的输入输出,比如按键啊,LED啊,或者芯片的片选段之类的,算是最基本的操作。
: I# }) h; l; z话不多说,直接上 代码+注释 记录一下,以备以后使用8 D& M" J) d# l- U; A  k' H- O  T
我用的板子是研旭实用板
" ]! y; |2 t# V- Z5 ]6 c( l4 i
led.c: d8 l% W4 p$ K4 _% T
#include "led.h"
% i& t* O% J* L//LED和蜂鸣器初始化2 b! q, z/ l! w& S7 |
void Led_Gpoi_Init(void)8 L8 {  a* R! a6 J: P
{2 L6 @. W# v2 k' W" z
EALLOW;4 |4 k7 M9 X: q2 T0 b  w
GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 0; // GPIO0复用为GPIO功能
" F* W: b" T5 Q5 Q; jGpioCtrlRegs.GPADIR.bit.GPIO0 = 1;  // GPIO0设置为输出
/ z7 k& J$ Y3 ~9 \$ nGpioCtrlRegs.GPAMUX1.bit.GPIO1 = 0; // GPIO1 = GPIO15 i% s4 x  r9 O
GpioCtrlRegs.GPADIR.bit.GPIO1 = 1;  //GPIO0设置为输出8 e5 c% ~* g4 r( b7 r- ^! X3 X3 x# T
GpioCtrlRegs.GPAMUX1.bit.GPIO6 = 0; //配置同上5 q& j, z0 |/ z, Q2 q
GpioCtrlRegs.GPADIR.bit.GPIO6 = 1;
# t& y. F& g3 m! k; ZGpioCtrlRegs.GPAMUX1.bit.GPIO7 = 0; //
7 d) l6 l3 K8 }; b& e! D4 oGpioCtrlRegs.GPADIR.bit.GPIO7 = 1;
7 V+ J! N$ k+ I: {GpioCtrlRegs.GPBMUX2.bit.GPIO60 = 0; //蜂鸣器GPIO设置,GPIO60复用为GPIO功能
. w- f5 V' A- [* q0 m0 X8 C       GpioCtrlRegs.GPBDIR.bit.GPIO60 = 1;  //设置为输出
& T+ f9 Z( K! E$ N        LED1 = 1;  LED2 = 1;  LED3 = 1;  LED4 = 1;BUZZ_OFF# l8 l4 @% w& {
EDIS;
2 _9 y8 c& S2 p2 [6 R}
& k! V" w9 g+ U/ y
# ?  c* }! K* b1 n( l; _led.h- {& G# z" ~- n8 \1 Y( T8 }6 ?
#ifndef LED_H_
9 Y, W! `& F6 _  b. ~1 E#define LED_H_0 |8 g1 W1 u) t7 `+ S! m

. v# C3 t6 z2 p4 {+ ]#include "main.h"
, T- @9 U: k, m5 M& v8 Y2 s! }: X" N# m) W
//根据原理图,低电平LED亮: s. \5 W" Y3 U+ B, l- [; |
#define  LED3  GpioDataRegs.GPADAT.bit.GPIO0   //宏定义LED的数据寄存器
! u* @/ W( q. q  b# l' Z  H#define  LED4  GpioDataRegs.GPADAT.bit.GPIO1" L) C: j& D% t9 c+ x& E- i( @
#define  LED1  GpioDataRegs.GPADAT.bit.GPIO6. Q& R' x) Y& K; r  u) ^1 n2 ^/ C
#define  LED2  GpioDataRegs.GPADAT.bit.GPIO7
" e6 q9 H# y# m
+ U' Y- y* U. ?" p3 ^* x- Y#define  BUZZ_OFFGpioDataRegs.GPBSET.bit.GPIO60=1; //蜂鸣器不鸣叫9 G' Q  j$ f! v. O8 A
#define  BUZZ_ONGpioDataRegs.GPBCLEAR.bit.GPIO60=1;//蜂鸣器鸣叫  b/ I  B5 c& f2 \1 m
. w6 S+ `/ S" W! ^9 }4 t# A+ _
void Led_Gpoi_Init(void);0 Q# J0 n! Z9 L" O2 G3 u& G6 K

" [% Y0 a, W+ B3 T#endif /* LED_H_ */
' l( L& F% i: u, X% \0 [
- |2 s) n! V* Z/ T; z. L8 D0 \key.c. O2 Z  R- z3 w" ^9 u
#include "key.h"
/ h( D! H+ T+ j. f! c2 A//按键IO口初始化' I# d8 D* @% |7 K1 M
void Key_Gpoi_Init(void)2 Z2 k! z* C6 t2 E' R' U3 Y! D( b- J
{
2 b* ?: U, T: K5 AEALLOW;
1 R8 u' V  x0 F: LGpioCtrlRegs.GPAMUX1.bit.GPIO13 = 0;//按键GPIO设置,GPIO13复用为GPIO功能
) O& A, S9 [9 q  v' ZGpioCtrlRegs.GPADIR.bit.GPIO13 = 0;  //设置为输入
3 D" H8 t/ C) BEDIS;; p. q( O% Z/ X; |. E
}% j3 X4 X2 O: j' I$ J5 F; B0 g* G  H

0 U, e/ G8 \- W/ U4 w* ?% m: j0 d
7 |# V- K, t5 au8 KeyScan(void)) s$ s( T9 X, i
{5 s7 ?' J7 I1 b8 X6 b, ]3 m* d
static u8 key_up=1;//按键按松开标志
2 g' I: D& e! u0 E/ N  V/ P
. b8 J: N# X* P1 \% _  V; H& h. Z! U6 Y
    if( key_up&&(KEY0==0) )  //有键按下 ||KEY1==0||KEY2==0)
9 T, z9 A$ A! k" F) y, F8 C{
* z2 P& k6 v9 o. {" G       DELAY_US(10000);//去抖动) x' b: i( G4 m  h
  key_up=0;     //表示按键没松开' e9 v' ~, y2 C& ?5 `
  if(KEY0==0)    //按下KEY0
6 k. E+ {/ L4 \7 f5 O" g  {% H0 Q- A" a9 m8 }* l% n5 W5 Y
  return 1;
) g. i/ `- k; l  }. `9 V( `& ]( b' l
//   else if(KEY1==0)$ P( ~. O% h7 W1 i- z: [' D) F; a
//   {return 2;}4 ~% [' y- Z. B6 J" ^$ ?3 |
//   else if(KEY2==1)4 |4 G" W* D  E$ H
//   {return 3;}}5 N# _; ~  V; V; T. A6 K
}
  Y7 y( E+ U8 S3 q    else if(KEY0==1)key_up=1;  //&&KEY1==1&&KEY2==1没有键按下  F) D. a; E6 z$ j, g
   return 0;// 无按键按下
# v1 p3 ?* r; x}1 E8 s3 k! `6 V: @! \

3 I1 z$ W3 ~* L* s" g# Vkey.h. E9 d& ^  s. F) O! g- t
#ifndef KEY_H_7 ~% R( v9 f# T+ z* ?
#define KEY_H_" E, H# \+ x( M: z
#define KEY0  GpioDataRegs.GPADAT.bit.GPIO134 A4 ~3 Y, `; k4 w
#include "main.h"
+ }$ e# G0 i9 t6 d+ q( R2 ]) i# y) m
void Key_Gpoi_Init(void);
7 {' G7 a  M4 `; D3 Nu8 KeyScan(void);" ^5 v; p1 F) f' [- o% E" q
/ l' W. r& T# i8 ~9 W" }
#endif /* KEY_H_ */
) g* b% f+ M. C2 D. }7 S9 u& V. K+ X* Z; D# d
MAIN.C
/ Y- P7 ?/ }/ x+ C: bvoid main(void)
) y% E0 ^8 c/ Q1 u) Q{0 o4 P3 s7 |/ x
    u8 key=0;   
- L- x: P/ I. c3 [; o4 k//初始化
: V; i4 r9 `% J" y     InitSysCtrl(); //初始化系统时钟到150M,关看门狗,开启外设时钟
% o) @$ g+ N& n     InitGpio();    // 初始化GPIO到复位状态! L0 w- ?2 I8 R8 Q3 t: i4 W. ~
( Y/ }% |2 m% f2 c5 {) j* L
    DINT;              //关闭CPU中断
$ k7 ~  q# c- O    InitPieCtrl();
7 {/ s  h# p& a6 D* W    IER = 0x0000;
* Y4 I- O9 A# ?( c" s' O    IFR = 0x0000;& m$ _7 P' e9 a. r! o# R2 S5 y
    InitPieVectTable();  //初始化中断向量表
* X, W" z+ w3 L( z) L  @
# w. g& v0 O8 @3 O/ i    //外设配置3 A4 N! o% C: q! P
    Led_Gpoi_Init();   //led端口初始化
  X4 t! @9 }3 s. r    Key_Gpoi_Init(); //按键IO初始化% O! @# |' o3 f% P3 [% Z3 Z9 e0 _
    while(1)
4 ^% l& H" M& f+ Q4 t+ t2 O    {
3 r8 z+ ?" j" m) p6 @" }0 K       key = KeyScan()  ; //扫描按键
7 d& R6 {3 ~5 y* X0 v6 R      switch(key)        //根据键值来做出不同的相应/ J) e5 ]( c: D
      {+ s% K- X  c+ N( D. x, D) C/ ~4 d
     case 1ED1=0;break;7 [" {" B3 A2 [/ \  Y
     case 2:.......
% e5 l1 A9 r9 z. I/ ]; a. k, r4 U      ....., `2 C: c' E8 S) ?) r* o7 Y
    .......
9 X$ ?! ?! E$ G- E1 E3 K: d    }( P6 q2 q; }9 }% p  x
   }
4 }8 G, I, ^" t& k! ^) e}
- Q$ u5 Y6 D1 i
: v* z% E: G: Wmain.h! s/ e3 b$ `# a8 m$ p& f4 Z( t
#ifndef _MAIN_H: _* y/ R# j, L$ s- o
#define _MAIN_H! v4 [! }( ?4 e" W8 R

; Q; l& h" i; f2 q- N# h1 Z- c#include "DSP2833x_Device.h"     // Headerfile Include File
* U* g6 u1 r3 c% {6 s" B# s#include "DSP2833x_Examples.h"   // Examples Include File4 E2 q- a; T7 {/ E0 ^

! g# J" n* k  a# D2 p2 K, L#include "flash_ram.h"
3 x. [, M. L1 s. C3 _& I) f: b#include "led.h"$ h& V/ k' Y" O. |0 k
#include "key.h"$ ^- }  o! |5 D* W
#include "extint.h"
) K3 r& ~5 {0 }/ g. a( o#include "timer.h"
/ t1 b' J; t- K. }$ w! c2 d#include "sci.h"
) \4 T; c/ r7 h( |0 u#include "pwm.h"6 n/ \1 L1 c9 M3 ?) h1 U
#include "cap.h"
: \1 |, u* d& R' |9 {; ^2 H$ a#include "ad.h"
( r. b- E6 ^( {- N& u#include "can.h"1 s% R; S7 M% w7 ]# e. q
#include "spi.h"/ w$ U- D& m/ \" F3 s: ^' e

; n0 v" v* r2 |& r, m- D* G: K8 C#include "NRF2401.h"* g: Y4 y7 I+ n0 }; c  v
/ \; b. m: S# ?* I$ s" U
#endif7 }0 T4 z6 O: V, t/ q
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!

162

主题

614

帖子

1255

积分

四级会员(40)

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

积分
1255
2#
发表于 2016-6-29 10:16 | 只看该作者
感谢楼主分享!!!
, L+ n, u: Z! T) ?; ?0 S* Z

156

主题

559

帖子

1202

积分

四级会员(40)

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

积分
1202
3#
发表于 2016-6-29 10:44 | 只看该作者
看贴学心得,回贴是美德  y- t$ u2 W- ]8 V% j' _+ q
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

巢课

技术风云榜

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

GMT+8, 2025-2-19 04:39 , Processed in 0.068967 second(s), 32 queries , Gzip On.

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

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

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