[MSP-EXP430F5529LP] 按下开发板的复位键后PxOUT Register寄存器值是不是被清零了?

[复制链接]

2

主题

16

帖子

52

积分

一粒轻沙

Rank: 1

积分
52
楼主
查看: 6140回复: 10 发表于 2019-7-17 10:41:10   只看该作者
程序运行的工程中,按一下开发板的复位键后,IO的PxOUT Register寄存器的值是不是被清零了?

打赏

参与人数 1赫兹币 +3 收起 理由
shengxiang + 3

查看全部打赏

17

主题

137

帖子

553

积分

单晶硅锭

Rank: 3Rank: 3

积分
553
沙发
发表于 2019-7-17 13:20:23   只看该作者
是,所有寄存器复位之后都会回到默认值,PxOUT的默认值是0

2

主题

16

帖子

52

积分

一粒轻沙

Rank: 1

积分
52
板凳
发表于 2019-7-17 14:21:29   只看该作者
Shuyang 发表于 2019-7-17 13:20
是,所有寄存器复位之后都会回到默认值,PxOUT的默认值是0

谢谢“Shuyang”,不过我在仿真时发现,点击复位 Soft Reset  按钮后,寄存器窗口的其它寄存器都变为默认值0,而P1OUT寄存器却不是默认值0,一直保存着上次程序运行时赋值的值,除非给开发板断电P1OUT寄存器才会变为默认值0。下面是我的程序
void main (void)
{
    //Stop WDT
    WDT_A_hold(WDT_A_BASE);

    //将P1.0设置为输出模式
    GPIO_setAsOutputPin( GPIO_PORT_P1, GPIO_PIN0);
    //将P1.0拉高
    GPIO_setOutputHighOnPin( GPIO_PORT_P1, GPIO_PIN0);

    //Enter LPM4 w/interrupts enabled
    __bis_SR_register(LPM4_bits + GIE);
    //For debugger
    __no_operation();
}

17

主题

137

帖子

553

积分

单晶硅锭

Rank: 3Rank: 3

积分
553
4#
发表于 2019-7-17 14:44:02   只看该作者
zjs2016 发表于 2019-7-17 14:21
谢谢“Shuyang”,不过我在仿真时发现,点击复位 Soft Reset  按钮后,寄存器窗口的其它寄存器都变为默认 ...

软件复位和硬件复位可能是不同的,硬件复位之后一定是会被清零的

2

主题

16

帖子

52

积分

一粒轻沙

Rank: 1

积分
52
5#
发表于 2019-7-17 15:23:24   只看该作者
Shuyang 发表于 2019-7-17 14:44
软件复位和硬件复位可能是不同的,硬件复位之后一定是会被清零的

好的,我再去看看。

2

主题

16

帖子

52

积分

一粒轻沙

Rank: 1

积分
52
6#
发表于 2019-7-17 16:45:31   只看该作者
zjs2016 发表于 2019-7-17 15:23
好的,我再去看看。

还是不行喔,只要PxOUT Register寄存器在程序运行时被赋值后,按复位按键复位,PxOUT Register寄存器的值还是保持上一次的值。  下面是我写的测试程序,正常情况应该是开发板上电,延时一会led灯被点亮进入死循环,如果按下复位按键,程序则重头执行,实验现象和第一次一样,延时一会再点亮led灯进入死循环;  但是现在我这块开发板,执行下面的程序,上电执行程序后,按下复位键,led灯立马就亮,并没有和第一次程序执行的现象(延时一会led再亮)一样,而是一按复位后就亮,所以我怀疑还是PxOUT Register寄存器复位后没有被清零,不知道有没有其它原因,搞了一下午,感觉有点蒙
void main (void)
{
    WDTCTL = WDTPW | WDTHOLD;

    volatile unsigned int i;
    P1DIR |= 0x01; // 设置 P1.0 为输出
    P4DIR |= 0x80; // 设置 P4.7 为输出
    for( i=5; i>0; i--)//延时一段时间,再拉高对应的引脚。
    {
        __delay_cycles(500000);
    }
    P1OUT = 0x01;//点亮led1
    P4OUT = 0x80;//点亮led2
    while(1);
}

17

主题

137

帖子

553

积分

单晶硅锭

Rank: 3Rank: 3

积分
553
7#
发表于 2019-7-18 06:46:38   只看该作者
按下复位按钮时是连着ccs在线仿真吗?如果不在线仿真,只给板子供电,按复位按钮也是一样的现象吗?

73

主题

469

帖子

1005

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1005
8#
发表于 2019-7-19 10:56:40   只看该作者
首先,给你点个赞,学进去了~  实验方法也很不错,会自己设计测试用例并且自行验证。

我复现了下你的问题,从实验的结果来说,应该是复位后,PxOUT寄存器是不变的。

来看看用户手册是怎么说的吧

用户手册 slau208m MSP430x5xx and MSP430x6xx Family User Guide.pdf
P413,12.4 Digital I/O Registers  我截图了:

从图中可以看出来,官方给的说明:
复位后PxOUT寄存器是未定义的,状态不确定。

虽然说,目前通过你的实验代码,可以得出,复位后,寄存器值保持不变。 但是,这个是不完整的。 可能在某种情况下/或者换一种代码配置下,复位后,状态可能会发生改变。

只是提醒下,不能简单得出结论: 复位后状态不变。

对于我们写代码有什么参考意义呢?
复位后,需要对PxOUT进行综合考虑,设置引脚方向时,可考虑先初始化PxOUT寄存器。

2

主题

16

帖子

52

积分

一粒轻沙

Rank: 1

积分
52
9#
发表于 2019-7-19 20:27:48   只看该作者
Shuyang 发表于 2019-7-18 06:46
按下复位按钮时是连着ccs在线仿真吗?如果不在线仿真,只给板子供电,按复位按钮也是一样的现象吗? ...

没有用ccs在线仿真,直接给板子供的电,我后面仔细看了看用户手册,好像明白为什么了,谢谢你的帮助喔!

2

主题

16

帖子

52

积分

一粒轻沙

Rank: 1

积分
52
10#
发表于 2019-7-19 20:31:50   只看该作者
shengxiang 发表于 2019-7-19 10:56
首先,给你点个赞,学进去了~  实验方法也很不错,会自己设计测试用例并且自行验证。

我复现了下你的问题 ...

好的,thank you!!

17

主题

137

帖子

553

积分

单晶硅锭

Rank: 3Rank: 3

积分
553
11#
发表于 2019-7-21 16:05:07   只看该作者
zjs2016 发表于 2019-7-19 20:27
没有用ccs在线仿真,直接给板子供的电,我后面仔细看了看用户手册,好像明白为什么了,谢谢你的帮助喔! ...

感谢你的反馈~也涨知识了,原来一直以为pxout复位是0,希望没误导你……
快速回复 返回顶部 返回列表