|
宏与位域和寄存器结构优缺点的对比传统的#define宏提供了地址编号或者是指向寄存器地址的指针。
这样做的优点是:
1、简单,快,很容易通过键盘敲出。
2、变量名和寄存器名一致,容易记忆。
缺点是:
1、具体位不容易获取,必须生成掩码来对某个位操作。
2、不能够在CCS的watch window中方便的显示某些位的值。
3、宏不能够利用CCS的自动完成功能。
4、宏不能对相同外设重复使用。
位域和寄存器结构体的优点如下:
1、TI提供,无需自己编写,规范性好。
2、容易读、写、升级,效率高。
3、很好的利用了CCS的自动完成功能。
4、可以在CCS的观察窗口中查看具体位的值。
实现位域和寄存器文件结构体的具体步骤(以SCI外设为例)
1)、定义一个寄存器文件结构体,SCI外设的寄存器在结构体中按实际的地址由低向高依次列出。
/********************************************************************
* SCI header file
* Defines a register file structure for the SCI peripheral
********************************************************************/
#define Uint16 unsigned int
#define Uint32 unsigned long
struct SCI_REGS {
Uint16 SCICCR_REG SCICCR; // Communications control register
Uint16 SCICTL1_REG SCICTL1; // Control register 1
Uint16 SCIHBAUD; // Baud rate (high) register
Uint16 SCILBAUD; // Baud rate (low) register
Uint16 SCICTL2_REG SCICTL2; // Control register 2
Uint16 SCIRXST_REG SCIRXST; // Receive status register
Uint16 SCIRXEMU; // Receive emulation buffer register
Uint16 SCIRXBUF_REG SCIRXBUF; // Receive data buffer
Uint16 rsvd1; // reserved
Uint16 SCITXBUF; // Transmit data buffer
Uint16 SCIFFTX_REG SCIFFTX; // FIFO transmit register
Uint16 SCIFFRX_REG SCIFFRX; // FIFO receive register
Uint16 SCIFFCT_REG SCIFFCT; // FIFO control register
Uint16 rsvd2; // reserved
Uint16 rsvd3; // reserved
Uint16 SCIPRI_REG SCIPRI; // FIFO Priority control
}
|
|