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程序的。 还有一些什么__delay_cycles(100000);啊 __bis_SR_register(CPUOFF);啊数据手册上肯本就没有。。。。 看对应芯片的*.h文件,基本都在这里面呢 yongjia 发表于 2013-7-25 09:43 static/image/common/back.gif
看对应芯片的*.h文件,基本都在这里面呢
但是里面都是宏定义,我根本不知道这些宏定义应该赋值给那个寄存器 初学者还是老老实实看手册吧,头文件并不能帮助你多少。 万能青年 发表于 2013-7-25 09:47 static/image/common/back.gif
但是里面都是宏定义,我根本不知道这些宏定义应该赋值给那个寄存器
宏定义 前头一般有寄存器的说明的,你对应着手册查找就行了,这些宏定义就方便你使用的,当然你完全可以不用宏定义,一样的可以读写控制430的寄存器 上帝的归上帝,凯撒的归凯撒;
430硬件手册里讲硬件寄存器;编程指南里讲C语法;CCS的手册里讲编译器和一些特殊语法。 使用CCS里边带的Grace图形编程 就可以方便很多了。
LZ用的是IAR还是CCS?
祥子 发表于 2013-7-25 14:11 static/image/common/back.gif
使用CCS里边带的Grace图形编程 就可以方便很多了。
LZ用的是IAR还是CCS?
IAR。。。。。 经过一天的探究,我明白了,现在要做的就是学!!!谢谢大家!! BCSCTL2 |= SELM1 + SELM0;
这样的少用啊,不知道你想表达的真实意思。
这样比较好一点
BCSCTL2 |= (SELM1 + SELM0);
或者你的意思是??
BCSCTL2 = (BCSCTL2 | SELM1) + SELM0;
页:
[1]