社区导航

 

搜索
查看: 2461|回复: 15

[讨论] MSP430 Launchpad G2553 DOCTL与BCSCTL1寄存器问题

[复制链接]

11

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2015-8-4 20:31 | 显示全部楼层 |阅读模式
小白一枚,才接触430.在一个配置时钟例程中发现了这么一句:
BCSCTL1= CALBC1_1MHZ;      
DCOCTL = CALDCO_1MHZ;  
注释表明这是设置DOC频率为1MHZ
然后我就去头文件中找CALBC1_1MHZ和 CALDCO_1MHZ这两个参数的值是多少,然后发现
CALBC1_1MHZ_          (0x10FFu)  
CALDCO_1MHZ_         (0x10FEu)

这两句都是16位的值啊,但是我记得在操作DCO与BCSCTL1的寄存器都写的是8位的说明吧?那么高8位是什么a?为什么两句的高8位是写入0001 0000b?

接下来我就去查用户手册了,但是在时钟寄存器配置使用中,BCSCTL1与DCOCTL 也都只有低8位的说明吧
但是CALBC1_1MHZ_与CALDCO_1MHZ_ 都是16位的值啊,手册中没有对高8位的说明,网上也没有找到相关的说明,


然后我想按照低8位的值来对比各个寄存器的值吧,就将CALBC1_1MHZ_的值0x10FF即0001 0000 1111 1111b对应着手册DCO控制寄存器,可以得出:
DCOx = 111b;MODx = 1 1110b
同理;
XT2OFF = 1; XTS = 1; DIVAx = 11b; RSELx = 1111b;
再查阅数据手册:

由于DCOx = 111b 所以MODx无效;又由RSELx = 1111b,频率为16~26HZ

看到这里瞬间就无语了,根本设定1MHZ频率有半毛线关系a!
当然我想应该是我自己理解错了吧,因为网上搜和手册里都有这样设置DCO为1MHZ的例子。哎,想了半天没搞懂
所以希望大家帮帮忙,一是帮我解释一下这2句话的含义特别是,手册上8位的寄存器,软件上写入的怎么是16位的值??二是求教一下我查用户手册和数据手册的方法哪里错了,或者是我理解错了。请教一下查阅手册的方法。

自我感觉我是有些专牛角尖,但是我就是属于一点没搞懂就学不下去那种,也希望大家能够传授点方法这些,先谢过各位了哈~

例程中设置时钟位1MHZ

例程中设置时钟位1MHZ

DCOCTL与BSCCTL1

DCOCTL与BSCCTL1
2.png
3.png
butterfly effect

回复

使用道具 举报

3386

TA的帖子

0

TA的资源

纯净的硅(高级)

Rank: 6Rank: 6

发表于 2015-8-4 22:21 | 显示全部楼层
接触msp430不多
不过印象中,CALBC1_1MHZ_和CALDCO_1MHZ_之类的具体数值是出厂校准后保存在Flash的某个地址的存储空间
定义成0x10FFu,可能是指这个地址吧
最好能看看定义文件的说明
So what......

回复

使用道具 举报

4193

TA的帖子

9

TA的资源

五彩晶圆(高级)

Rank: 9Rank: 9Rank: 9

测评达人

发表于 2015-8-4 23:07 | 显示全部楼层
其实我觉得您是将问题有点高的复杂化 了呢。

1. DCO的确认中,就要根据您截图的,DCO的高3位来确定的呢。然后配合如下的图和用户手册中DCO (see Note 1)类似这样的来确定DCO的频率的呢。

10.jpg

2. 再者关于BCSCTL1的寄存器的配置问题,不妨您就单独对如下图(这个是430别的手册的截图)展示的每个位配置就好了啊。然后将其写成16进制数不就OL了吗。不要太在意别人怎么写的,主要要看您是否能理解了呢。

11.jpg

回复

使用道具 举报

11

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2015-8-5 18:09 | 显示全部楼层
huaiqiao 发表于 2015-8-4 23:07
其实我觉得您是将问题有点高的复杂化 了呢。

1. DCO的确认中,就要根据您截图的,DCO的高3位来确定的呢 ...

嗯嗯 我主要就是不太理解别人写的是什么意思,因为本来就是才学,自己写又不会,只好看别人之前写过的,但是又遇到看不懂的,对应手册又查不明白,所以就感到老火了。
但是回到问题上来说,我用的是MSP430 launchpad G2553的开发板,例程中将RSEL 设置为111b,DCO设置为11b,就对应曲线的最上面一条,但是这条曲线的频率选择不是1MHZ呀?

11.png

点评

这个表只是一个定性的示意,实际上不同的MCU的DCO校准参数都不一样。你可以用工具将infoA里的校准数据读出来,这样你就能对这个DCO有一个更直接的认识。 我现在手头没有430单片机,等会到公司之后如果我还记得的话  详情 回复 发表于 2015-8-7 07:48
RSEL=111b=7(十进制),DCO=11b=3(十进制),然后你对应的上面的坐标上面不就知道了Fdco的频率值了吗?这个值是个大约的值,不是个定值。  详情 回复 发表于 2015-8-5 19:20
butterfly effect

回复

使用道具 举报

11

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2015-8-5 18:21 | 显示全部楼层
ljj3166 发表于 2015-8-4 22:21
接触msp430不多
不过印象中,CALBC1_1MHZ_和CALDCO_1MHZ_之类的具体数值是出厂校准后保存在Flash的某个地 ...

好的~
G2553.H头文件里面CALBC1_1MHZ_和CALDCO_1MHZ_的值分别是是(0x10FFu)和(0x10FEu),并且是赋值语句,是给BCSCTL1与DCOCTL 寄存器里分别写入这两个值,而不是寄存器本身的地址值。而关键又在于手册上是8位的寄存器,但是写入的值确实16位的。但是我想430本身也是16位的,只是手册上没有把高8位写出来? 纠结的就是这里。并且对应写入寄存器的值,发现手册上和注释中的并不是同一个结果,再次纠结了,最后自己有找不出自己哪里错了,这才是最老火的。。。
butterfly effect

回复

使用道具 举报

4193

TA的帖子

9

TA的资源

五彩晶圆(高级)

Rank: 9Rank: 9Rank: 9

测评达人

发表于 2015-8-5 19:20 | 显示全部楼层
宅男改变世界 发表于 2015-8-5 18:09
嗯嗯 我主要就是不太理解别人写的是什么意思,因为本来就是才学,自己写又不会,只好看别人之前写过的, ...

RSEL=111b=7(十进制),DCO=11b=3(十进制),然后你对应的上面的坐标上面不就知道了Fdco的频率值了吗?这个值是个大约的值,不是个定值。

回复

使用道具 举报

11

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2015-8-5 19:56 | 显示全部楼层
huaiqiao 发表于 2015-8-5 19:20
RSEL=111b=7(十进制),DCO=11b=3(十进制),然后你对应的上面的坐标上面不就知道了Fdco的频率值了吗? ...

我回的时候错了 RSEL = 1111b (15) DCO = 111b (7) 对应频率为20MHZ左右..  根本不是这样 算了 我先这样记住好了

点评

这个是在类似于Mixed Signal Microcontroller,这样的430的手册中,有个表格的,你好好找下,别死记硬背。不可取。  详情 回复 发表于 2015-8-6 08:39
butterfly effect

回复

使用道具 举报

4193

TA的帖子

9

TA的资源

五彩晶圆(高级)

Rank: 9Rank: 9Rank: 9

测评达人

发表于 2015-8-6 08:39 | 显示全部楼层
宅男改变世界 发表于 2015-8-5 19:56
我回的时候错了 RSEL = 1111b (15) DCO = 111b (7) 对应频率为20MHZ左右..  根本不是这样 算了 我先这样 ...

这个是在类似于Mixed Signal Microcontroller,这样的430的手册中,有个表格的,你好好找下,别死记硬背。不可取。

回复

使用道具 举报

1167

TA的帖子

0

TA的资源

纯净的硅(高级)

Rank: 6Rank: 6

荣誉会员勋章

发表于 2015-8-7 07:42 | 显示全部楼层
本帖最后由 qiushenghua 于 2015-8-7 10:56 编辑

复杂了,那两个数是指flash中信息储存区infoA里面的地址,这两个地址指向的都是8位的空间。
地址里储存有MCU芯片在出厂时的校准数据,只要你不刻意将其擦除,都是可以用的。

你可以将其从flash中读出,然后直接赋值用的。不同的mcu个体这个校准数并不一样,本身DCO的时钟频率也有一定的误差。

回复

使用道具 举报

1167

TA的帖子

0

TA的资源

纯净的硅(高级)

Rank: 6Rank: 6

荣誉会员勋章

发表于 2015-8-7 07:48 | 显示全部楼层
宅男改变世界 发表于 2015-8-5 18:09
嗯嗯 我主要就是不太理解别人写的是什么意思,因为本来就是才学,自己写又不会,只好看别人之前写过的, ...

这个表只是一个定性的示意,实际上不同的MCU的DCO校准参数都不一样。你可以用工具将infoA里的校准数据读出来,这样你就能对这个DCO有一个更直接的认识。
我现在手头没有430单片机,等会到公司之后如果我还记得的话读取一段infoA数据给你看看。

回复

使用道具 举报

133

TA的帖子

3

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2015-8-7 08:51 | 显示全部楼层
其实你可以看看msp430g2553.cmd这个文件的里面有这样几句。
/************************************************************
* Basic Clock Module
************************************************************/
DCOCTL             = 0x0056;
BCSCTL1            = 0x0057;
BCSCTL2            = 0x0058;
BCSCTL3            = 0x0053;

不知道你是不是可以用到

点评

这几个值分别是这几个寄存器的地址,我也知道是16位的,只是说手册上查不到高8位,我不理解给高8位写入的值是什么意思。其二就是就算是给寄存器低8位写入的这些值,我对应手册查到的也并不是将时钟频率设置为1MHZ。  详情 回复 发表于 2015-8-7 14:56
游离在码农与网工之间

回复

使用道具 举报

1167

TA的帖子

0

TA的资源

纯净的硅(高级)

Rank: 6Rank: 6

荣誉会员勋章

发表于 2015-8-7 09:46 | 显示全部楼层
  1. @1080
  2. FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
  3. FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
  4. FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
  5. FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
  6. 4C B2 FE 26 FF FF FF FF FF FF FF FF FF FF FF FF
  7. FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
  8. FF FF FF FF FF FF FF FF FF FF 10 10 FF FF FF FF
  9. FF FF FF FF FF FF FF FF FF FF FF FF 01 02 A4 86
  10. q
复制代码


上面这个是我刚刚从MSP430G2231里读出来的,这一片是空白的芯片,所以只有Info A有数据。
可以看到:
10FE=A4
10FF=86

也就是说我这一片MCU校准之后的
CALBC1_1MHZ= 0x86
CALDCO_1MHZ=0xA4

我们再来看看这两个值是什么意思,将DCOCTL和BCSCTL1转换为2进制:
DCOCTL=0xA4=0b 101 00100
DCOx=101
MODx=00100

BCSCTL1=0x86=0b 1 0 00 0110
XT2OFF=1
XTS=0
DIVAx=00
RESELx=0110
再将各个分量转回十进制
DCO=5
MOD=4
DIVA=0
RESEL=6

其中DCO=5和MOD=4以及RESEL=6都是用于配置DCO的。这些数据仅仅在配置我手头上这一片MSP430的DCO频率为1MHz的时候有效。

点评

首先谢谢层主热心而又耐心的回复。 那我谈谈我的理解哈,看我又没有理解错哈~ 首先 BCSCTL1= CALBC1_1MHZ; 这一句。 我查到BCSCTL1这个寄存器,在G2553.h的头文件里是这样定义的 #define BCSCTL1_  详情 回复 发表于 2015-8-7 15:20

回复

使用道具 举报

11

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2015-8-7 14:56 | 显示全部楼层
eeliu 发表于 2015-8-7 08:51
其实你可以看看msp430g2553.cmd这个文件的里面有这样几句。
/****************************************** ...

这几个值分别是这几个寄存器的地址,我也知道是16位的,只是说手册上查不到高8位,我不理解给高8位写入的值是什么意思。其二就是就算是给寄存器低8位写入的这些值,我对应手册查到的也并不是将时钟频率设置为1MHZ。但是设置1MHZ的频率,大家都是这么写的,我有找不出自己哪里错了,就很郁闷了。
butterfly effect

回复

使用道具 举报

11

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2015-8-7 15:20 | 显示全部楼层
qiushenghua 发表于 2015-8-7 09:46
上面这个是我刚刚从MSP430G2231里读出来的,这一片是空白的芯片,所以只有Info A有数据。
可以看到:
...

首先谢谢层主热心而又耐心的回复。
那我谈谈我的理解哈,看我又没有理解错哈~
首先
BCSCTL1= CALBC1_1MHZ;
这一句。

我查到BCSCTL1这个寄存器,在G2553.h的头文件里是这样定义的
#define BCSCTL1_            (0x0057u)  /* Basic Clock System Control 1 */
这句话是指出了该寄存器的地址值对吧。

然后后面CALBC1_1MHZ这个可以叫做掩码吧,在头文件里是这样定义的
#define CALDCO_1MHZ_          (0x10FEu)  /* DCOCTL  Calibration Data for 1MHz */
那么了层主的意思是:
(0x10FEu)这个值也是一个地址,这个地址就是flash中信息储存区infoA里面的地址。然后这个地址对应着另一个值,而那个值才是真正写入BCSCTL1这个寄存器里的值。

所以我将(0x10FEu)这个值自己赋给BCSCTL1这个寄存器,得到的各个内部寄存器的值是不对的,才会导致和大家都不一样的结果咯。要想查看到底赋值是多少,只有读取info里面的值才知道了。

层主,你看看我有没有理解错。

点评

前面的部分都没理解错,最后一段我没有看懂…… 不能直接将(0x10FEu)赋给BCSCTL1这个寄存器,不然会造成意想不到的结果。你要赋值的是它指向的结果,而不是这个指针。 至于它是怎么调用指针指向数值的我也没  详情 回复 发表于 2015-8-7 15:38
butterfly effect

回复

使用道具 举报

1167

TA的帖子

0

TA的资源

纯净的硅(高级)

Rank: 6Rank: 6

荣誉会员勋章

发表于 2015-8-7 15:38 | 显示全部楼层
宅男改变世界 发表于 2015-8-7 15:20
首先谢谢层主热心而又耐心的回复。
那我谈谈我的理解哈,看我又没有理解错哈~
首先
BCSCTL1= CALBC1_1 ...

前面的部分都没理解错,最后一段我没有看懂……

不能直接将(0x10FEu)赋给BCSCTL1这个寄存器,不然会造成意想不到的结果。你要赋值的是它指向的结果,而不是这个指针。

至于它是怎么调用指针指向数值的我也没搞懂,我C语言学艺不精,偶尔还要向度娘问语法。

我不知道能不能用*(0x10FEu)的形式来赋值,也不知道这种写法是否符合语法要求,你可以试试。

点评

嗯~最后一段的我的意思就是:不应该将(0x10FEu)这个值,直接赋给了寄存器啦~ 但是对于你说的这个,我的猜测是,,编译器起到将地址值转换成内存单元的作用吧。。。 我对照给51编程来看的话,比如:P1 = 0XFF;  详情 回复 发表于 2015-8-9 21:17

回复

使用道具 举报

11

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2015-8-9 21:17 | 显示全部楼层
qiushenghua 发表于 2015-8-7 15:38
前面的部分都没理解错,最后一段我没有看懂……

不能直接将(0x10FEu)赋给BCSCTL1这个寄存器,不然会 ...

嗯~最后一段的我的意思就是:不应该将(0x10FEu)这个值,直接赋给了寄存器啦~
但是对于你说的这个,我的猜测是,,编译器起到将地址值转换成内存单元的作用吧。。。

我对照给51编程来看的话,比如:P1 = 0XFF; 这一句,P1在头文件里是这样的 sfr P1   = 0x90;
但是0x90是P1寄存器的地址值,但是0xff却是写入是寄存器的值,而不是修改了P1的地址。
这样的话,就应该是译器起到了,将寄存器地址转换成内存单元的作用,而我们只需关心,前面是寄存器的名字,后面是写入寄存器的值就行了。

所以这样的话,也是编译器将前面的寄存器名字转换成了内存单元,所以才可以修改吧。
不过自己在学校确实也没有学这相关的知识,就只学了些很肤浅的C语言和51基础,底层怎么工作的也不怎么懂,所以这也只是我自己的猜想拉,不知道是不是这样。哎,路漫漫其修远兮哟~~~~
butterfly effect

回复

使用道具 举报

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

关闭

站长推荐上一条 1/6 下一条

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

Archiver|手机版|小黑屋|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2020-6-2 00:15 , Processed in 0.498274 second(s), 38 queries , Gzip On, MemCache On.

快速回复 返回顶部 返回列表