1580|0

3836

帖子

19

TA的资源

纯净的硅(中级)

楼主
 

TMS320F28335项目开发记录8_28335之GPIO引脚 [复制链接]

GPIO(General-Purpose Input/Output)——通用输入/输出口;
      DSP28335 GPIO模块分为三类IO口:PORTA(0-31),PORTB(32-63),PORTC(64-87)
对GPIO模块的设置主要通过三类寄存器来完成,分别是:控制寄存器、数据寄存器、中断寄存器。

 

1、控制寄存器
  GPxCTRL;    // GPIO x Control Register (GPIO0 to 31)
              //设置采样窗周期T=2*GPXCTRL*Tsysclk;


  GPxQSEL1;   // GPIO x Qualifier Select 1 Register (GPIO0 to 15)(32-47)            
  GPxQSEL2;   // GPIO x Qualifier Select 2 Register (GPIO16 to 31)(48-63)
              //每两位控制一个引脚,确定是3周期采样还是6周期采样或者不用采样


  GPxMUX1;    // GPIO x Mux 1 Register (GPIO0 to 15)(32-47)(64-79)

  GPxMUX2;    // GPIO x Mux 2 Register (GPIO16 to 31)(48-63)(80-95)
              //配置各个引脚的功能,0:I/O功能,1:外设功能。


  GPxDIR;     // GPIO x Direction Register (GPIO0 to 31)(32-63)(64-95)
              //配置每个引脚是输入还是输出,0:数字量输入;1:数字量输出。
  GPxPUD;     // GPIO x Pull Up Disable Register (GPIO0 to 31)(32-63)(64-95)
              //使能或禁止内部上拉 0:开启上拉,1:禁止上拉

2、数据寄存器
  GPxDAT;     // GPIO Data Register (GPIO0 to 31)(32-63)(64-95)
  GPxSET;     // GPIO Data Set Register (GPIO0 to 31)(32-63)(64-95)——置位

  GPxCLEAR;   // GPIO Data Clear Register (GPIO0 to 31)(32-63)(64-95)

  GPxTOGGLE;  // GPIO Data Toggle Register (GPIO0 to 31)(32-63)(64-95)—反转

3、中断寄存器
   GPIOXINT1SEL; // XINT1 GPIO Input Selection
   GPIOXINT2SEL; // XINT2 GPIO Input Selection

   GPIOXNMISEL;  // XNMI_Xint13 GPIO Input Selection

   GPIOXINT3SEL; // XINT3 GPIO Input Selection

   GPIOXINT4SEL; // XINT4 GPIO Input Selection

   GPIOXINT5SEL; // XINT5 GPIO Input Selection

   GPIOXINT6SEL; // XINT6 GPIO Input Selection

   GPIOXINT7SEL; // XINT7 GPIO Input Selection

   GPIOLPMSEL;   // Low power modes GP I/O input select
   可以对GPIO0-63进行外部中断设置;

 

具体定义在DSP28335Gpio.h中,如下:


struct GPIO_CTRL_REGS {
   union  GPACTRL_REG  GPACTRL;   // GPIO A Control Register (GPIO0 to 31)
   union  GPA1_REG     GPAQSEL1;  // GPIO A Qualifier Select 1 Register (GPIO0 to 15)
   union  GPA2_REG     GPAQSEL2;  // GPIO A Qualifier Select 2 Register (GPIO16 to 31)
   union  GPA1_REG     GPAMUX1;   // GPIO A Mux 1 Register (GPIO0 to 15)
   union  GPA2_REG     GPAMUX2;   // GPIO A Mux 2 Register (GPIO16 to 31)
   union  GPADAT_REG   GPADIR;    // GPIO A Direction Register (GPIO0 to 31)
   union  GPADAT_REG   GPAPUD;    // GPIO A Pull Up Disable Register (GPIO0 to 31)
   Uint32              rsvd1;
   union  GPBCTRL_REG  GPBCTRL;   // GPIO B Control Register (GPIO32 to 63)
   union  GPB1_REG     GPBQSEL1;  // GPIO B Qualifier Select 1 Register (GPIO32 to 47)
   union  GPB2_REG     GPBQSEL2;  // GPIO B Qualifier Select 2 Register (GPIO48 to 63)
   union  GPB1_REG     GPBMUX1;   // GPIO B Mux 1 Register (GPIO32 to 47)
   union  GPB2_REG     GPBMUX2;   // GPIO B Mux 2 Register (GPIO48 to 63)
   union  GPBDAT_REG   GPBDIR;    // GPIO B Direction Register (GPIO32 to 63)
   union  GPBDAT_REG   GPBPUD;    // GPIO B Pull Up Disable Register (GPIO32 to 63)
   Uint16              rsvd2[8];
   union  GPC1_REG     GPCMUX1;   // GPIO C Mux 1 Register (GPIO64 to 79)
   union  GPC2_REG     GPCMUX2;   // GPIO C Mux 2 Register (GPIO80 to 95)
   union  GPCDAT_REG   GPCDIR;    // GPIO C Direction Register (GPIO64 to 95)
   union  GPCDAT_REG   GPCPUD;    // GPIO C Pull Up Disable Register (GPIO64 to 95)
};
 
struct GPIO_DATA_REGS {
   union  GPADAT_REG       GPADAT;       // GPIO Data Register (GPIO0 to 31)
   union  GPADAT_REG       GPASET;       // GPIO Data Set Register (GPIO0 to 31)
   union  GPADAT_REG       GPACLEAR;     // GPIO Data Clear Register (GPIO0 to 31)
   union  GPADAT_REG       GPATOGGLE;    // GPIO Data Toggle Register (GPIO0 to 31)
   union  GPBDAT_REG       GPBDAT;       // GPIO Data Register (GPIO32 to 63)
   union  GPBDAT_REG       GPBSET;       // GPIO Data Set Register (GPIO32 to 63)
   union  GPBDAT_REG       GPBCLEAR;     // GPIO Data Clear Register (GPIO32 to 63)
   union  GPBDAT_REG       GPBTOGGLE;    // GPIO Data Toggle Register (GPIO32 to 63)
   union  GPCDAT_REG       GPCDAT;       // GPIO Data Register (GPIO64 to 95)
   union  GPCDAT_REG       GPCSET;       // GPIO Data Set Register (GPIO64 to 95)
   union  GPCDAT_REG       GPCCLEAR;     // GPIO Data Clear Register (GPIO64 to 95)
   union  GPCDAT_REG       GPCTOGGLE;    // GPIO Data Toggle Register (GPIO64 to 95)
   Uint16                  rsvd1[8];
};
 
struct GPIO_INT_REGS {
   union  GPIOXINT_REG     GPIOXINT1SEL; // XINT1 GPIO Input Selection
   union  GPIOXINT_REG     GPIOXINT2SEL; // XINT2 GPIO Input Selection
   union  GPIOXINT_REG     GPIOXNMISEL;  // XNMI_Xint13 GPIO Input Selection
   union  GPIOXINT_REG     GPIOXINT3SEL; // XINT3 GPIO Input Selection
   union  GPIOXINT_REG     GPIOXINT4SEL; // XINT4 GPIO Input Selection
   union  GPIOXINT_REG     GPIOXINT5SEL; // XINT5 GPIO Input Selection
   union  GPIOXINT_REG     GPIOXINT6SEL; // XINT6 GPIO Input Selection
   union  GPIOXINT_REG     GPIOXINT7SEL; // XINT7 GPIO Input Selection
   union  GPADAT_REG       GPIOLPMSEL;   // Low power modes GP I/O input select
};

注意:GPIO相关寄存器介绍
1、GPxMUX寄存器(功能选择寄存器)

每个I/O口都有一个功能选择寄存器,功能选择寄存器主要用于选择I/O工作在特殊功能还是通用数组I/O模式。在复位时,所有GPIO配置成通用数字模式。

1)如果GPxMUX.bit = 0,配置成通用数字I/O功能;

2)如果GPxMUX.bit = 1,配置成特殊外设功能口(如SCI、CAN);

I/O的输入功能和外设的输入通道总是被使能的,输出通道是通用数组I/O和特殊外设复用的。如果引脚配置成通用数组I/O功能,相应的外设功能将被禁止。

2、GPxDIR(方向控制寄存器)

每个I/O口都有数据方向控制寄存器,数据方向控制寄存器用于设置通用数字I/O为输入还是输出口,在复位时,引脚的默认状态为输入状态。

1)如果GPxDIR.bit = 0,引脚设置为通用数字量输入;

2)如果GPxDIR.bit = 1,引脚设置为通用数字量输出;

复位时,GPxMUX和GPxDIR默认值都为0,所以在复位时,引脚的默认状态为数字I/O输入。

3、GPxDAT寄存器(数据寄存器)

每个I/O口都有一个数据寄存器,数据寄存器是可读可写寄存器。

1)I/O设置为输出功能时,如果GPxDAT.bit = 0,那么操作将会使相应的引脚拉低;

2)I/O口设置为输入功能时,如果GPxDAT.bit = 0,反映相应的引脚状态为低电平;

3)I/O口设置为输出功能时,如果GPxDAT.bit = 1,那么操作将会使相应的引脚拉高;

4)I/O口设置为输入功能时,如果GPxDAT.bit = 1,反映相应的引脚状态为高电平。

需要说明的是,当用户试图改变一个数字I/O的状态时,不要改变另一个I/O的引脚状态。

4、GOxSET寄存器(置位寄存器)

每个I/O口都有一个置位寄存器,置位寄存器是只写寄存器,任何读操作都返回0,如果相应的引脚配置成数据量输出,写1后相应的引脚会置高,写0时没有反映。

1)如果GPxSET.bit = 0,没有影响;

2)引脚设置为输出时,如果GPxSET.bit = 1,那么操作将会使引脚置高。

5、GPxCLEAR寄存器(清除寄存器)

每个I/O口都有一个清除寄存器,清除寄存器是只写寄存器,任何读操作都返回0。

1)如果GPxCLEAR.bit = 0,没有影响;

2)引脚设置为输出时,如果GPxCLEAR.bit = 1,将相应的引脚置成低电平。

6、GPxTOGGLE寄存器(取反触发寄存器)

每个I/O口都有一个取反触发寄存器,该寄存器是只写寄存器,任何读操作都返回0。

1)如果GPxTOGGLE.bit = 0,没有影响;

2)引脚设置为输出时,如果GPxTOGGLE.bit = 1,那么操作将使相应的引脚取反。

点赞 关注
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表