文档库 最新最全的文档下载
当前位置:文档库 › MSP430F5-07-IO

MSP430F5-07-IO

MSP430F5-07-IO
MSP430F5-07-IO

MSP430F5系列16位超低功耗单片机模块原理

第7章IO 输入输出端口

版本: 1.1

日期: 2008.7. 最后更新日期:2010.8.

原文: TI slau208.pdf (5xxfamily User's Guide)

翻译: 王浩武汉大学

编辑: DC微控网版主

注:以下文章是翻译TI slau208.pdf 文件中的部分内容。由于我们翻译水平有限,有整理过程中难免有所不足或错误;所以以下内容只供参考.一切以原文为准。

文章更新详情请密切留意微控技术论坛。

Page 1 of 12

第七章IO 输入输出端口

本章描述了数字IO接口的操作。在所有的5系列MSP430单片机供了数字IO接口。

主题

7.1 数字IO接口介绍

7.2 数字IO接口的操作

7.3 数字IO接口寄存器

7.1 数字IO接口介绍

5系列的MSP430最多可以提供12路数字IO接口,P1到P11和PJ。大部分接口都有8个管脚,但是有些接口会少于8个管脚。可以参考说明文档中关于接口的章节。每个I/O管脚都可以独立的设置为输入或者输出方向,并且每个I/O接线都可以被独立的读取或者写入。所有接口的寄存器都可以被独立的置位或者清零,就像设置驱动能力一样。

P1和P2接口具中断功能。从P1和P2接口的各个I/O管脚引入的中断可以独立的被使能并且设置为上升沿或者下降沿出发中断。所有的P1接口的I/O管脚的中断都来源于同一个中断向量P1IV,并且P2接口的中断都来源于另外一个中断向量P2IV。在一些MSP430x5xx单片机中,附加的接口也具有中断功能。详细说明请查阅芯片的说明文档。

每个独立的接口可以作为字节长度端口访问或者结合起来作为字长度端口进行访问。端口配对P1/P2、P3/P4、P5/P6、P7/P8等联合起来分别叫做PA、PB、PC、PD等。当进行字操作写入PA口时,所有的16为都被写入这个端口。利用字节操作写入PA口的低字节时,高字节保持不变。相似地,使用字节指令写入PA口高字节时,低字节保持不变。其它端口也是一样的,当写入的数据长度小于端口最大长度时,那些没有用到的位保持不变。所有的端口寄存器都利用这个规则来命名,除了中断向量寄存器P1IV和P2IV。它们只能进行字节操作,并且PAIV这个寄存器根本不存在。

利用字操作读取端口PA可以使所有16位数据传递到目的地。利用字节操作读取端口PA (P1或者P2)的高字节或者低字节并且将它们存储到存储器时可以只把高字节或者低字节分别传递到目的地。利用字节操作读取PA口数据并写入通用寄存器时整个字节都被写入寄存器中最不重要的字节。寄存器中其它重要的字节会自动清零。端口PB、PC、PD和PE都可以进行相同的操作。当读入的数据长短小于端口最大长度时,那些没有用到的位被视零,PJ口也是一样的。

数字IO接口功能,包括:

·可以独立编程的独立的I/O管脚

·可以以任意方式混合地输入、输出

·可以独立的设置P1和P2口中断

·独立的输入、输出数据寄存器

·可以独立的将寄存器置位或者清零

7.2 数字IO接口的操作

数字IO接口可以被使用者的软件配置。数字IO接口的设置和操作将在以

下部分进行说明。

7.2.1 输入寄存器 PxIN

当I/O管脚被配置为普通IO口时,对应IO口的信号输入值表现为输入寄存器中的每一个位。

·位为零:输入为低

·位为一:输入为高

Page 2 of 12

注意:写只读寄存器PxIN

写这些只读寄存器会导致在写操作被激活的时候电流的增加。

7.2.2 输出寄存器 PxOUT

当I/O管脚被配置为普通IO口并且为输出方向时,对应IO口的输出值表现为输出寄存器中的每一个位。

·位为零:输出为低

·位为一:输出为高

如果管脚被配置为普通I/O功能、输出方向并且置位寄存器使能时,PxOUT寄存器的相应管脚被选择置高或者置低。

·位为零:该管脚置低

·位为一:该管脚置高

7.2.3 方向寄存器 PxDIR

PxDIR寄存器中的每一位选择相应管脚的输入输出方向,不管该管脚实现何功能。当管脚被设置为其它功能时方向寄存器中对应的值应被设置为该管脚所实现功能要求的方向值。

·位为零:管脚转变为输入方向

·位为一:管脚转变为输出方向

7.2.4 置高/置低寄存器使能寄存器 PxREN

PxREN寄存器中的每一位可以使能相应I/O管脚的置高/置低寄存器。PxOUT寄存器中相应的位选择管脚是否置高或者置低。

·位为零:置高/置低寄存器关闭

·位为一:置高/置低寄存器使能

表7-1 总结I/O口配置时PxDIRx、PxRENx和PxOUTx寄存器的用法

表7-1 I/O配置

PxDIRx PxRENx PxOUTx I/O口配置

0 0 x 输入

0 1 0 置低

0 1 1 置高

1 x x 输出

7.2.5 输出驱动能力寄存器 PxDS

PxDS寄存器中的每一位选择全力驱动或者减弱驱动能力。默认的是减弱驱动能力。

·位为零:减弱驱动能力

·位为一:全力驱动能力

7.2.6 功能选择寄存器 PxSEL

接口管脚的功能因外围模块的功能不同而不同。参考器件的说明文档来决定管脚的功能。

Page 3 of 12

PxSEL寄存器中的每一位选择对应管脚的功能——普通I/O功能或者外围模块功能。

·位为零:管脚选择为普通I/O功能

·位为一:管脚选择为外围模块功能

设置PxSELx = 1不会自动设置管脚的输入输出方式。其它外围模块功能需要根据模块功能所要求的方向设置PxSELx位。参考说明文档中的管脚示意图。

注意:当PxSEL=1时,P1和P2口的中断功能被关闭

当PxSEL的任意一位被置位时,相应管脚的中断功能被关闭。因此从这些管脚引入

的信号不能触发P1或者P2口中断,不管相应P1IE和P2IE寄存器的状态。

当一个接口的管脚被选择作为到外围设备的输出时,这个到外围设备的输

出信号就是这个设备管脚的锁存请求信号。当PxSELx=1时,内部输入信号

将跟随这个管脚的信号。但是,如果PxSELx=0,在PxSELx复位前到外围

设备的输入会保持这个管脚的输入信号值不变。

7.2.7 P1和P2口中断

当配置了PxIFG, PxIE, and PxIES寄存器后P1和P2口的每一个管脚都具有中断功能。所有的P1口中断标志位都是区分优先级并结合在同一个中断向量中的,例如P1IFG.0具有最高相应优先级。最高优先级使能中断在P1IV寄存器中产生一个序号。这个数字会被程序计数器识别或者加入其中自动的执行合适的中断服务程序。关闭P1口中断不会影响P1IV寄存器中的值。P2口具有相同的功能。PxIV寄存器只能字访问。

PxIFGx寄存器的每一位都是相应I/O管脚的中断标志位并且当该管脚被选择的中断触发沿产生时被置位。当相应的PxIE寄存器和GIE寄存器位被置位时,所有的PxIFGx中断标志寄存器都可以请求一个中断。软件同样可以使PxIFG标志位置位,这就提供了一种由软件产生中断的方法。

·位为零:没有中断等待响应

·位为一:有中断等待响应

只有电平的跳变才能产生中断。如果在一个Px口中断服务程序执行期间或者Px口中断服务程序的RETI指令执行之后有任何一个PxIFGx位被置位,这个中断标志位就会触发另外一个中断。这样就可以保证每一个跳变都可以被识别。

注意:当PxOUT、PxDIR或者PxREN寄存器值改变时的PxIFG标志位

写P1OUT、P1DIR、P1REN、P2OUT、P2DIR或者P2REN寄存器会导致相应的P1IFG或

者P2IFG标志位置位。

任何对P1IV寄存器的读写和访问操作都会自动使最高响应优先级中断标

志位复位。如果另外一个中断标志位被置位,在响应完已发起的中断以后

另外一个中断立即会被触发。例如,假设P1IFG.0拥有最高优先级。如果

中断服务程序访问P1IV寄存器时P1IFG.0和P1IFG.2被置位,P1IFG.0会

自动复位。当中断服务程序的RETI指令执行以后,P1IFG.2标志位会触发

另外一个中断。

P2口中断有相同的应用,利用P2IV寄存器并且源于另一个同一的中断向

量。

P1IV、P2IV的软件例程

Page 4 of 12

以下的软件例程展示了P1IV的推荐用法和处理开销。P1IV的值被加入到程序计数器中并自动跳转到合适的中断服务程序。P2IV也是相似的。

右边空白处的数字显示了每条指令执行所必须消耗的CPU周期。软件处理不同的中断源的开销包括中断潜伏期和中断返回周期,但不包括处理操作本身。

;Interrupt handler for P1IFGx Cycles P1_HND ... ; Interrupt latency 6

ADD &P1IV,PC ; Add offset to Jump table 3

RETI ; Vector 0: No interrupt 5

JMP P1_0_HND ; Vector 2: Port 1 bit 0 2

JMP P1_1_HND ; Vector 4: Port 1 bit 1 2

JMP P1_2_HND ; Vector 6: Port 1 bit 2 2

JMP P1_3_HND ; Vector 8: Port 1 bit 3 2

JMP P1_4_HND ; Vector 10: Port 1 bit 4 2

JMP P1_5_HND ; Vector 12: Port 1 bit 5 2

JMP P1_6_HND ; Vector 14: Port 1 bit 6 2

JMP P1_7_HND ; Vector 16: Port 1 bit 7 2 P1_7_HND ; Vector 16: Port 1 bit 7

... ; Task starts here

RETI ; Back to main program 5 P1_6_HND ; Vector 14: Port 1 bit 6

... ; Task starts here

RETI ; Back to main program 5 P1_5_HND ; Vector 12: Port 1 bit 5

... ; Task starts here

RETI ; Back to main program 5 P1_4_HND ; Vector 10: Port 1 bit 4

... ; Task starts here

RETI ; Back to main program 5 P1_3_HND ; Vector 8: Port 1 bit 3

... ; Task starts here

RETI ; Back to main program 5 P1_2_HND ; Vector 6: Port 1 bit 2

... ; Task starts here

RETI ; Back to main program 5 P1_1_HND ; Vector 4: Port 1 bit 1

... ; Task starts here

RETI ; Back to main program 5 P1_0_HND ; Vector 2: Port 1 bit 0

... ; Task starts here

RETI ; Back to main program 5

中断触发沿选择寄存器 P1IES P2IES

PxIES寄存器的每一位为相应的I/O管脚选择中断触发沿。

·位为零:上升沿将PxIFGx中断标志位置位

·位为一:下降沿将PxIFGx中断标志位置位

Page 5 of 12

注意:写PxIESx寄存器

写P1IES和P2IES可以导致相应中断标志位置位。

PxIESx PxINx PxIFGx

0→1 0 可以置位

0→1 1 不改变

1→0 0 不改变

1→0 1 可以置位

中断使能寄存器 P1IE、P2IE

PxIE寄存器的每一位使能相联系PxIFG中断标志位。

·位为零:中断关闭

·位为一:中断使能

7.2.8 配置未使用的端口管脚

未使用的I/O管脚应被设置为普通I/O功能、输出方向并且在PCB板上不连接这些管脚,以防止浮动的输入和降低功耗。因为这些管脚没有被连接,所以它们的输出值没有必要在意。或者可以通过设置未使用管脚的PxREN寄存器来使能置高/置低寄存器以避免浮动输入的干扰。关闭未使用的管脚可以参考系统复位,中断和操作模式章节。

注意:配置PJ端口和共享JTAG管脚

记住在应用中特别注意保证PJ口被合适的配置以防范浮动输入的干扰时很重要

的。因为PJ端口被共享为JTAG功能,在仿真环境中浮动输入可能不会被注意到。

默认情况下PJ端口被初始化为高阻态。

Page 6 of 12

7.3 数字I/O端口寄存器

在表7-2中列出了所有数字I/O端口寄存器。起始地址可以在芯片说明文

档中找到。每个端口由它的起始地址分组。在表7-2中给出了地址偏移量。

表7-2 数字I/O端口寄存器

端口寄存器简称偏移量寄存器类型初始状态

P1 P1口中断 P1IV 0Eh 只读 0000h P2 P2口中断 P2IV 1Eh 只读 0000h

P1 输入 P1IN 00h 只读

输出 P1OUT 02h 读/写不改变

方向 P1DIR 04h 读/写 00h

寄存器使能 P1REN 06h 读/写 00h

输出驱动能力 P1DS 08h 读/写 00h

端口功能选择 P1SEL 0Ah 读/写 00h

中断沿选择 P1IES 18h 读/写不改变

中断使能 P1IE 1Ah 读/写 00h

中断标志 P1IFG 1Ch 读/写 00h

P2 输入 P2IN 01h 只读

输出 P2OUT 03h 读/写不改变

方向 P2DIR 05h 读/写 00h

寄存器使能 P2REN 07h 读/写 00h

输出驱动能力 P2DS 09h 读/写 00h

端口功能选择 P2SEL 0Bh 读/写 00h

中断沿选择 P2IES 19h 读/写不改变

中断使能 P2IE 1Bh 读/写 00h

中断标志 P2IFG 1Dh 读/写 00h

P3 输入 P3IN 00h 只读

输出 P3OUT 02h 读/写不改变

方向 P3DIR 04h 读/写 00h

寄存器使能 P3REN 06h 读/写 00h

输出驱动能力 P3DS 08h 读/写 00h

端口功能选择 P3SEL 0Ah 读/写 00h

表7-2 数字I/O端口寄存器

端口寄存器简称偏移量寄存器类型初始状态

Page 7 of 12

P4 输入 P4IN 01h 只读

输出 P4OUT 03h 读/写不改变

方向 P4DIR 05h 读/写 00h

寄存器使能 P4REN 07h 读/写 00h

输出驱动能力 P4DS 09h 读/写 00h

端口功能 P4SEL 0Bh 读/写 00h

P5 输入 P5IN 00h 只读

输出 P5OUT 02h 读/写不改变

方向 P5DIR 04h 读/写 00h

寄存器使能 P5REN 06h 读/写 00h

输出驱动能力 P5DS 08h 读/写 00h

端口功能选择 P5SEL 0Ah 读/写 00h

P6 输入 P6IN 01h 只读

输出 P6OUT 03h 读/写不改变

方向 P6DIR 05h 读/写 00h

寄存器使能 P6REN 07h 读/写 00h

输出驱动 P6DS 09h 读/写 00h

端口功能选择 P6SEL 0Bh 读/写 00h

P7 输入 P7IN 00h 只读

输出 P7OUT 02h 读/写不改变

方向 P7DIR 04h 读/写 00h

寄存器使能 P7REN 06h 读/写 00h

输出驱动能力 P7DS 08h 读/写 00h

端口功能选择 P7SEL 0Ah 读/写 00h

P8 输入 P8IN 01h 只读

输出 P8OUT 03h 读/写不改变

方向 P8DIR 05h 读/写 00h

寄存器使能 P8REN 07h 读/写 00h

输出驱动能力 P8DS 09h 读/写 00h

端口功能选择 P8SEL 0Bh 读/写 00h

_

表7-2 数字I/O端口寄存器

__________ 端口寄存器简称偏移量寄存器类型初始状态

__________ P9 输入 P9IN 00h 只读

输出 P9OUT 02h 读/写不改变

方向 P9DIR 04h 读/写 00h

寄存器使能 P9REN 06h 读/写 00h

Page 8 of 12

输出驱动能力 P9DS 08h 读/写 00h

端口功能选择 P9SEL 0Ah 读/写 00h

P10 输入 P10IN 01h 只读

输出 P10OUT 03h 读/写不改变方向 P10DIR 05h 读/写 00h

寄存器使能 P10REN 07h 读/写 00h

输出驱动能力 P10DS 09h 读/写 00h

端口功能选择 P10SEL 0Bh 读/写 00h

P11 输入 P11IN 00h 只读

输出 P11OUT 02h 读/写不改变方向 P11DIR 04h 读/写 00h

寄存器使能 P11REN 06h 读/写 00h

输出驱动能力 P11DS 08h 读/写 00h

端口功能选择 P11SEL 0Ah 读/写 00h

PJ 输入 PJIN 00h 只读

输出 PJOUT 02h 读/写不改变方向 PJDIR 04h 读/写 00h

寄存器使能 PJREN 06h 读/写 00h

输出驱动能力 PJDS 08h 读/写 00h

Page 9 of 12

P1IV,P1口中断向量寄存器

P1IVx 位15-0 P1口中断向量值

_________________ P1IVx目录中断源中断标志中断优先级

00h 无中断

02h P1.0口中断 P1IFG.0 最高

04h P1.1口中断 P1IFG.1

06h P1.2口中断 P1IFG.2

08h P1.3口中断 P1IFG.3

0Ah P1.4口中断 P1IFG.4

0Ch P1.5口中断 P1IFG.5

0Eh P1.6口中断 P1IFG.6

10h P1.7口中断 P1IFG.7 最低 ___________________

P2IV,P2口中断向量寄存器

P2IVx 位15-0 P2口中断向量值

_________________ P1IVx目录中断源中断标志中断优先级

00h 无中断

02h P2.0口中断 P2IFG.0 最高

04h P2.1口中断 P2IFG.1

06h P2.2口中断 P2IFG.2

08h P2.3口中断 P2IFG.3

0Ah P2.4口中断 P2IFG.4

0Ch P2.5口中断 P2IFG.5

0Eh P2.6口中断 P2IFG.6

10h P2.7口中断 P2IFG.7 最低

__________________

Page 10 of 12

P1IES,P1口中断触发沿选择寄存器

P1IES 位7-0 P1口中断触发沿选择

0 上升沿P1IFGx标志位置位

1 下降沿P1IFGx标志位置位P1IE,P1口中断使能寄存器

P1IE 位7-0 P1口中断使能

0 关闭相应端口中断

1 使能相应端口中断

P1IFG,P1口中断标志寄存器

P1IFG 位7-0 P1口中断标志

0 无中断

1 有中断

P2IES,P2口中断触发沿选择寄存器

P2IES 位7-0 P2口中断触发沿选择

0 上升沿P2IFGx标志位置位

1 下降沿P2IFGx标志位置位P2IE,P2口中断使能寄存器

P2IE 位7-0 P2口中断使能

0 关闭相应端口中断

1 使能相应端口中断

P2IFG,P2口中断标志寄存器

P2IFG 位7-0 P2口中断标志

0 无中断

Page 11 of 12

1 有中断

PxIN,Px口输入寄存器

PxIN 位7-0 Px口输入,只读

PxOUT,Px口输出寄存器

PxOUT 位7-0 Px口输出

当IO口配置为输出模式时:

0 输出低电平

1 输出高电平

当IO口配置为输入模式并且置高/置低使能时:

0 置低

1 置高

PxDIR,Px口方向寄存器

PxDIR 位7-0 Px口方向

0 端口配置为输入

1 端口配置为输出

PxREN,Px口寄存器使能寄存器

PxREN 位7-0 Px口置高/置低寄存器使能

0 关闭置高/置低

1使能置高/置低

PxDS,Px口输出驱动能力寄存器

PxDS 位7-0 Px口输出驱动能力

0 减弱输出驱动能力

1全力输出驱动能力

Page 12 of 12

相关文档