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;			// 按下,灯灭,取反后按位与
		}
	}
}


Comments