历史上的今天
返回首页

历史上的今天

今天是:2025年03月31日(星期一)

正在发生

2020年03月31日 | MSP430使用指南12 -> GPIO

2020-03-31 来源:eefocus

GPIO即通用输入输出接口,是MCU最基本的功能,可以控制I/O口的高低电平,输入输出或映射到其他模块等功能。


如下图所示,为MSP430FR2355芯片的引脚图:

在图中,每个引脚后标注的则是每个引脚具备的复用功能,GPIO是基本功能,除去电源,地,时钟等引脚,每个引脚都可作为通用IO口使用,那么如何按照自己的要求配置每个引脚的功能呢?


下面就描述下GPIO引脚相关的寄存器(MSP430FR2xx/FR4xx):


注:并非每个MSP430 MCU都包含下属所有的寄存器,根据MCU功能的复杂性决定,具体包含的寄存器名称和数量,请查看每个芯片的datasheet和user’s guide。


首先先整体看一下GPIO口总共有哪些寄存器:

因为P1,P2,P3等寄存器名字都相似,因此,下面讲述时采用Px表示。


PxIN

 

输入寄存器(只读),代表的是当前GPIO接口的状态,0时代表低电平,1时代表高电平。


因此,在将IO口设置成输入状态时,通过这个寄存器去了解IO口的电平状态。


PxOUT

输出寄存器(读写),有两个功能:


 1.在IO口为输出状态时,决定IO口输出的状态,0时输出低电平,1时输出高电平,且可以读取此寄存器来了解当前设置的IO输出电平状态。


 2.在IO口为输入状态时,决定IO口的上拉或下拉状态,不过必须上/下拉使能寄存器使能时,才能实现上拉或下拉的效果。


PxDIR

方向寄存器(读写),1时表示output,0时表示input,默认是0。


PxREN

上/下拉电阻使能寄存器,当IO口作为输入使用时,可以使能内部的上/下拉电阻,此寄存器为使能,决定上拉还是下拉的寄存器是PxOUT。


PxSEL0

功能选择寄存器0,选择复用功能,和PxSEL1配合,最多可以选择三个复用功能,一般来说在因脚伤复用功能按照顺序描述,比如:P2.0/TB1.1/COMP0.O,表示TB1.1是第一复用功能,COMP0.O是第二复用功能,因此:P2SEL0 0bit = 1,P2SEL1 0bit = 0时选择TB1.1功能;P2SEL0 0bit = 0,P2SEL1 0bit = 1时选择COMP0.O功能。每个引脚具体的功能,请查看datasheet。


PxSEL1

功能选择寄存器1,选择复用功能,和PxSEL0配合使用,并非所有MCU都有此寄存器,一些简单的,每个引脚最多只有一个服用功能的MCU不会有这个寄存器,具体情况请查看每个MCU的datasheet。


PxSLEC

 

编码选择寄存器,简单来说,这个寄存器是和PxSEL0,PxSEL1配合使用的,因为在设置功能过程中,需要设定这两个寄存器,因此会有个先后顺序,可能在设置了PxSEL0后产生了中断,在执行中断函数时,并没有设置PxSEL1寄存器,因此这段时间可能会出现用户不想看到的问题,PxSELC这个寄存器就是解决同步问题的,当PxSELC这个寄存器对应的位置1时,那么会同时把PxSEL0和PxSEL1寄存器的值写入,避免出现上述问题。


PxIES

中断边沿选择寄存器,当使能IO口中断时,此寄存器决定着中断触发的方式,0表示上升沿触发,1表示下降沿触发。


PxIE

中断使能寄存器,置1时使能相应引脚的中断。


PxIFG

中断标志寄存器,在产证满足PxIES所描述的状态时,会置位这个标志位,即使不使能中断PxIE寄存器,也会置位这个PxIFG标志寄存器,PxIE指示决定会不会产生中断而已。


同时需要注意PxIFG在一些情况下可能会置位,比如:

PxIV

中断向量寄存器(只读),MSP430 MCU的GPIO中断对于Px口是一个向量,因此在进入后需要判断时Px口中的哪一个产生的,比如Px.0, 故需要查询这个寄存器,从上图描述中也可以看到,Px.0-Px.7的中断优先级是不一致的,0位最高,7位最低。


最最需要注意的一点:对于FR系列MCU,在设置完GPIO口功能后,一定要清除PM5CTL0寄存器中的LOCKLPM5位,这一位默认是1,即设置所有IO口位高阻态,不清除的话,GPIO功能无法使用,Flash系列的默认是0,因此不需要清除。


清除程序:

  PM5CTL0 &= ~LOCKLPM5;


在讲解完GPIO相关的寄存器后,我们给一个例程,功能是通过一个输入口中断方式去驱动一个输出口改变电平状态:


#include

 

int main(void)

{

    WDTCTL = WDTPW | WDTHOLD;               // Stop watchdog timer

    // Configure GPIO

    P1OUT &= ~BIT0;                         // Clear P1.0 output latch for a defined                                             // power-on state               

    P1DIR |= BIT0;                          // Set P1.0 to output direction

    P1OUT |= BIT3;                          // Configure P1.3 as pulled-up

    P1REN |= BIT3;                          // P1.3 pull-up register enable

    P1IES |= BIT3;                          // P1.3 Hi/Low edge

    P1IE |= BIT3;                           // P1.3 interrupt enabled

    // Disable the GPIO power-on default high-impedance mode

    // to activate previously configured port settings

    PM5CTL0 &= ~LOCKLPM5;

    P1IFG &= ~BIT3;                         // P1.3 IFG cleared

 

    while(1)

    {

        __bis_SR_register(LPM3_bits | GIE); // Enter LPM3 w/interrupt

        __no_operation();                   // For debug

        P1OUT ^= BIT0;                      // P1.0 = toggle

    }

}

 

// Port 1 interrupt service routine

#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)

#pragma vector=PORT1_VECTOR

__interrupt void Port_1(void)

#elif defined(__GNUC__)

void __attribute__ ((interrupt(PORT1_VECTOR))) Port_1 (void)

#else

#error Compiler not supported!

#endif

{

    P1IFG &= ~BIT3;                         // Clear P1.3 IFG

    __bic_SR_register_on_exit(LPM3_bits);   // Exit LPM3

}

推荐阅读

史海拾趣

Fillfactory Nv公司的发展小趣事

2015年,FIDELIX迎来了一个重要的转折点。在这一年,东芯半导体有限公司(以下简称“东芯半导体”)正式收购了FIDELIX 25.3%的股权,成为其第一大股东及实际控制人。这一收购标志着FIDELIX开始进入一个新的发展阶段。

通过与东芯半导体的合作,FIDELIX获得了更多的资金支持和市场资源。东芯半导体是一家专注于中小容量存储芯片研发、设计和销售的中国企业,在半导体领域拥有丰富的经验和资源。双方的合作不仅为FIDELIX带来了更多的发展机会,同时也加速了FIDELIX在国际市场上的扩张步伐。

在上述两个故事的基础上,可以根据FIDELIX公司的具体发展历程、重要事件、技术创新、市场策略等方面进行进一步的拓展和补充,以形成完整、详细的故事内容。

Gigabit Logic Inc公司的发展小趣事
通过控制脉冲信号的频率或占空比,可以实现更精细的调速范围。
广州基安彼(GMB)公司的发展小趣事
采用集成电路等现代电子元器件,提高了电路的可靠性和稳定性。
Bharat Electronics Ltd公司的发展小趣事

随着市场的不断变化和竞争的加剧,BEL并未满足于现状,而是积极寻求多元化发展。公司不仅拓展了原有的军事电子领域,还涉足电信、运算、公共运输和广播等多个行业。同时,BEL还积极拓展全球市场,将产品出口到多个国家和地区,实现了从区域性企业向全球性企业的跨越。

Dymec公司的发展小趣事

随着业务的不断拓展,Dymec公司逐渐意识到品质对于品牌的重要性。公司决定加大对产品质量的投入,从原材料采购到生产流程,再到质量检测,每一个环节都严格把控。这种对品质的执着追求使得Dymec公司的产品在市场上获得了良好的口碑,公司也逐渐成为了电子连接器行业的知名品牌。

ELECTRONIC ASSEMBLY公司的发展小趣事

在电子组装行业,品质是企业的生命线。一家名为“品质电子组装”的公司,从创立之初就坚持以品质为核心竞争力。公司引进了国际先进的生产设备和管理体系,建立了严格的质量控制体系,确保每一件产品都符合高标准、严要求。正是凭借着对品质的坚守和追求,品质电子组装赢得了客户的广泛赞誉和信赖,逐渐在行业中树立了良好的口碑。

问答坊 | AI 解惑

这个板块还缺点什么话题?

现在个人能够想到的就是这些啦,可能还是受到了很多的限制,自己了解的有限,以后也主要是弄这一块的,这个板块你希望还看到什么话题,希望找到什么的,我们会尽量满足,大家提提,还有这么多的版主一定能够解决你的疑问的!…

查看全部问答>

iPod shuffle拆解

看到DIY示波器的礼品是Shuffle,眼馋了好一阵子呢,看到了一篇文章,给大伙看看,实际上,别看外观那么好话,拆解完也没啥(吃不着葡萄说下葡萄酸),嘿嘿 第1页:跟U盘一样大 新iPod shuffle曝光 苹果昨天发布了第三代iPod shuffle超迷你音乐播 ...…

查看全部问答>

滤波器设计资料集锦

滤波器设计资料集锦 …

查看全部问答>

wince6.0 模拟器的问题

自己编了个wince 6.0的模拟器,下载了一个flash播放器,在开发板的真实硬件环境可以跑起来并且运行flash,但是在模拟器上只能运行flash播放器,无法运行flash文件,请问是不是需要什么库或者组件的支持?谢谢!!…

查看全部问答>

驱动程序里可以使用STL吗

我的虚拟打印机里用到gzip压缩算法,现在一个gzip算法代码,用到了STL类:如vector, 我如何把该算法代码编译到驱动程序里?…

查看全部问答>

LM3S8962 评估套件开发板申请

非常期待能够申请到板子。我是深圳清华研究院电子信息研究所的,最近所里有物联网的项目研究,这要是智能家居部分,看看能不能用这块板子作为开发平台 [ 本帖最后由 fqzxw 于 2010-10-18 09:56 编辑 ]…

查看全部问答>

请教单片机和液晶驱动的问题?

问题1。STC单片机的复位键按上后无反应,是不是我电路有错? 问题2。 液晶驱动芯片是HT1621B ,上电后屏微亮,是什么原因呢?电压不够吗?  …

查看全部问答>

:)小弟初次用STM32做的板子,请高人看看如何才能做到8位机的

小弟年前匆匆忙忙帮朋友做的小东西, 当时还没完工时的照片. 请大家看看是否做到了类似配置的8位机的成本:     6 开关量输入    6 继电器接点出    6&n ...…

查看全部问答>