一、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];
};
1、GPADAT寄存器: 无论引脚是什么模式,可读取当前引脚的状态;在GPIO模式下写入1或0,会强制改变引脚状态;
union GPADAT_REG GPADAT; // GPIO Data Register (GPIO0 to 31)
2、GPASET寄存器: 在GPIO模式下写入1,设置引脚状态为高电平;写入0不发生变化;
union GPADAT_REG GPASET; // GPIO Data Set Register (GPIO0 to 31)
3、GPACLEAR寄存器: 在GPIO模式下写入1,设置引脚状态为低电平;写入0不发生变化;
union GPADAT_REG GPACLEAR; // GPIO Data Clear Register (GPIO0 to 31)
4、GPATOGGLE存器器: 在GPIO模式下写入1,电平翻转引脚状态;写入0不发生变化;
union GPADAT_REG GPATOGGLE; // GPIO Data Toggle Register (GPIO0 to 31)