请选择 进入手机版 | 继续访问电脑版

EDABOSS电子论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 987|回复: 0

[转帖] DSP28335的GPIO使用

[复制链接]

106

主题

13

回帖

96

E币

助理工程师

Rank: 3Rank: 3

积分
225
发表于 2018-11-28 16:06:23 | 显示全部楼层 |阅读模式
GPIO通常用来做普通的输入输出,比如按键啊,LED啊,或者芯片的片选段之类的,算是最基本的操作。
话不多说,直接上 代码+注释 记录一下,以备以后使用
我用的板子是研旭实用板% w% l, U8 q& x5 i- k! W

led.c* h- R% r% U- M+ l; C) }
#include "led.h"
//LED和蜂鸣器初始化
void Led_Gpoi_Init(void)
{$ |8 _  o7 Y+ ?! d+ |2 d
EALLOW;
GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 0; // GPIO0复用为GPIO功能+ e7 ?; |. L$ `7 _( ]* h" P5 ~7 }: r
GpioCtrlRegs.GPADIR.bit.GPIO0 = 1;  // GPIO0设置为输出
GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 0; // GPIO1 = GPIO1" B1 S7 F. |3 A- I. a5 k" b+ Z
GpioCtrlRegs.GPADIR.bit.GPIO1 = 1;  //GPIO0设置为输出
GpioCtrlRegs.GPAMUX1.bit.GPIO6 = 0; //配置同上% Y  q) [& o5 I) P
GpioCtrlRegs.GPADIR.bit.GPIO6 = 1;7 p& |; |$ c3 k9 E0 y) L; ]" n
GpioCtrlRegs.GPAMUX1.bit.GPIO7 = 0; //$ Q4 a: G0 n+ |& Y  J0 c
GpioCtrlRegs.GPADIR.bit.GPIO7 = 1;
GpioCtrlRegs.GPBMUX2.bit.GPIO60 = 0; //蜂鸣器GPIO设置,GPIO60复用为GPIO功能
       GpioCtrlRegs.GPBDIR.bit.GPIO60 = 1;  //设置为输出, X4 C* D/ y- n
        LED1 = 1;  LED2 = 1;  LED3 = 1;  LED4 = 1;BUZZ_OFF
EDIS;
}- r, N' t% R1 K: _
7 U. C% k# O; b0 H: v' v* e
led.h
#ifndef LED_H_" |" I, T6 D& G% B; ]
#define LED_H_

#include "main.h"- `6 V7 s8 u* l2 N7 C
  s. A+ u; d0 k7 t2 o* _6 ]
//根据原理图,低电平LED亮
#define  LED3  GpioDataRegs.GPADAT.bit.GPIO0   //宏定义LED的数据寄存器
#define  LED4  GpioDataRegs.GPADAT.bit.GPIO1! M6 @) G/ S; }6 Z) Q
#define  LED1  GpioDataRegs.GPADAT.bit.GPIO6
#define  LED2  GpioDataRegs.GPADAT.bit.GPIO7
- V0 b  k! ^) Z- W: _
#define  BUZZ_OFFGpioDataRegs.GPBSET.bit.GPIO60=1; //蜂鸣器不鸣叫
#define  BUZZ_ONGpioDataRegs.GPBCLEAR.bit.GPIO60=1;//蜂鸣器鸣叫

void Led_Gpoi_Init(void);
  `* c/ M9 o( W
#endif /* LED_H_ */

key.c2 X4 L; A" i+ {' N
#include "key.h"
//按键IO口初始化/ ~& t+ p! s! I8 `' q; n
void Key_Gpoi_Init(void)
{% P8 g* A) R7 Z; F0 X8 o
EALLOW;' U4 L  ^& L9 G, b$ o
GpioCtrlRegs.GPAMUX1.bit.GPIO13 = 0;//按键GPIO设置,GPIO13复用为GPIO功能
GpioCtrlRegs.GPADIR.bit.GPIO13 = 0;  //设置为输入$ H0 o0 s: b" B7 B0 O* V
EDIS;
}" g" v+ G, p* F8 c5 j


u8 KeyScan(void)
{% N/ Q- E& S4 h, d8 U$ S# U. O
static u8 key_up=1;//按键按松开标志
6 [) f+ H$ Z9 O% T3 H! |

    if( key_up&&(KEY0==0) )  //有键按下 ||KEY1==0||KEY2==0)
{
       DELAY_US(10000);//去抖动
  key_up=0;     //表示按键没松开
  if(KEY0==0)    //按下KEY0
  {
  return 1;7 q5 t5 T! z) j. i) j
  }4 X' y. p" i% W
//   else if(KEY1==0); y$ t9 k. h& B
//   {return 2;}2 D/ A4 k  q2 v7 h: o7 |' ?0 b& H
//   else if(KEY2==1)4 s. j7 `5 H# H
//   {return 3;}}
}
    else if(KEY0==1)key_up=1;  //&&KEY1==1&&KEY2==1没有键按下
   return 0;// 无按键按下, o- Q2 C4 G+ n
}( I6 g/ Q+ I  E2 V% b7 t
6 m: u  {# q9 G; V0 w" F' M" O
key.h
#ifndef KEY_H_
#define KEY_H_# I/ i" q4 f3 p7 |3 R! L
#define KEY0  GpioDataRegs.GPADAT.bit.GPIO13- n' c  h9 m, ?9 ~2 L+ e9 L
#include "main.h"
, ^/ Z8 f/ q- J, ]! z8 [) f
void Key_Gpoi_Init(void);
u8 KeyScan(void);
% Q9 X( j* Q2 l, D
#endif /* KEY_H_ */
; m3 H$ n+ G/ j& W, {7 H
MAIN.C- J: y6 t! V. o% W; S; e' F
void main(void); u4 O* P4 f: S' Q8 c$ f7 _
{
    u8 key=0;   
//初始化
     InitSysCtrl(); //初始化系统时钟到150M,关看门狗,开启外设时钟0 f8 ~/ o* Q9 ^
     InitGpio();    // 初始化GPIO到复位状态8 |) m& x% d- ]  E) F
" j" B3 i( h9 Z/ W1 m
    DINT;              //关闭CPU中断
    InitPieCtrl();- o+ R* x( F$ P$ Z
    IER = 0x0000;
    IFR = 0x0000;/ P2 W  @: c. w+ \. @# w, _
    InitPieVectTable();  //初始化中断向量表3 m1 i" h, M, a( S. l! j
7 L/ ]1 `8 ^0 e6 ]5 E8 o% n8 Q6 n
    //外设配置
    Led_Gpoi_Init();   //led端口初始化# _, J+ v1 f: F; e" g
    Key_Gpoi_Init(); //按键IO初始化' ?9 k# R, z2 m! B
    while(1)8 r/ s+ M" g' J3 U0 J. g. V
    {
       key = KeyScan()  ; //扫描按键
      switch(key)        //根据键值来做出不同的相应
      {
     case 1undefinedED1=0;break;8 z& [3 n6 C" e0 X; Q
     case 2:.......3 s. M0 i1 ~9 J8 [0 j
      .....
    .......1 X: m  u% G' l. }& A6 b; g
    }8 j+ ]" Z! i/ h6 r$ t: Y
   }
}4 _' M+ [$ A$ B9 c0 q  [
) w! _3 {5 i% R) v( \8 c
main.h
#ifndef _MAIN_H, o* h# c: D% M3 }
#define _MAIN_H
" Y6 v9 {# v# i; n2 G' H; g
#include "DSP2833x_Device.h"     // Headerfile Include File
#include "DSP2833x_Examples.h"   // Examples Include File% j, v$ \3 F2 k+ a. k  T6 T

#include "flash_ram.h"5 r6 R( a; ?, K
#include "led.h"
#include "key.h"
#include "extint.h"
#include "timer.h"
#include "sci.h"8 Y/ r% x" L9 [  E) A# W
#include "pwm.h"
#include "cap.h"
#include "ad.h") L) u% o. b( l$ X# J! T
#include "can.h"5 ^1 I' e1 Y; ^- ^7 H
#include "spi.h"9 Q- G- L5 P. e% V
7 P3 j# f" L& V, p
#include "NRF2401.h". E( c" L% ]. m9 |, R7 {& c  t
2 Q: D3 A1 S- O/ t# D
#endif
积分规则
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|EDABOSS电子论坛

GMT+8, 2024-4-16 19:10 , Processed in 0.041721 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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