文章目录
初学DSP(F28335芯片),玩了玩GPIO点了个灯,赶紧对GPIO相关知识进行一个梳理记录。(因为初学,肯定有很多地方理解的有偏差,如若各位大哥大姐们发现错误之处,还请不吝赐教,感谢感谢!)
一、GPIO知识点
1、F28335芯片GPIO一共有88个GPIO口:GPIO0 - GPIO87。
2、分为ABC三组:
组名 | GPIO范围 | 写法 |
---|---|---|
A组 | GPIO0 - GPIO31 | GPA |
B组 | GPIO32 - GPIO63 | GPB |
C组 | GPIO64 - GPIO87 | GPC |
3、寄存器:(x为组名,可取值A、B、C)
寄存器名 | 功能 | 含义 |
---|---|---|
GPxMUXn | 复用功能寄存器 | 决定GPIO口是否复用。每2bit表示一个GPIO,故可取值00/01/10/11,即:0/1/2/3。 0:关闭复用功能,当做普通IO口使用 1/2/3:打开复用功能,对应具体复用功能,请查看数据手册 注意:n可以取值1 or 2 原因:mux为32位寄存器,每2bit表示一个GPIO,故一个mux寄存器只能表示16个GPIO口。而每组GPIO有32个GPIO,故要全部表示需要2个MUX寄存器,即:MUX1和MUX2 MUX1:每组GPIO的前半部分,如:GPIO0 ~GPIO15 MUX2:每组GPIO的后半部分,如:GPIO16~GPIO31 |
GPxDIR | IO方向寄存器 | 配置IO方向: 0:输入 1:输出 |
GPxDAT | 独立读写IO口寄存器 | 当IO方向为输入时为只读寄存器; 当IO方向为输出时,可以通过GPxSET设置该寄存器值 |
GPxSET | 置1寄存器 | 写1有效,写0无效 |
GPxCLEAR | 清0寄存器 | 写1有效,写0无效 |
GPxTOOGLE | 翻转寄存器 | 写1有效,写0无效 |
GPAPUD | 是否上拉寄存器 | 0:上拉 1:不上拉 |
二、代码
要点亮led灯,需要关注以下几个方面:
- 1、电路图找到led所在GPIO,看是否需要上拉
- 2、所对应GPIO口需要关闭复用功能,作为普通IO口使用
- 3、配置GPIO口为输出口
- 4、将该GPIO配置为低电平或高电平
代码如下(详细代码结构体解析见下章)
/* 设置GPIO口为输出口,并输出低电平 */
GpioCtrlRegs.GPCPUD.bit.GPIO64 = 0; /* 上拉 */
GpioCtrlRegs.GPCMUX1.bit.GPIO64 = 0; /* GPIO64属于C组前半部分GPIO,故为GPCMUX1 */
GpioCtrlRegs.GPCDIR.bit.GPIO64 = 1; /* 1:表示方向为输