3212|11

4

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

5969编程中有个问题想请教大家一下 [复制链接]

在对FR5969的编程中配置FRAM时遇到了如下问题:FRCTL0 = FWPW   |   NACCESS_5;此句命令可以让单片机正常工作而FRCTL0 |= FWPW   +  NACCESS_5;却不行但是都能正确编译。请问大家这两句命令有什么不同谢谢!!!

最新回复

论坛很多人。。  详情 回复 发表于 2015-3-27 23:57
 
点赞 关注

回复
举报

1193

帖子

0

TA的资源

纯净的硅(高级)

沙发
 
本帖最后由 qiushenghua 于 2015-3-27 14:17 编辑

第一句将其他位置0,第二句只改变两个量的值,其余量保留原值不变。并且,如果有初始值,那么这两个量还不一定是你想要的。

点评

这样的话就FR5969的FRAM的CTL0寄存器来说他的初始值除了FRCTLPW都是0那么的话我可不可以认为之前我问的那两句是等价的呢?那么要是等价的的话出现不同的结果的原因怎么解释?  详情 回复 发表于 2015-3-27 14:28
 
 

回复

667

帖子

3

TA的资源

版主

板凳
 
考虑直接赋值和或等的关系。
我觉得是寄存器复位值,在或等,出了问题。
 
 
 

回复

667

帖子

3

TA的资源

版主

4
 
尝试这样:
FRCTL0  = 0;
FRCTL0 |= FWPW   +  NACCESS_5;

点评

尝试过了和 直接FRCTL0 |= FWPW + NACCESS_5;是一样的结果![/backcolor]  详情 回复 发表于 2015-3-27 14:32
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(中级)

5
 
qiushenghua 发表于 2015-3-27 14:15
第一句将其他位置0,第二句只改变两个量的值,其余量保留原值不变。并且,如果有初始值,那么这两个量还不一定是你想要的。

这样的话就FR5969的FRAM的CTL0寄存器来说他的初始值除了FRCTLPW都是0那么的话我可不可以认为之前我问的那两句是等价的呢?那么要是等价的的话出现不同的结果的原因怎么解释?
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(中级)

6
 
nemo1991 发表于 2015-3-27 14:18
尝试这样:
FRCTL0  = 0;
FRCTL0 |= FWPW   +  NACCESS_5;

尝试过了和 直接FRCTL0 |= FWPW   +  NACCESS_5;是一样的结果!

点评

还有这么奇怪的结果,你是在调试的时候查看这两种方法运算后的结果是一样的吗?  详情 回复 发表于 2015-3-27 16:04
 
 
 

回复

667

帖子

3

TA的资源

版主

7
 
把工程发上来。

点评

#include void DCO_init() { P4DIR |= BIT6; P4OUT &= ~BIT6; PM5CTL0 &= ~LOCKLPM5; CSCTL0 = CSKEY ; CSCTL1 |= DCOFSEL_5 + DCORSEL_L; CSCTL2 |= SELS__DCOCLK + SELM__DCOCLK + SELA  详情 回复 发表于 2015-3-27 14:48
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(中级)

8
 

#include       

void DCO_init()
{

  P4DIR |= BIT6;
  P4OUT &= ~BIT6;
  PM5CTL0 &= ~LOCKLPM5;
  CSCTL0 = CSKEY ;
  CSCTL1 |= DCOFSEL_5 + DCORSEL_L;
  CSCTL2 |= SELS__DCOCLK + SELM__DCOCLK + SELA__LFMODOSC  ;
  CSCTL3 |= DIVA__1+ DIVS__1 + DIVM__1 ;
  CSCTL4 |= HFFREQ_2 + HFXTOFF_H + LFXTOFF_L ;
  CSCTL0_H = 0;

}


void FRAM_init()
{
  //FRCTL0 = FWPW   |   NACCESS_5;
  FRCTL0 |= FWPW   +   NACCESS_5;

}

void main( void )
{
        WDTCTL = WDTPW + WDTHOLD;
        PM5CTL0 &= ~LOCKLPM5;
        P4DIR |= BIT6;
        P4OUT &= ~BIT6;
        DCO_init();
        FRAM_init();

        while(1)
        {
        P4OUT |= BIT6;
        }
}




这是代码。在FRAM_init那个地方切换成FRCTL0 |= FWPW   +   NACCESS_5;就会出问题。麻烦看一下谢谢

 
 
 

回复

1976

帖子

1

TA的资源

五彩晶圆(初级)

9
 
SSDm430 发表于 2015-3-27 14:32
尝试过了和 直接FRCTL0 |= FWPW   +  NACCESS_5;是一样的结果!

还有这么奇怪的结果,你是在调试的时候查看这两种方法运算后的结果是一样的吗?
 
 
 

回复

2144

帖子

3

TA的资源

五彩晶圆(中级)

10
 
这是c的东西吧,关于'+'和'|'

注意一点reset之后寄存器的default值
 
个人签名电工
 
 

回复

384

帖子

0

TA的资源

一粒金砂(高级)

11
 
FRCTL0 = FWPW   |   NACCESS_5;  //这一句是直接赋值。。。。。。。
FRCTL0 |= FWPW   +   NACCESS_5;// 而这一句是按位或。。。。。。
由于之前FRCTLO里面有初始值因此你要是按位或的话。。。。。。。。就导致值不对直接进reset了。。。。
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

12
 
论坛很多人。。
 
个人签名你是我突然温柔的理由.
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表