1. 数字I/O接口介绍
MSP拥有多达12组I/O接口(P1 - P11和PJ),其中P1 、P2具有可单独配置的中断功能,不同的设备可能还有其他中断接口。
P1口被储存在中断向量P1IV,P2口被储存在终中断量P2IV,
I/O端口可被以byte(8位)或者word(16位)方式读写;P1和P2组成PA;P3和P4组成PB;以此类推;但中断P1IV P2IV只能byte读写,不存在PAIV
2. 数字I/O操作
2.1 输入寄存器PxIN
BIT = 1 输入为高
BIT = 0 输入为低
PxIN为只读寄存器,当尝试对这些寄存器进行写操作时,会消耗大量电流
2.2 输出寄存器PxOUT
BIT = 0 输出为低
BIT = 1 输出为高
当引脚设定为IO功能输入方向,上下拉寄存器使能时
BIT = 0 下拉
BIT =1 上拉
2.3 方向寄存器PxDIR
BIT = 0 输入
BIT = 1 输出
无论使用I/O功能还是其他功能(比如中断,比较器,定时器),方向寄存器都必须初始化
2.4 上下拉寄存器RxREN
BIT = 0 上下拉使能
BIT = 1 上下拉关闭
表格总结:
2.5 输出驱动强度寄存器PxDS
BIT = 0 弱驱动(默认)
BIT = 1 强驱动
使用强驱动会增强I/O口的驱动能力。但MSP430属于超低功耗系列单片机,驱动能力有限,多个I/O工作于强驱动模式可能会导致电磁兼容问题甚至损坏单片机,不推荐使用强驱动模式。
2.6 功能选择寄存器PxSEL
BIT = 0 I/O功能
BIT = 1 外围模块功能
注意:当PxSEL = 1时,P1和P2的中断功能被关闭
2.7 端口中断
P1和P2端口的每个引脚都具有中断功能,某些设备还有其他中断引脚,其中P1中断优先级高于P2。每组中断端口配有PxIFG, PxIE, PxIES中断寄存器。中断标志寄存器PxIFG:
BIT = 0 没有中断请求
BIT = 1 中断正在请求
当向P1OUT, P1DIR, P1REN, P2OUT, P2DIR, P2REN写入数据时,满足条件也会产生中断。
中断边沿选择寄存器PxIES
Bit = 0: 上升沿产生中断
Bit = 1: 下降沿产生中断
只有引脚发生翻转才会产生中断,也就是只有上升沿或者下降沿才会产生中断。
中断使能寄存器PxIE
Bit = 0: 中断使能
Bit = 1: 中断关闭
2.8 配置没有使用的端口
建议把没有使用的端口配置为I/O端口、输出模式,避免悬浮输入和消耗功率。
因为PJ端口与JTAG功能共享,所以其默认为高阻输入。
3. LPMx.5低功耗模式下的I/O配置
进入LPMx.5时,PMM的稳压器处于关闭状态,这将导致所有I/O寄存器配置丢失,必须以不同的方式处理I/O引脚的配置,以确保应用程序以一种受控制的方式行为进入和退出LPMx.5。正确设置I/O引脚对于在LPMx.5中实现尽可能低的功耗至关重要,进入和退出LPMx.5的详细流程操作如下:
将所有I/O设置为通用I/O,并根据实际情况进行配置。不能有悬浮输入非常重要,否则会在LPMx.5中产生漏电流;某些设备可以通过中断来唤醒低功耗模式,若需要中断唤醒,配置为I/O输入模式并根据需要配置上下拉电阻。
正确进入低功耗模式,启用中断唤醒。
在进入LPMx.5时,单片机自动设置PMM模块PM5CTL0寄存器中的LOCKLPM5位为1,I/O端口寄存器锁定。注意:只保留引脚条件,所有其他端口配置寄存器设置如PxDIR,PxREN、PxOUT、PxDS、PxIES、PxIE内容丢失。
一个LPMx.5唤醒事件(例如,配置的唤醒输入引脚上产生一个边缘信号)启动BOR。所有外围寄存器都设置为默认条件。一旦退出LPMx.5,在LOCKLPM5置1时I/O端口仍然锁定。保持I/O端口锁定确保所有引脚在进入主动模式时保持稳定,而不管默认的I/O寄存器设置。
当进入活跃模式,没有保留的I/O配置和中断配置应该被恢复到进入低功耗模式之前的状态。建议重新配置PxIES和PxIE到以前的设置,以防止错误的端口中断发生。然后LOCKLPM5位可以被清除,释放I/O引脚条件和I/O中断配置。LOCKLPM5置1期间,对端口配置寄存器的任何更改都不会对I/O管脚产生影响。
启用I/O中断后,引起唤醒的I/O中断可以由PxIFG标志指示。这些标志可以直接使用,或者可以使用相应的PxIV寄存器。注意,在LOCKLPM5位被清除之前,PxIFG标志不能被清除。
注意:要使用中断,首先添加头文件#include "msp430.h" 然后_EINT(); 打开中断总开关
以下为P1.1开启中断初始化语句:
P1IE |= BIT1; //中断使能
P1IES |= BIT1; //选择下降沿触发
P1IFG &= ~BIT1; //清除中断标志位
P1REN |= BIT1; //设置p1.1为上拉电阻使能
P1OUT |= BIT1; //将P1.1输出拉高
以下为中断服务子程序示例,注意要手动清除中断标志位:
#pragma vector = PORT1_VECTOR
__interrupt void P1_IRQ(void)
{
delay(255); //按键消抖,延时程序自写
if(P1IFG&0x02) //判断中断来源
{
P4OUT^=BIT7; // 翻转输出
P1IFG &= ~BIT1; //清除中断标志位
}
}
上一篇:MSP430第七章:FLASH
下一篇:例程1——LED
推荐阅读最新更新时间:2024-11-17 18:19
设计资源 培训 开发板 精华推荐
- 使用 Asahi Kasei Microdevices Corporation 的 AK8140A 的参考设计
- DER-43 - 1.8W非隔离电源
- 【训练营】Hi3861舵机驱动
- MIC2207YML-EV、MIC2207YML 降压稳压器评估板
- 使用 Analog Devices 的 LTC4162IUFD-L40 的参考设计
- AD5335 并行接口、四路电压输出、10 位 DAC 的典型应用
- LT3973IMSE-5 5V、2MHz 降压转换器的典型应用
- DC2431A,基于具有扩频功能的 LT8390 高功率同步 4 开关降压-升压稳压器的演示板
- 基于51超声波测距
- 具有按钮复位功能的 LTC2939CMS 四电源监视器的典型应用电路