MSP430的学习,作为一个初学者必须从两个地方学习一款芯片一个芯片手册一个及为头文件,而我喜欢从头文件开始。
msp430fr5969.h 这个文件即为我们的芯片手册与C代码唯一的沟通。现在好像芯片公司越来越注重头文件的编写,似乎更加趋近于让工程师直接调用API函数,而MSP430也有库函数不过作为一个初学者再加上后期可能会经常接触这款芯片从简单而又复杂的寄存器学起未尝不可。
#define DEFC(name, address) __no_init volatile unsigned char name @ address;
上述一条为条件为一个宏定义 __no_init表示为初始化的变量而volatile表示禁止编译器优化此变量不懂可以百度一下。而@ address表示把这个变量分配在此地址处。
剩下的为共同体定义具体大家可参考头文件
#define READ_ONLY_DEFCW(name, address) __no_init union \
{ \
struct \
{ \
volatile READ_ONLY unsigned char name##_L; \
volatile READ_ONLY unsigned char name##_H; \
}; \
volatile READ_ONLY unsigned short name; \
} @ address;
msp430的寄存器定义是基于共同体的而不同于51(基于指针)或者stm32(基于结构体),共同体和结构体最大的区别为结构体为连续分配内存而共同体则为所有成员公用一块内存,所以在msp430中可以给一个寄存器整体赋值及十六位也可以给个体赋值及高低八位。注明msp430是不支持位定义的不知道为啥可能是由于硬件部分为了降低功耗吧。所以在头文件中会有很多的掩码定义如下
#define BIT0 (0x0001u)
#define BIT1 (0x0002u)
而其意义只有用过了才能更加深入的了解。
剩下的部分就是一些寄存器的定义了具体可以参考芯片手册看看,好了此片就写到这里了。