控制寄存器
struct GPIO_CTRL_REGS {
union GPACTRL_REG GPACTRL; // GPIO A Qualification Sampling Period (GPIO0 to GPIO31)
union GPAQSEL1_REG GPAQSEL1; // 尖脉冲滤除选择寄存器(与时钟同步模式)
union GPAQSEL2_REG GPAQSEL2; // 00:与系统时钟SYSCLKOUT同步 01或者10:同步后,输入信号在输入值改变前需要满足一定数量的时钟周期的宽度要求。 11:不同步,此模式用于不同步外设
union GPAMUX1_REG GPAMUX1; // IO口复用配置
union GPAMUX2_REG GPAMUX2; // 00:通用的输入输出口 01:外设选择1 10:外设选择2 11:外设选择3
union GPADIR_REG GPADIR; // 输入或输出方向 1:输出
union GPAPUD_REG GPAPUD; // 内部上拉电阻(使能)
}
数据寄存器
struct GPIO_DATA_REGS {
union GPADAT_REG GPADAT; // 数据寄存器,无保护直接写可能存在问题
union GPASET_REG GPASET; // 设定值,置1
union GPACLEAR_REG GPACLEAR; // 清除值,置0
union GPATOGGLE_REG GPATOGGLE; // toggle翻转
union GPBDAT_REG GPBDAT; // GPIO B Data Register (GPIO32 to GPIO64)
union GPBSET_REG GPBSET; // GPIO B Output Set (GPIO32 to GPIO64)
union GPBCLEAR_REG GPBCLEAR; // GPIO B Output Clear (GPIO32 to GPIO64)
union GPBTOGGLE_REG GPBTOGGLE; // GPIO B Output Toggle (GPIO32 to GPIO64)
Uint16 rsvd1[40]; // Reserved
union GPHDAT_REG GPHDAT; // GPIO H Data Register (GPIO0 to GPIO255)
}
官方初始化定义
void Gpio_setup2(void)
{
// Example 1:
// Communications Pinout.
// This basic communications pinout includes:
// PWM1-3, CAP1, CAP2, SPI-A, SPI-B, CAN-A, SCI-A and I2C
// and a number of I/O pins
EALLOW;
// Enable an GPIO output on GPIO6
GpioCtrlRegs.GPAPUD.bit.GPIO6 = 0; // Enable pullup on GPIO6
GpioDataRegs.GPASET.bit.GPIO6 = 1; // Load output latch
GpioCtrlRegs.GPAMUX1.bit.GPIO6 = 0; // GPIO6 = GPIO6
GpioCtrlRegs.GPADIR.bit.GPIO6 = 1; // GPIO6 = output
// Enable eCAP1 on GPIO7
GpioCtrlRegs.GPAPUD.bit.GPIO7 = 0; // Enable pullup on GPIO7
GpioCtrlRegs.GPAQSEL1.bit.GPIO7 = 0; // Synch to SYSCLKOUT
GpioCtrlRegs.GPAMUX1.bit.GPIO7 = 3; // GPIO7 = ECAP2
// Enable GPIO outputs on GPIO8 - GPIO11
GpioCtrlRegs.GPAPUD.bit.GPIO8 = 0; // Enable pullup on GPIO8
GpioDataRegs.GPASET.bit.GPIO8 = 1; // Load output latch
GpioCtrlRegs.GPAMUX1.bit.GPIO8 = 0; // GPIO8 = GPIO8
GpioCtrlRegs.GPADIR.bit.GPIO8 = 1; // GPIO8 = output
GpioCtrlRegs.GPAPUD.bit.GPIO9 = 0; // Enable pullup on GPIO9
GpioDataRegs.GPASET.bit.GPIO9 = 1; // Load output latch
GpioCtrlRegs.GPAMUX1.bit.GPIO9 = 0; // GPIO9 = GPIO9
GpioCtrlRegs.GPADIR.bit.GPIO9 = 1; // GPIO9 = output
GpioCtrlRegs.GPAPUD.bit.GPIO10 = 0; // Enable pullup on GPIO10
GpioDataRegs.GPASET.bit.GPIO10 = 1; // Load output latch
GpioCtrlRegs.GPAMUX1.bit.GPIO10 = 0; // GPIO10 = GPIO10
GpioCtrlRegs.GPADIR.bit.GPIO10 = 1; // GPIO10 = output
GpioCtrlRegs.GPAPUD.bit.GPIO11 = 0; // Enable pullup on GPIO11
GpioDataRegs.GPASET.bit.GPIO11 = 1; // Load output latch
GpioCtrlRegs.GPAMUX1.bit.GPIO11 = 0; // GPIO11 = GPIO11
GpioCtrlRegs.GPADIR.bit.GPIO11 = 1; // GPIO11 = output
// Make GPIO34 an input
GpioCtrlRegs.GPBPUD.bit.GPIO32 = 0; // Enable pullup on GPIO34
GpioCtrlRegs.GPBMUX1.bit.GPIO34 = 0; // GPIO34 = GPIO34
GpioCtrlRegs.GPBDIR.bit.GPIO34 = 0; // GPIO34 = input
EDIS;
}