首页 第10 章 IO 端口

第10 章 IO 端口

举报
开通vip

第10 章 IO 端口 I/O 10 第 10章 I/O端口 目录 本章包括下列主题: 10.1 简介 ............................................................................................................................. 10-2 10.2 I/O PORTx控制寄存器 ....................................................................

第10 章 IO 端口
I/O 10 第 10章 I/O端口 目录 本章包括下列主题: 10.1 简介 ............................................................................................................................. 10-2 10.2 I/O PORTx控制寄存器 ................................................................................................ 10-3 10.3 外设复用 ...................................................................................................................... 10-5 10.4 电平变化 通知 关于发布提成方案的通知关于xx通知关于成立公司筹建组的通知关于红头文件的使用公开通知关于计发全勤奖的通知 (CN)引脚 .......................................................................................... 10-7 10.5 休眠和空闲模式下的 CN操作 ..................................................................................... 10-8 10.6 寄存器 ......................................................................................................................... 10-9 10.7 相关应用笔记 ............................................................................................................ 10-11 10.8 版本历史 .................................................................................................................... 10-12 © 2009 Microchip Technology Inc. DS70230C_CN 第 10-1页 端 口 PIC24H系列参考手册 10.1 简介 本章提供关于 PIC24H 器件系列的 I/O 端口的信息。所有器件引脚(除 VDD、 VSS、 MCLR 和 OSC1/CLKI外),均为外设与通用 I/O端口所共用。 通用 I/O 端口可供 PIC24H 监视和控制其他器件。大多数 I/O 引脚与备用功能复用。复用将取决 于不同器件上的外设功能部件。一般来说,当某个外设正在工作时,其对应的引脚就不能被用作 通用 I/O引脚。 图 10-1给出了典型 I/O端口的框图。该框图没有考虑 I/O引脚上可能复用的外设功能。 图 10-1: 专用端口结构框图 QD CK 写 LAT TRIS锁存器 I/O引脚 写端口 数据总线 QD CK 数据锁存器 读 LAT 读端口 读 TRIS 写 TRIS I/O单元 专用端口模块 DS70230C_CN 第 10-2页 © 2009 Microchip Technology Inc. 第 10章 I/O端口 I/O 端 口 10 10.2 I/O PORTx控制寄存器 所有 I/O端口都有 4个与该端口操作直接相关的寄存器,其中字母“x”表示特定的 I/O端口: • TRISx:数据方向寄存器 • PORTx:I/O端口寄存器 • LATx:I/O锁存寄存器 • ODCx:漏极开路控制寄存器 器件上的每个 I/O引脚在 TRIS、 PORT和 LAT寄存器中都分别有一个相关的位。 10.2.1 TRIS寄存器 TRISx 寄存器控制位决定与 I/O 端口相关的各个引脚是输入引脚还是输出引脚。如果某个 I/O 引 脚的 TRIS位为 1,则该引脚是输入引脚。如果某个 I/O引脚的 TRIS位为 0,则该引脚被配置为 输出引脚。这很好记,因为 1很像 I(Input,输入), 0很像 O(Output,输出)。复位后,所 有端口引脚都被定义为输入。 10.2.2 PORTx寄存器 通过PORTx寄存器访问 I/O引脚上的数据。读PORTx寄存器是读取 I/O引脚上的值,而写PORTx 寄存器是将值写入端口数据锁存器。 很多指令,如 BSET和 BCLR指令,都是读 -修改 -写操作指令。因此,写一个端口就意味着读该 端口引脚的电平,修改读到的值,然后再将改好的值写入端口数据锁存器。当与端口相关的 I/O 引脚被配置为输入,并且在 PORTx寄存器上使用读 -修改 -写命令时,应当特别小心。如果某个 配置为输入的 I/O引脚在过了一段时间后变成输出引脚,则该 I/O引脚上可能会输出一个意外值。 产生这种情况的原因是读 - 修改 - 写指令读取了输入引脚上的瞬时值,并将该值装入了端口数据 锁存器。 此外,如果在 I/O引脚被配置为输出时在 PORTx寄存器上使用了读 -修改 -写指令,根据器件速度 和 I/O容性负载的情况可能出现意外的 I/O行为。图 10-2所示为当用户应用程序试图对 PORTA寄 存器使用两条连续的读 -修改 -写指令将PORTA上 I/O的 bit 0和 bit 1置 1时,所出现的意外情况。 当CPU速度很快并且 I/O引脚上的容性负载很大时,示例代码的意外结果是只有 I/O的bit 1被置1。 图 10-2: 意外的 I/O行为示例 注: 端口和可用 I/O引脚的总数将取决于不同的器件。在一个给定的器件中,可能并没有 实现端口控制寄存器中的所有位。更多详细信息,请参见具体器件数据手册。 I/O引脚 1电压 I/O引脚 0电压 1 2 3 4 BSET PORTA, #0指令执行结束。 I/O引脚 0上的电压开始上升。 BSET PORTA, #1指令开始执行并读取 PORTA寄存器(bit 0读为 0)。 I/O引脚 0从 0跳变为 1。 BSET PORTA, #1指令执行结束。 I/O 引脚 1的电压开始上升,而 I/O引脚 0 的电压开始下降。 示例代码: BSET PORTA, #0 ; Set pin 0 on Port A to ‘1’ BSET PORTA, #1 ; Set pin 1 on Port A to ‘1’ © 2009 Microchip Technology Inc. DS70230C_CN 第 10-3页 PIC24H系列参考手册 执行第一条 BSET指令时,它会向 PORTA寄存器中的 bit 0写入 1,这将导致引脚 0上的电平开 始上升为逻辑电平 1(见图 10-2中的步骤 1)。但是,如果在引脚 0上的电平达到逻辑 1的门限 值之前执行第二条 BSET指令(见图 10-2中的步骤 3),则第二条 BSET(读 -修改 -写)指令 读取的 bit 0值为 0,然后它会将该值重新写入 PORTA寄存器(见图 10-2中的步骤 2)。即,它 从 PORTA 寄存器读取的值不是 0x0001,而是 0x0000,之后将它修改为 0x0002(而不是期望 值 0x0003),并将该值重新写入 PORTA寄存器。这将导致引脚 0上的电压开始下降为逻辑 0, 引脚 1上的电压开始上升为逻辑 1(见图 10-2中的步骤 4)。 10.2.3 LAT寄存器 与 I/O引脚相关的 LATx寄存器消除了可能在执行读 -修改 -写指令过程中发生的问题。读 LATx 寄存器将返回保存在端口输出锁存器中的值,而不是 I/O 引脚上的值。对与某个 I/O 端口相关的 LAT寄存器进行读 -修改 -写操作,避免了将输入引脚值写入端口锁存器的可能性。写 LATx寄存 器与写 PORTx寄存器的效果相同。 下面的示例使用 LATx寄存器来设置两个 I/O位: 例 10-1: 使用 LATx寄存器设置 I/O引脚 PORTx和 LAT寄存器之间的差异可以归纳如下: • 写 PORTx寄存器就是将数据值写入端口锁存器 • 写 LATx寄存器就是将数据值写入端口锁存器 • 读 PORTx寄存器就是读取 I/O引脚上的数据值 • 读 LATx寄存器就是读取保存在端口锁存器中的数据值 对于特定器件无效的任何位及其相关的数据和控制寄存器都将被禁止。这意味着对应的 LATx 和 TRISx寄存器以及该端口引脚将读为零。 10.2.4 漏极开路控制寄存器 除 PORTx、LAT和 TRIS寄存器用于数据控制外,每个端口引脚也可被单独地配置为数字输出或漏 极开路输出。这是由与每个端口相关的漏极开路控制寄存器ODCx控制的。将其中的任何位置 1即 可将相应的引脚配置为漏极开路输出。 这种漏极开路特性允许通过使用外部上拉电阻,在所需的任意仅用作数字功能的引脚上产生高于 VDD(如 5V)的输出电压。(与模拟功能复用的引脚不支持漏极开路 I/O特性。)所允许的最大 漏极开路电压与最大 VIH规范相同。端口引脚和外设配置都支持漏极开路输出特性。 BSET LATA, #0 ;Set pin 0 on Port A to ‘1’ BSET LATA, #1 ;Set pin 1 on Port A to ‘1’ DS70230C_CN 第 10-4页 © 2009 Microchip Technology Inc. 第 10章 I/O端口 I/O 端 口 10 10.3 外设复用 当某个外设使能时,相关引脚的输出驱动器通常由模块控制,而有些可由用户设置。可以通过输 入数据路径读该 I/O引脚,但 I/O端口位的输出驱动器通常被禁止。 与另一个外设共用一个引脚的 I/O 端口总是服从于该外设。外设的输出缓冲数据和控制信号提供 给一对多路开关。这对多路开关用于选择 I/O 引脚的输出数据和控制信号是属于外设还是相应的 端口。图 10-3所示为端口如何与其他外设共用,以及端口所连接的相关 I/O引脚。 图 10-3: 共用端口结构框图 10.3.1 I/O与多个外设复用 对于有些 PIC24H 器件,尤其是那些 I/O 引脚数较少的器件,其每个 I/O 引脚可能要复用多个外 设功能。图 10-3所示为两个外设与同一个 I/O引脚复用的示例。 I/O引脚的名称定义了与该引脚相关的各个功能的优先级。如图 10-3所示,概念化的 I/O引脚与 两个外设(外设 A和外设 B)复用,并命名为 PERA/PERB/PIO。 已为I/O引脚选择了适当的名称,以便用户可以方便地识别分配给该引脚的功能的优先级。图10-3 所示为外设 A对引脚的控制具有最高优先权的示例。如果外设 A和外设 B同时使能,外设 A将 控制 I/O引脚。 注: 一些端口与 ADC模块引脚共用。要使用 I/O端口功能,即使关闭了 ADC模块,也 必须将 AD1PCFG和 AD2PCFG寄存器中的相应位(如果有)设为 1。 QD CK TRIS锁存器 数据总线 QD CK 数据锁存器 读 LAT 读端口 读 TRIS 写 TRIS PIO模块 写 LAT 写端口 0 1外设 A输出使能 0 1 外设 A使能 外设 B使能 外设 B输出使能 0 1外设 A数据 0 1外设 B数据 R外设 A输入 R外设 B输入 PERA/PERB/PIO 外设多路开关 I/O引脚 © 2009 Microchip Technology Inc. DS70230C_CN 第 10-5页 PIC24H系列参考手册 10.3.1.1 软件输入引脚控制 分配给某个 I/O 引脚的一些功能可能是那些不控制引脚输出驱动器的输入功能。这类外设的一个 示例就是输入捕捉模块。如果使用相应的 TRIS 控制位将与输入捕捉相关的 I/O 引脚配置为输出 引脚,则用户可通过其相应的 PORTx 寄存器手动影响输入捕捉引脚的状态。这种做法在有些情 况下很有用,尤其适用于在没有外部信号连接到输入引脚时进行测试。 如图 10-3所示,外设多路开关的结构将决定外设输入引脚是否可以通过使用 PORTx寄存器用软件 控制。当使能外设功能时,图中所示的概念化的外设会断开 I/O引脚与 PORTx数据的连接。 一般来说,以下外设允许通过 PORTx寄存器手动控制它们的输入引脚: • 外部中断引脚 • 定时器时钟输入引脚 • 输入捕捉引脚 • PWM故障引脚 大多数串行通信外设在使能时将完全控制 I/O 引脚,因此不能通过相应的 PORTx 寄存器影响与 该外设相关的输入引脚。这些外设包括: • SPI • I2C™ • UART • ECAN™ 10.3.1.2 引脚控制概述 当某个外设使能时,相关引脚的输出驱动器通常由模块控制,而有些可由用户设置。术语“模块 控制”(Module Control)是指相关端口引脚的输出驱动器被禁止,并且该引脚只能由外设控制 和访问。术语“用户可设置”(User Settable)是指相关外设端口引脚的输出驱动器可由用户通 过相关 TRISx SFR配置。必须正确设置 TRISx寄存器以使外设正常工作。对于“用户可设置” 的外设引脚,实际的端口引脚状态总是可通过 PORTx SFR读取。 输入捕捉外设就是一个很好的用户可设置外设的例子。用户必须写入相关的 TRIS 寄存器,将输 入捕捉引脚配置为输入。当输入捕捉使能时,由于 I/O 引脚电路仍然是激活的,可以使用软件通 过以下方法来手动产生捕捉事件:使用相关 TRIS 寄存器将输入捕捉引脚配置为输出。然后,软 件即可向相应的 LAT寄存器中写入值,以对输入捕捉引脚进行内部控制并强制产生捕捉事件。 例如,可将一个 INTx引脚配置为输出,然后通过写入相关的 LATx位即可产生 INTx中断(如果 允许了中断)。 UART就是一个模块控制外设的例子。当 UART使能时,PORTx和 TRIS寄存器不起作用,不能 用于写 RX和 TX引脚。 PIC24H上提供的大多数通信外设都是模块控制外设。 例如, SPI模块可配置为主模式,而主模式下只需用到 SDO引脚。在这种情况下,清零(设置 为逻辑 0)相关的 TRISx位即可将 SDI引脚配置为通用输出引脚。关于如何为模块配置引脚的更 多信息,请参见具体模块章节。 注: 有一些外设可能在部分器件型号上并不提供。更多信息,请参见具体器件数据手册。 DS70230C_CN 第 10-6页 © 2009 Microchip Technology Inc. 第 10章 I/O端口 I/O 端 口 10 10.4 电平变化通知(CN)引脚 电平变化通知(Change Notification,CN)引脚使 PIC24H器件系列能够向处理器发出中断请求, 以响应所选择的输入引脚上的状态变化。可以选择(使能)最多 24个输入引脚产生 CN中断。可 用的 CN输入引脚总数取决于所选的 PIC24H器件。更多详细信息,请参见器件数据手册。 图 10-4给出了 CN硬件的基本功能。 图 10-4: 输入电平变化通知框图 10.4.1 CN控制寄存器 有 4个与 CN模块相关的控制寄存器。CNEN1和 CNEN2寄存器包含 CNxIE控制位,其中“x” 表示 CN输入引脚的编号。要让某个 CN输入引脚中断 CPU,必须将其 CNxIE位置 1。 CNPU1和 CNPU2寄存器包含 CNxPUE控制位。每个 CN引脚连接一个弱上拉器件,该器件可 通过 CNxPUE控制位使能或禁止。弱上拉器件充当连接到该引脚的电流源,并且当连接了按钮或 键盘设备时,有了弱上拉器件即可不需要外部电阻。关于 CN上拉器件的电流规范,请参见器件 数据手册的“电气规范”章节。 10.4.2 CN配置和操作 CN引脚配置如下: 1. 通过将 TRISx寄存器中的相关位置 1,确保 CN引脚配置为数字输入引脚。 2. 通过将 CNEN1和 CNEN2寄存器中的相应位置 1,允许所选 CN引脚的中断。 3. 通过将 CNPU1和 CNPU2寄存器中的相应位置 1,开启所选的 CN引脚的弱上拉器件(如 需要)。 4. 清零 IFSx寄存器中的 CNIF中断标志。 5. 使用 IPCx寄存器中的 CNIP<2:0>控制位为 CN中断选择所需的中断优先级。 6. 使用 IECx寄存器中的 CNIE控制位来允许 CN中断。 当 CN中断发生时,用户应该读与该 CN引脚相关的 PORTx寄存器。这样做将清除不匹配条件, 并设置 CN 逻辑以检测下一次引脚电平变化。可以将当前的 PORTx 值与上一次 CN 中断时得到 的 PORTx读出值比较,来确定发生了电平变化的引脚。 CN中断 D Q C D Q C CN0IE(CNEN1<0>) CN0 引脚 CN0PUE (CNPU1<0>) CN0电平变化 CN1电平变化 CN23电平变化 CN1-CN23 未显示细节 © 2009 Microchip Technology Inc. DS70230C_CN 第 10-7页 PIC24H系列参考手册 CN引脚有最小输入脉冲宽度规范。更多详细信息,请参见器件数据手册的“电气规范”章节。 例 10-2: 配置和使用 CN中断 10.5 休眠和空闲模式下的 CN操作 CN模块在休眠或空闲模式下继续工作。如果使能的 CN引脚之一改变了状态, IFSx寄存器中的 CNIF状态位将被置 1。如果 IECx寄存器中的 CNIE位被置 1,则器件将从休眠或空闲模式唤醒 并恢复工作。 如果为 CN中断分配的优先级等于或小于当前的 CPU优先级,则器件会从紧随 SLEEP或 IDLE 指令后的那条指令开始继续执行。 如果为 CN中断分配的优先级大于当前的 CPU优先级,则器件将从 CN中断向量地址继续执行。 void configure CN(void) { CNEN1bits.CN3IE = 1; // Enable CN3 pin for interrupt detection IEC1bits.CNIE = 1; // Enable CN interrupts IFS1bits.CNIF = 0; // Reset CN interrupt } void __attribute__ ((__interrupt__)) _CNInterrupt(void) { // Insert ISR code here IFS1bits.CNIF = 0; // Clear CN interrupt } DS70230C_CN 第 10-8页 © 2009 Microchip Technology Inc. 第 10章 I/O端口 I/O 端 口 10 10.6 寄存器 10.6.1 电平变化通知寄存器 以下寄存器用于允许和禁止相应的 CN中断和上拉电阻。 • CNEN1:输入电平变化通知中断允许寄存器 1 • CNEN2:输入电平变化通知中断允许寄存器 2 • CNPU1:输入电平变化通知上拉使能寄存器 1 • CNPU2:输入电平变化通知上拉使能寄存器 2 寄存器 10-1: CNEN1:输入电平变化通知中断允许寄存器 1 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 CN15IE CN14IE CN13IE CN12IE CN11IE CN10IE CN9IE CN8IE bit 15 bit 8 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 CN7IE CN6IE CN5IE CN4IE CN3IE CN2IE CN1IE CN0IE bit 7 bit 0 图注: R = 可读位 W = 可写位 U = 未实现位,读为 0 -n = POR时的值 1 = 置 1 0 = 清零 x = 未知 bit 15-0 CNxIE:输入电平变化通知中断允许位 1 = 允许输入电平变化中断 0 = 禁止输入电平变化中断 寄存器 10-2: CNEN2:输入电平变化通知中断允许寄存器 2 U-0 U-0 U-0 U-0 U-0 U-0 U-0 U-0 — — — — — — — — bit 15 bit 8 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 CN23IE CN22IE CN21IE CN20IE CN19IE CN18IE CN17IE CN16IE bit 7 bit 0 图注: R = 可读位 W = 可写位 U = 未实现位,读为 0 -n = POR时的值 1 = 置 1 0 = 清零 x = 未知 bit 15-8 未实现:读为 0 bit 7-0 CNxIE:输入电平变化通知中断允许位 1 = 允许输入电平变化中断 0 = 禁止输入电平变化中断 © 2009 Microchip Technology Inc. DS70230C_CN 第 10-9页 PIC24H系列参考手册 寄存器 10-3: CNPU1:输入电平变化通知上拉使能寄存器 1 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 CN15PUE CN14PUE CN13PUE CN12PUE CN11PUE CN10PUE CN9PUE CN8PUE bit 15 bit 8 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 CN7PUE CN6PUE CN5PUE CN4PUE CN3PUE CN2PUE CN1PUE CN0PUE bit 7 bit 0 图注: R = 可读位 W = 可写位 U = 未实现位,读为 0 -n = POR时的值 1 = 置 1 0 = 清零 x = 未知 bit 15-0 CNxPUE:输入电平变化通知上拉使能位 1 = 使能输入电平变化引脚上的上拉 0 = 禁止输入电平变化引脚上的上拉 寄存器 10-4: CNPU2:输入电平变化通知上拉使能寄存器 2 U-0 U-0 U-0 U-0 U-0 U-0 U-0 U-0 — — — — — — — — bit 15 bit 8 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 CN23PUE CN22PUE CN21PUE CN20PUE CN19PUE CN18PUE CN17PUE CN16PUE bit 7 bit 0 图注: R = 可读位 W = 可写位 U = 未实现位,读为 0 -n = POR时的值 1 = 置 1 0 = 清零 x = 未知 bit 15-8 未实现:读为 0 bit 7-0 CNxPUE:输入电平变化通知上拉使能位 1 = 使能输入电平变化引脚上的上拉 0 = 禁止输入电平变化引脚上的上拉 DS70230C_CN 第 10-10页 © 2009 Microchip Technology Inc. 第 10章 I/O端口 I/O 端 口 10 10.7 相关应用笔记 本节列出了与手册本章内容相关的应用笔记。这些应用笔记可能并不是专为 PIC24H器件系列而 编写的,但其概念是相近的,通过适当修改并受到一定限制即可使用。当前与 I/O 端口相关的应 用笔记有: 标题 应用笔记编号 Implementing Wake-up on Key Stroke AN552 注: 如需获取更多 PIC24H 器件系列的应用笔记和代码示例,请访问 Microchip 网站 (www.microchip.com)。 © 2009 Microchip Technology Inc. DS70230C_CN 第 10-11页 PIC24H系列参考手册 10.8 版本历史 版本 A(2007年 2月) 这是本文档的初始版本。 版本 B(2007年 6月) 对本文档进行了少量更新。 版本 C(2008年 9月) 该版本包括以下内容更新: • 寄存器: - CNPU:输入电平变化通知上拉使能寄存器 2(见寄存器 10-4): CNxPUE:输入电平变化通知上拉使能位 1 = 使能输入电平变化引脚上的上拉 0 = 禁止输入电平变化引脚上的上拉 • 对整篇文档进行了其他少量修正,如语言和格式的更新。 DS70230C_CN 第 10-12页 © 2009 Microchip Technology Inc. 第10章 I/O端口 10.1 简介 图10-1: 专用端口结构框图 10.2 I/O PORTx控制寄存器 10.2.1 TRIS寄存器 10.2.2 PORTx寄存器 图10-2: 意外的I/O行为示例 10.2.3 LAT寄存器 例10-1: 使用LATx寄存器设置I/O引脚 10.2.4 漏极开路控制寄存器 10.3 外设复用 图10-3: 共用端口结构框图 10.3.1 I/O与多个外设复用 10.3.1.1 软件输入引脚控制 10.3.1.2 引脚控制概述 10.4 电平变化通知(CN)引脚 图10-4: 输入电平变化通知框图 10.4.1 CN控制寄存器 10.4.2 CN配置和操作 例10-2: 配置和使用CN中断 10.5 休眠和空闲模式下的CN操作 10.6 寄存器 10.6.1 电平变化通知寄存器 寄存器10-1: CNEN1:输入电平变化通知中断允许寄存器1 寄存器10-2: CNEN2:输入电平变化通知中断允许寄存器2 寄存器10-3: CNPU1:输入电平变化通知上拉使能寄存器1 寄存器10-4: CNPU2:输入电平变化通知上拉使能寄存器2 10.7 相关应用笔记 10.8 版本历史
本文档为【第10 章 IO 端口】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_991560
暂无简介~
格式:pdf
大小:258KB
软件:PDF阅读器
页数:0
分类:互联网
上传时间:2011-10-22
浏览量:27