PIC32系列 GPIO介绍
1、PIC32参考资源
PIC32系列参考手册 中文版 链接地址:PIC系列参考手册-中文版 第12章IO端口.pdf
2、GPIO寄存器介绍
1、TRIS(三态)寄存器
TRIS寄存器用于配置通过IO端口引脚的数据方向。TRIS寄存器决定PORT I/O引脚是输入还是输出。
• TRIS 位设为 1 时,相应的 I/O 端口引脚配置为输入。
• TRIS 位设为 0 时,相应的 I/O 端口引脚配置为输出。
• 读 TRIS 寄存器时,将会读取最后写入 TRIS 寄存器的值。
• 上电复位之后,所有 I/O 端口引脚都定义为输入。
2、PORT 寄存器
PORT 寄存器用于访问 (读取) I/O 引脚。
• 写 PORT 寄存器时,数据将会写入相应的 LAT 寄存器 (PORT 数据锁存器)。那些配置为输出的 I/O 端口引脚会被更新。
• 写 PORT 寄存器实际上等同于写 LAT 寄存器。
• 读 PORT 寄存器时,将会读取施加到端口 I/O 引脚的同步信号。
3、LAT 寄存器
LAT 寄存器 (PORT 数据锁存器)用于保存写入端口 I/O 引脚的数据。
• 写 LAT 寄存器时,会将数据锁存到相应的端口 I/O 引脚。那些配置为输出的 I/O 端口引脚会被更新。
• 读 LAT 寄存器时,将会读取 PORT 数据锁存器中保存的数据,而不是从端口 I/O 引脚读取数据。
4、SET、CLR 和 和 INV I/O 端口寄存器
除 TRIS、PORT 和 LAT 基址寄存器外,每个端口模块还有关联的 SET(置 1)、CLR(清零)和 INV (取反)寄存器,用于提供原子级位操作并允许更快速的 I/O 引脚操作。正如寄存器名称所示,向 SET、 CLR 或 INV 寄存器写入值会有效地执行其名称所示的操作,但只会修改相应的基址寄存器中指定为 1 的位。不会修改指定为 0 的位。
• 向 TRISASET 寄存器写入 0x0001,只会将基址寄存器 TRISA 中的 bit 0 置 1
• 向 PORTDCLR 寄存器写入 0x0020,只会将基址寄存器 PORTD 中的 bit 5 清零
• 向 LATCINV 寄存器写入 0x9000,只会将基址寄存器 LATC 中的 bit 15 和 bit 12 取反
读取 SET、CLR 和 INV 寄存器会返回未定义的值。要查看对 SET、CLR 或 INV 寄存器执行写操作后的效果,必须读取基址寄存器。
SET、CLR 和 INV 寄存器不限于 TRIS、PORT 和 LAT 寄存器。其他 I/O 端口模块寄存器 ODC、CNEN 和 CNPUE 也具有这些位操作寄存器。
5、简而言之
TRS寄存器:设置数字引脚输入还是输出,置1配为输入(默认),清0配置为输出;
LAT寄存器:写端口值
POR寄存器:读端口值
CLR寄存器:清零
SET寄存器:置1