找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

DSP28335的GPIO使用

[复制链接]

245

主题

1028

帖子

1921

积分

四级会员(40)

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

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

EDA365欢迎您!

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

x
GPIO通常用来做普通的输入输出,比如按键啊,LED啊,或者芯片的片选段之类的,算是最基本的操作。
/ q0 }9 T5 ^) `# l话不多说,直接上 代码+注释 记录一下,以备以后使用1 r9 r5 T% |  ]# t- [1 z$ Z5 C
我用的板子是研旭实用板
9 W# U% ~0 W5 @" k) T) K- W* ]: `
$ @+ Q% B3 i* @: h5 d/ [& iled.c
& t- q. V7 A% M: P' ?8 z#include "led.h"! M2 p* ^) x9 m0 e9 r
//LED和蜂鸣器初始化8 J+ O. t+ b" F; i* Y8 Q3 U6 U, y, [
void Led_Gpoi_Init(void). l" B4 k+ B7 Q* @2 A6 z
{9 G9 L  }# |& q: B/ C4 L3 L
EALLOW;
2 S, z8 V4 r9 t$ g  SGpioCtrlRegs.GPAMUX1.bit.GPIO0 = 0; // GPIO0复用为GPIO功能
5 p1 r- ^( P& f4 S" BGpioCtrlRegs.GPADIR.bit.GPIO0 = 1;  // GPIO0设置为输出2 @1 Q& c# N$ Z4 d( x" G- x3 g
GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 0; // GPIO1 = GPIO1, i& Y) n2 D. F" h
GpioCtrlRegs.GPADIR.bit.GPIO1 = 1;  //GPIO0设置为输出
8 T# Y3 v- S" p5 N: y. z+ b6 Z8 g% ?( }6 VGpioCtrlRegs.GPAMUX1.bit.GPIO6 = 0; //配置同上8 r1 p* O& ?7 \# N: S4 [
GpioCtrlRegs.GPADIR.bit.GPIO6 = 1;
5 O7 x' I$ u6 D  ?% a5 TGpioCtrlRegs.GPAMUX1.bit.GPIO7 = 0; //
+ @- d7 F8 p  g1 x6 z) G; h0 ?GpioCtrlRegs.GPADIR.bit.GPIO7 = 1;4 a# Q; X& o5 F* c$ _. j/ F( _
GpioCtrlRegs.GPBMUX2.bit.GPIO60 = 0; //蜂鸣器GPIO设置,GPIO60复用为GPIO功能
" _, F6 [( K  f! D       GpioCtrlRegs.GPBDIR.bit.GPIO60 = 1;  //设置为输出
, ^# i# g( ?4 T        LED1 = 1;  LED2 = 1;  LED3 = 1;  LED4 = 1;BUZZ_OFF( j4 b" {9 y/ z. m* N* I
EDIS;7 }! _5 s. M5 h, G; X
}' U8 a% W1 Z; a$ D

; R5 Z( E; ?1 j* d$ Tled.h: _# P( N9 I$ Q4 O; M
#ifndef LED_H_2 x: p$ q! d, C: a& y# v/ \" j
#define LED_H_- m; c3 e3 u' }

6 D3 y) _) {" |7 A#include "main.h"
$ s8 k/ }: q4 Z# v3 ]
2 H4 Q2 q3 ]# v1 c# U4 b2 E- g9 L//根据原理图,低电平LED亮  g# O* z! F) }' p
#define  LED3  GpioDataRegs.GPADAT.bit.GPIO0   //宏定义LED的数据寄存器  z6 \- a. b( Z4 p9 w
#define  LED4  GpioDataRegs.GPADAT.bit.GPIO1
' g9 n6 l# t" c#define  LED1  GpioDataRegs.GPADAT.bit.GPIO6* n: o8 Z6 A( b, J
#define  LED2  GpioDataRegs.GPADAT.bit.GPIO76 v& M5 G/ z& U$ y  p' X

- z7 P# M) h; W3 e#define  BUZZ_OFFGpioDataRegs.GPBSET.bit.GPIO60=1; //蜂鸣器不鸣叫
2 p- }. h: g) X( t! \#define  BUZZ_ONGpioDataRegs.GPBCLEAR.bit.GPIO60=1;//蜂鸣器鸣叫' [1 z4 Q( g2 p9 B

/ ?* L5 t6 k: evoid Led_Gpoi_Init(void);0 i5 A9 i1 p; ~  R) [6 d; d

: t# Z5 K! r& u# j3 ], U#endif /* LED_H_ */
; B3 n6 \2 }: u  F: e+ m
8 H! H( Z) p2 c+ {) @# `; g* f; N+ p( Mkey.c
4 S% j3 d$ x* p2 W8 a1 J4 L#include "key.h"
/ }4 @  M  e/ ?+ X5 L//按键IO口初始化* I- m8 [, Q" B' N( d
void Key_Gpoi_Init(void)$ i# X1 B' Q, V9 A
{
; C) Y7 q0 d" K$ t- _# OEALLOW;
; I, X% L9 E  q) K0 }GpioCtrlRegs.GPAMUX1.bit.GPIO13 = 0;//按键GPIO设置,GPIO13复用为GPIO功能
: w* P( R- P0 w# ~: `GpioCtrlRegs.GPADIR.bit.GPIO13 = 0;  //设置为输入) n8 s4 G) W9 F
EDIS;1 r4 y/ Q6 ]! ~$ {* g7 I& I5 P. q) p9 J
}9 Q/ I' d* e. F; q* ~- e( {3 B
- g5 f; ~+ ^$ C( M8 q2 x

2 k  Z7 ?: m4 @  ?) su8 KeyScan(void)
) M& r8 [  w- W; G4 K{" o' n" d; W/ Q: t6 I/ p& h* B; n
static u8 key_up=1;//按键按松开标志. h( t. J6 m7 j
8 g( {& v5 Y0 o- ?: X# u! I  E5 r# I
6 H1 T, l! d. @/ M
    if( key_up&&(KEY0==0) )  //有键按下 ||KEY1==0||KEY2==0)# K% b7 r; o& {4 l/ {
{# e2 `2 q/ l* A7 a  ?
       DELAY_US(10000);//去抖动; [0 ^3 g6 n3 x) I" ~0 a7 R& D
  key_up=0;     //表示按键没松开
& B1 t: d, a. L0 U6 `! X  if(KEY0==0)    //按下KEY0
. Z* C& d- g6 M* m' X* x" v  C  {
; L% J2 D& K- b' I/ s& P* }  return 1;' f5 r! F" d. G* T
  }
) W4 v; S( ]1 l# m4 z  N. J//   else if(KEY1==0)) Q1 G" Y" l9 g* J2 t9 E0 ~! l; W
//   {return 2;}2 m# L7 }! H. e2 @0 R# ~3 A3 R* M
//   else if(KEY2==1)( p3 b. F' d; e- Y# N% o, F
//   {return 3;}}
- q( I. ]& ^) o! T% J! f}9 Y+ h7 Q/ b) d  b: G* O- ^
    else if(KEY0==1)key_up=1;  //&&KEY1==1&&KEY2==1没有键按下% ?+ B. p9 n( g4 i: _: w
   return 0;// 无按键按下
5 ?; P/ a$ p4 y& ?1 S& U* I7 W" |}
# f+ y# b# P, y1 ]& r
, w2 l$ D% N2 x( ]: K6 z+ gkey.h- L; r' ^  \7 u  ]1 f1 w7 L
#ifndef KEY_H_
; m! t6 O( G  q3 c( o7 v9 H#define KEY_H_
6 I/ R3 T. r7 k0 i* ^#define KEY0  GpioDataRegs.GPADAT.bit.GPIO13# x  d8 d7 r" \+ m" a
#include "main.h"
! k5 B9 P/ K6 [; `( y! P, j) R3 H! l* D/ g
void Key_Gpoi_Init(void);
2 a" }6 }& Q, gu8 KeyScan(void);- T3 S' \8 \* w

% W* X5 [( R/ u4 J#endif /* KEY_H_ *// {% {/ A6 R/ t
2 l' @$ ?" h% s  D
MAIN.C
. x7 G; x8 f% N6 p. t, }void main(void)
6 |. D6 f* A1 U{
; U% C/ e. B, g. {+ Q    u8 key=0;   ' y7 R- p: Q, H
//初始化6 N, `; i0 Y$ x, {% X. R+ b
     InitSysCtrl(); //初始化系统时钟到150M,关看门狗,开启外设时钟! ?: Y" {2 T) u7 ?2 `  C" }
     InitGpio();    // 初始化GPIO到复位状态. Z' e! W: C0 J9 o: H: q" ~# L
6 m9 F1 i9 i! y4 g# x8 T8 S
    DINT;              //关闭CPU中断& d* g7 u: b" Z
    InitPieCtrl();
# b& e! t1 x; _( W    IER = 0x0000;
. [# w# F& t% W( i$ S+ n    IFR = 0x0000;
. L8 p5 Z: h- `    InitPieVectTable();  //初始化中断向量表
( D, Z( b. h  G1 m$ @/ Z( n3 M- a7 z; C+ \6 r1 [! K
    //外设配置. l/ {# r& w/ \6 A9 J1 \
    Led_Gpoi_Init();   //led端口初始化
. W# B; C" D0 W6 X, u( Z    Key_Gpoi_Init(); //按键IO初始化
3 l8 L1 U) L6 \) F0 K    while(1)
. |' h8 o/ f4 `/ x; v& }    {
) w, M/ W; V0 H  {: t, [; ?1 w% q  I9 g       key = KeyScan()  ; //扫描按键3 r% j2 x, I! Z6 V' u) y
      switch(key)        //根据键值来做出不同的相应
5 W: o3 b4 `1 M8 E' |* g      {
5 \- p, ^4 r3 }! E' Z& n     case 1ED1=0;break;
2 e, b1 M/ {% B' N$ s  @1 h     case 2:.......* V: E# m5 q6 k- d2 }/ |6 f# L
      .....
& Y# I1 B! c( D! x; g    .......
1 _5 M2 e, Y& c4 _5 r    }
8 I; [  i. s( p( c, ^3 c+ M. |0 W   }2 d+ J+ r* q- O9 b) @: A; a7 w  e5 b2 D
}+ {% o& t$ b/ E0 E9 W4 \% A
3 W1 {1 R9 T0 T- u( g8 z
main.h
  X7 \; x2 s+ G/ o8 J2 f( Q#ifndef _MAIN_H
9 O) ]* L; ]& [/ W1 H& i) \#define _MAIN_H
6 t# ^/ I% B9 t' X) X, L% ?( v+ v0 D! Q/ G* q. ~9 o# [
#include "DSP2833x_Device.h"     // Headerfile Include File
! `& u* W/ r) T) s. G; q$ M: |+ f( m#include "DSP2833x_Examples.h"   // Examples Include File
0 P9 e* n- D' w) W" Y( L) U- G. y2 Y9 ?
#include "flash_ram.h"! T/ R' R9 N2 T
#include "led.h"
0 s0 _. I0 w  O+ J: }+ I7 C#include "key.h"
/ g5 D' i/ j6 J6 ?+ p, Y0 A8 w#include "extint.h"
: V6 d0 v; v1 y5 J; O5 E#include "timer.h"( T- @0 K4 Q' q, _
#include "sci.h"
! D; p4 j/ q! h- N3 k# z#include "pwm.h"% O4 Z" v' J9 r
#include "cap.h"
. e- ?$ M3 A6 p. L; b/ W#include "ad.h"5 Y2 f: y, v9 N
#include "can.h"! E; i' e: [$ \, r3 n: M" R
#include "spi.h"
2 y: a4 q: x/ Q/ r: W/ Z
4 T* I. D# v: V1 [% e#include "NRF2401.h"
% |& h& {% v- Q" J& A: q+ X+ `+ ~% E) X" a. Y8 ~
#endif
. R) [: u# Q+ k
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!

162

主题

614

帖子

1255

积分

四级会员(40)

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

积分
1255
2#
发表于 2016-6-29 10:16 | 只看该作者
感谢楼主分享!!!
& e1 S! x$ i  p$ `

156

主题

559

帖子

1202

积分

四级会员(40)

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

积分
1202
3#
发表于 2016-6-29 10:44 | 只看该作者
看贴学心得,回贴是美德6 M" |8 J  {( \7 y: U, o
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

巢课

技术风云榜

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

GMT+8, 2025-2-19 05:28 , Processed in 0.055983 second(s), 31 queries , Gzip On.

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

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

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