万能青年 发表于 2013-7-25 08:47:02

430学习的一个疑惑

现在已经大概明白如何对430进行编程,但有一点很疑惑,就是如何快速进行coding的问题。
例如#include"msp430g2553.h" 有以下内容。
#define DIVS0               (0x02)   /* SMCLK Divider 0 */
#define DIVS1               (0x04)   /* SMCLK Divider 1 */
#define SELS                (0x08)   /* SMCLK Source Select 0:DCOCLK / 1:XT2CLK/LFXTCLK */
#define DIVM0               (0x10)   /* MCLK Divider 0 */
#define DIVM1               (0x20)   /* MCLK Divider 1 */
#define SELM0               (0x40)   /* MCLK Source Select 0 */
#define SELM1               (0x80)   /* MCLK Source Select 1 */

#define DIVS_0            (0x00)   /* SMCLK Divider 0: /1 */
#define DIVS_1            (0x02)   /* SMCLK Divider 1: /2 */
#define DIVS_2            (0x04)   /* SMCLK Divider 2: /4 */
#define DIVS_3            (0x06)   /* SMCLK Divider 3: /8 */

可以看得出编译器已经定义好了一些快捷宏定义,所以不必将每一位计算出来然后赋值给寄存器。
可问题就是这里,这些宏定义意义不是很明确。

例如:我想将LFXT1设置为MCLK
#define SELM0               (0x40)   /* MCLK Source Select 0 */
#define SELM1               (0x80)   /* MCLK Source Select 1 */

手册的资料
SELMx:MCLK频率选择
00   DCOCLK
01   DCOCLK
10    XT2如果出现在片上则是XT2CLK,当XT2不出现在片上则选择
      LFXT1CLK或VLOCLK
11    LFXT1CLK或VLOCLK

也就是说 我要这样赋值BCSCTL2 |= SELM1 + SELM0;

可是我找了半天也没找到关于这些宏定义的总结,难道开发的时候还要先翻数据手册查到相应位,然后在打开msp430g2553.h查看其快捷宏定义,然后才coding出BCSCTL2 |= SELM1 + SELM0? 那msp430g2553.h对于初学者来说不是属于鸡肋了么?

我表达能力有限,其实说那么多,也就是想问问大家平时是如何写430程序的。

万能青年 发表于 2013-7-25 08:50:13

还有一些什么__delay_cycles(100000);啊 __bis_SR_register(CPUOFF);啊数据手册上肯本就没有。。。。

yongjia 发表于 2013-7-25 09:43:13

看对应芯片的*.h文件,基本都在这里面呢

万能青年 发表于 2013-7-25 09:47:37

yongjia 发表于 2013-7-25 09:43 static/image/common/back.gif
看对应芯片的*.h文件,基本都在这里面呢

但是里面都是宏定义,我根本不知道这些宏定义应该赋值给那个寄存器

lcofjp 发表于 2013-7-25 10:00:13

初学者还是老老实实看手册吧,头文件并不能帮助你多少。

yongjia 发表于 2013-7-25 10:29:11

万能青年 发表于 2013-7-25 09:47 static/image/common/back.gif
但是里面都是宏定义,我根本不知道这些宏定义应该赋值给那个寄存器

宏定义 前头一般有寄存器的说明的,你对应着手册查找就行了,这些宏定义就方便你使用的,当然你完全可以不用宏定义,一样的可以读写控制430的寄存器

hhxb 发表于 2013-7-25 10:44:43

上帝的归上帝,凯撒的归凯撒;
430硬件手册里讲硬件寄存器;编程指南里讲C语法;CCS的手册里讲编译器和一些特殊语法。

祥子 发表于 2013-7-25 14:11:33

使用CCS里边带的Grace图形编程    就可以方便很多了。

LZ用的是IAR还是CCS?

万能青年 发表于 2013-7-25 14:49:22

祥子 发表于 2013-7-25 14:11 static/image/common/back.gif
使用CCS里边带的Grace图形编程    就可以方便很多了。

LZ用的是IAR还是CCS?


IAR。。。。。

万能青年 发表于 2013-7-25 14:50:00

经过一天的探究,我明白了,现在要做的就是学!!!谢谢大家!!

lusson 发表于 2013-7-25 15:27:10

BCSCTL2 |= SELM1 + SELM0;
这样的少用啊,不知道你想表达的真实意思。
这样比较好一点
BCSCTL2 |= (SELM1 + SELM0);
或者你的意思是??
BCSCTL2 = (BCSCTL2 | SELM1) + SELM0;

页: [1]
查看完整版本: 430学习的一个疑惑