本文参考文献 DSP28335数据手册,与《Programming TMS320x28xx and 28xxx Peripherals in C/C++》《F28335的位域和寄存器结构的学习》
1、DSP28335芯片是TI公司,偏向于控制方向、浮点型处理器,通过了解可以看出该芯片具有众多的外设,这这里只是将它看成一个超级单片机。其中这些外设的功能也很强大(复杂),所以在这里并不去深究他们的功能,而是只看他们的寄存器。
思路:
DSP数据手册-》外设功能---》寄存器名称+地址+时序图。
多功能的管脚通过寄存器去配置。
在这里不对DSP的具体外设列表与功能展开,有兴趣的可以去查阅芯片手册。
2、外设寄存器在头文件定义
外设寄存器名字+地址+功能描述
使用#define 将寄存器名称与地址联系起来
有了以上的联系,在程序中可以使用指针(寄存器名字)给寄存器赋值。
在寄存器中有很多单独定义的位域寄存器,对位单独定义可以在程序中使用更加灵活。
/********************************************************************
* SCI header file
********************************************************************/
//----------------------------------------------------------
// SCICCR communication control register bit definitions:
//
struct SCICCR_BITS { // bit deion
Uint16 SCICHAR:3; // 2:0 Character length control
Uint16 ADDRIDLE_MODE:1; // 3 ADDR/IDLE Mode control
Uint16 LOOPBKENA:1; // 4 Loop Back enable
Uint16 PARITYENA:1; // 5 Parity enable
Uint16 PARITY:1; // 6 Even or Odd Parity
Uint16 STOPBITS:1; // 7 Number of Stop Bits
Uint16 rsvd1:8; // 15:8 reserved
};
//-------------------------------------------
// SCICTL1 control register 1 bit definitions:
//
struct SCICTL1_BITS { // bit deion
Uint16 RXENA:1; // 0 SCI receiver enable
Uint16 TXENA:1; // 1 SCI transmitter enable
Uint16 SLEEP:1; // 2 SCI sleep
Uint16 TXWAKE:1; // 3 Transmitter wakeup method
Uint16 rsvd:1; // 4 reserved
Uint16 SWRESET:1; // 5 Software reset
Uint16 RXERRINTENA:1; // 6 Receive interrupt enable
Uint16 rsvd1:9; // 15:7 reserved
};
在上面的定义中,使用了操作符“:”,用来说明位域的长度,即当前位域占几位。使用联合体。除了能够方便的访问位域外,有时候也希望能够对寄存器整体访问,使用联合体能够实现这种操作。
/********************************************************************
* SCI header file
********************************************************************/
union SCICCR_REG {
Uint16 all;
struct SCICCR_BITS bit;
};
union SCICTL1_REG {
Uint16 all;
struct SCICTL1_BITS bit;
};
7)、将添加位域后的寄存器结构体重新实现。
/********************************************************************
* 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
};
通过以上学习,可以对芯片有一个大致的了解,对28335的工程头文件中寄存器的定义有一个初步的了解,在以后的使用中,即可直接调用寄存器名字对其进行操作,这就将数据手册与头文件相对应了。