12.1 简介
通用 I/O引脚可被认为是最简单的外设。它们使 PIC MCU可以监视和控制其他器件。为了提高器件的灵活性和功能性,一些引脚与备用功能复用。这些功能取决于不同器件上的外设功能部件。一般来说,当外设被使能时,其对应的引脚就不能被用作通用 I/O引脚。
大多数 PIC24F系列器件支持外设引脚选择(Peripheral Pin Select,PPS)功能。PPS 组成的引脚可供用户映射到一些外设的输入和/或输出。
12.2 I/O 端口控制寄存器
所有 I/O端口都有 4 个与该端口操作直接相关的寄存器,其中字母 “x”表示特定的 I/O端口:
•TRISx:数据方向寄存器
•PORTx:I/O端口寄存器
•LATx:I/O锁存寄存器
•ODCx:I/O开漏控制寄存器
器件上的每个 I/O引脚在 TRIS、 PORT、LAT 和ODC 寄存器中都分别有一个相关的位。
12.3 外设复用
引脚还可以配置为数字输入或输出,以及模拟输入或输出。当配置为数字输入时,它们作为 TTL缓冲器或施密特触发器。当配置为数字输出时,它们作为 CMOS驱动器或开漏输出。许多引脚还支持一个或多个外设模块。当配置为操作外设时,引脚不能用作通用输入或输出。在许多情况下,虽然一些外设会改写 TRIS 配置,引脚仍必须配置为输入或输出。图 12-2 所示为端口如何与其他外设共用,以及端口所连接的相关 I/O 引脚。对于一些 PIC24F 器件,可以在每个I/O 引脚复用多个外设功能。外设功能的优先级取决于具体产品数据手册中引脚图中的引脚说明的顺序。
12.4 外设引脚选择
通用器件的一个主要挑战是提供尽可能多的外设功能并同时最大限度地减小 I/O 引脚的功能冲突。器件引脚数很少时这种挑战则更加巨大。当应用需要多于一个外设分配给某个引脚时,可能此时惟一的选择就是对应用代码进行复杂的变通或完全重新设计。
外设引脚选择配置则提供了这些选择以外的另一种方法,可使用户进行外设集选择并将其置于多个 I/O 引脚上。用户可通过增加某一器件的引脚排列选择使单片机更好地适应整个应用,而不是修改应用来适应器件。
外设引脚选择配置特性只在固定的一些数字 I/O 引脚上使用。用户可分别将大多数数字外设输入和 / 或输出进行映射。外设引脚选择在软件中完成,通常无需对器件进行重新编程。外设映射一旦建立,硬件就会对其进行保护以免其意外或误改变。
输入映射与输出映射是不一样的:
输入映射:
外设引脚选择选项的输入根据外设进行映射;即,与外设相关的控制寄存器指示要映射到的引脚。RPINRx寄存器用于配置外设输入映射(见寄存器 10-8 至寄存器 10-28)。各寄存器均包含两组 6 位位域,每组都与一个可选引脚的外设相关。给指定外设的位域赋上正确的 6位值,会将具有此值的 RPn/RPIn引脚映射到该外设。对于任何给定器件,任何位域值的有效范围对应于此器件所支持的外设引脚选择的最大值。
输出映射:
与输入相反,外设引脚选择选项的输出根据引脚进行映射。这种情况下,与特定引脚相关的控制寄存器指示要映射的外设输出。 RPORx 寄存器用于控制输出映射。每个寄存器均包含两组 6 位位域;各位域都与一个RPn 引脚相关(见寄存器10-29 至寄存器10-44)。位域值对应一个外设,该外设的输出映射到引脚。
由于采用的映射技术,输出映射的外设列表中还包含一个空值 000000。此值允许任何给定引脚保持与所有可选引脚的外设的输出断开。
具体映射参考手册。
正常工作时,不允许写 RPINRx 和 RPORx 寄存器;尝试进行写操作外表看起来会正常执行,但寄存器的内容将保持不变。要更改这些寄存器,应在硬件中将其解锁。寄存器锁定由 IOLOCK 位(OSCCON<6>)控制。将IOLOCK 置1 可阻止控制寄存器被写入;将 IOLOCK清零允许写入。
要将 IOLOCK置1 或清零,必须执行以下特定命令序列:
1)将 46h写入 OSCCON<7:0>。
2)将 57h写入 OSCCON<7:0>。
3)以单个操作清零(或置 1)IOLOCK。
解锁 / 锁定序列必须以与更改振荡器配置相同的方式作为汇编语言程序执行,这是因为解锁序列与定时有关。如果应用程序的主体是用 C 语言或其他高级语言编写的,则应通过写一段行内汇编程序或使用 MPLAB® C30 C 编译器提供的内置函数执行解锁序列。
IOLOCK 在被更改前将保持同一状态。这使所有外设引脚选择均可用一个解锁序列,并随后对所有控制寄存器进行更新,然后用第二个锁定序列来锁定这种方式配置。
注: MPLAB® C30 C编译器提供了内置的C语言函数用以对OSCCON寄存器进行解锁。
__builtin_write_OSCCONL(value)
__builtin_write_OSCCONH(value)
更多信息请参见 《MPLAB C30 C 编译器用户指南》。