介绍
F28335 DSP有88个GPIO口,对应着芯片引出的88个引脚,88个引脚多数都是功能复用的,可以灵活配置为输入引脚,也可以灵活配置为输出引脚,即可以作为通用I/O引脚,也可以作为特殊功能口(如SCI、SPI、ECAN等),根据需要,可以通过GPIO MUX(输入输出多路选择器,复用开关)寄存器来进行相关配置,下边介绍GPIO的工作原理及其配置过程。
F28335 DSP将这88个GPIO口分成了A、B、C三大组,A组包括GPIO0至GPIO31,B组包括GPIO32至GPIO63,C组包括GPIO64至GPIO87,每个引脚都复用了多个功能,同一时刻,每个引脚只能用该引脚的一个功能。究竟工作在哪个模式下,可以通过GPIO Mux(复用开关)寄存器配置每个引脚的具体功能(通用数字量I/O或者外设专用功能)。如果将这些引脚选择数字量I/O模式,可以通过方向寄存器GPxDIR配置数字量I/O的方向,即是作为输入引脚还是作为输出引脚;还可以通过量化寄存器GPxQUAL对输入信号进行量化限制,从而可以消除数字量I/O引脚的噪声干扰。此外,有下面4种方式对GPIO引脚进行读写操作:
1、可以通过GPxDAT寄存器独立读/写I/O信号;
2、利用GPxSET寄存器写1(写0无效)对I/O口进行置位
3、利用GPxCLEAR寄存器写1(写0无效)对I/O口进行清零;
4、利用GPxTOOGLE寄存器置1后(写0无效)来将I/O输出电平翻转,原来高电平变成低电平,原来低电平则变成高电平。
点亮led(输出模式)
最重要的一步来了
从上面示意图可以看出,GPAMUX寄存器决定了IO是哪种模式(普通IO、外设1、外设2、外设3),GPADIR决定了是否输出,GPADAT决定了输出电平高低。
现在根据官方手册来写程序
根据开发板电路图和上面的官方手册给出的GPIO配置步骤,程序如下:
EALLOW;//受保护的寄存器,要先关保护才能写进寄存器值
GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 0; // GPIO0复用为GPIO功能
GpioCtrlRegs.GPADIR.bit.GPIO0 = 1; // GPIO0设置为输出
GpioCtrlRegs.GPAPUD.bit.GPIO0 = 1; //GPIO0关闭内部上拉
EDIS;//开保护
寄存器是否受保护可以参考技术手册,受保护的寄存器下会有说明,如下图
led闪烁代码实现
while(1)
{
GpioDataRegs