This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

msp430汇编,时钟设置问题

Other Parts Discussed in Thread: MSP430G2553


BCSCTL1 = CALBC1_1MHZ; // Set range to 1MHz
DCOCTL = CALDCO_1MHZ; // Set DCO to 1MHz. Declared in msp430g2553.h

这个为什么会设置内部时钟晶振为1M

#define CALDCO_1MHZ_ (0x10FEu) /* DCOCTL Calibration Data for 1MHz */
READ_ONLY DEFC( CALDCO_1MHZ , CALDCO_1MHZ_)

这个预定义又怎么解释

#define DEFC(name, address) __no_init volatile unsigned char name @ address;

这一行@指令又表示什么?晕死

  • 你好,

    代码这样写的目的是为了调用出厂前已经效验的数据,把这个数据直接给到DCO寄存器,让DCO寄存器按照校准好的几个值来进行运行。

    我不直接解释告诉你答案,你单步仿真看看CALBC1_1MHZ对应的是flash哪里的值。

    然后思考之后我们再讨论。

  • CALBC1_1MHZ值的大小是0x87,CALDCO_1MHZ的值是0x66,对应RSEL=7,DCOX=3,MODX=6,LFXT1模式低频,这样配置的话dco频率就是1Mhz了么,那么

    #define CALBC1_1MHZ_ (0x10FFu) /* BCSCTL1 Calibration Data for 1MHz */
    READ_ONLY DEFC( CALBC1_1MHZ , CALBC1_1MHZ_)

    怎么解释?

  • 你好,

    我不确定你读的诗句是否正确。

    #define CALBC1_1MHZ_ (0x10FFu) /* BCSCTL1 Calibration Data for 1MHz */

    是定义CALDC1_1MHZ带便的是存放在flash的物理地址在0x10ff的数据。

    不要去改写他,改写之后你要重新校准了。


  • 你好  可以指教一下是怎么读出来的Flash的值吗  我读和你不一样啊  可是咱们是一样的代码语句

  • hi XIAOGUO GUO1:

    不一样是正常的,因为那个是校准值

  • 你好 我想问一下   这个CALDC1_1MHZ到底是一个flash里面某个地址即(0x10ff)里面的一个数据   还是这个CALDC1_1MHZ本身就是一个地址  当我用这个CALDC1_1MHZ的时候 他就会自动取出来这个地址里面的数据   我仿真看了一下 汇编指令   是这样的  如下图:

     if (CALBC1_1MHZ==0xFF) 这条语句的汇编解释是   cmp.b  #0XFF,&CALBC1_1MHZ  意思不就是把 CALBC1_1MHZ里面的数据取出来 和立即数0XFF比较吗 ?

    我的理解对吗??