11 MSP430 GPIO接口原理
作者:
MingXiao
11.1 概述
MSP430一共有9个IO,每个IO8个口,共72个IO口
大部分的接口都是复用的(GPIO和外设两个模式)
其中P1 ~ P4都是中断复用口,一共32个外部中断输入
11.2 原理与配置
- Input:PxIN;每个IO都有8bit寄存器存放输入
- Output:PxOUT;当配置为IO的输出时,就是输出的电平;当配置为输入时,0表示下拉电阻,1上拉
- Direction:PxDIR;一个方向寄存器用来确定是输入0/出1
- 上/下拉电阻使能:PxREN;0不使能,1使能
- 输出增强:PxDS;有输出增强寄存器,增强IO口的电流输出(电压恒定),输出驱动增强,但是功耗和电磁干扰变大
- 功能选择标志位:PxSEL;复用的IO口需要指定使用的功能:1=外设 ,0=IO;当选为外设时,方向根据外设的要求手动设置,且中断功能失效
- 中断标志位:PxIFG;0表示没有中断输入,1表示有
- 中断触发方式:PxIES;0表示上升沿触发,1表示下降沿触发
- 中断开启标志位:PxIE;0关,1开
- 不使用的管脚:将不使用的管脚配置为IO,方向输出,不连接,防止悬空输入,并减少功耗
MSP430的管脚需要先初始化(配置寄存器)再使用,和51不同
11.3 GPIO代码解读
按下按钮控制LED的程序中,管脚需要设置为IO
#include <msp430f6638.h>
void main(void)
{
// 初始化阶段
WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗定时器
P4DIR |= BIT5; // BITn表示第n位为1,从0开始
// P4DIR是方向寄存器
// 这里表示P4.5为输出
P4REN |= BIT0; // P4.0上/下拉电阻使能
P4OUT |= BIT0; // P4.0配置为上拉电阻
// 因为Px不能进行位操作,所以用这种方式配置
// 这样解读:上拉电阻在引脚悬空时读到的都是1,只有输入0才读到0,可以作为接地开关的入口
// 这样的开关按下后引脚读到0,因此需要配置为上拉电阻
// 真正的主程序
while (1)
{
if (P4IN & BIT0) // 按位与,只判断这个键
// 按下时P4.0=0
{
P4OUT |= BIT5; // 没按下,灯亮
}
else
{
P4OUT &= ~BIT5; // 按下,灯灭,取反后按位与
}
}
}