TMS320F28335入门(二)GPIO学习

慢慢学习过程中发现,DSP的IO口大多都有其专门的功能,比如PWM通道、外部中断、eCAP、eQEP、SCI等等一系列;既然有就尽量用它,减少软件模拟造成的CPU的资源浪费。

//C28335的IO口一共有GPIO0~GPIO87个,由结构体GPIO_CTRL_REGS控制;
//gpio_ctrl_reg结构体内定义了相关的GPIO的寄存器地址;
//根据数据手册得知C28335的IO一共被分成三组:
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)
};

//以A组端口(GPIO0~GPIO31)为例,说明寄存器功能
类型 变量名 寄存器名
//CPACTRL寄存器:对引脚的采样速率进行配置,基础采样速率:SYSCLKOUT
union GPACTRL_REG GPACTRL; // GPIO A Control Register (GPIO0 to 31)
//GPAQSELx(1,2)寄存器:设置每个引脚的输入限定
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)
//GPAMUXx(1,2)寄存器:设置引脚复用功能
union GPA1_REG GPAMUX1; // GPIO A Mux 1 Register (GPIO0 to 15)
union GPA2_REG GPAMUX2; // GPIO A Mux 2 Register (GPIO16 to 31)
//GPADIR寄存器:设置引脚输入输出方向寄存器
union GPADAT_REG GPADIR; // GPIO A Direction Register (GPIO0 to 31)
//GPAPUD寄存器:设置使能引脚内部上拉电阻。GPAPUD寄存器有些特殊
union GPADAT_REG GPAPUD; // GPIO A Pull Up Disable Register (GPIO0 to 31)
Uint32 rsvd1;

//引脚数据结构体,可以设置、读取引脚输出状态
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];
};

//GPADAT寄存器:无论引脚是什么模式,可读取当前引脚的状态;在GPIO模式下写入1或0,会强制改变引脚状态,
union GPADAT_REG GPADAT; // GPIO Data Register (GPIO0 to 31)
//GPASET寄存器:在GPIO模式下写入1,设置引脚状态为1;写入0不发生变化;
union GPADAT_REG GPASET; // GPIO Data Set Register (GPIO0 to 31)
//GPACLEAR寄存器:在GPIO模式下写入1,设置引脚状态为0;写入0不发生变化;
union GPADAT_REG GPACLEAR; // GPIO Data Clear Register (GPIO0 to 31)
//GPACLEAR寄存器:在GPIO模式下写入1,翻转引脚状态;写入0不发生变化;
union GPADAT_REG GPATOGGLE; // GPIO Data Toggle Register (GPIO0 to 31)

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值