本文参考文献 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 deionUint16 SCICHAR:3; // 2:0 Character length controlUint16 ADDRIDLE_MODE:1; // 3 ADDR/IDLE Mode controlUint16 LOOPBKENA:1; // 4 Loop Back enableUint16 PARITYENA:1; // 5 Parity enableUint16 PARITY:1; // 6 Even or Odd ParityUint16 STOPBITS:1; // 7 Number of Stop BitsUint16 rsvd1:8; // 15:8 reserved};//-------------------------------------------// SCICTL1 control register 1 bit definitions://struct SCICTL1_BITS { // bit deionUint16 RXENA:1; // 0 SCI receiver enableUint16 TXENA:1; // 1 SCI transmitter enableUint16 SLEEP:1; // 2 SCI sleepUint16 TXWAKE:1; // 3 Transmitter wakeup methodUint16 rsvd:1; // 4 reservedUint16 SWRESET:1; // 5 Software resetUint16 RXERRINTENA:1; // 6 Receive interrupt enableUint16 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 longstruct SCI_REGS {Uint16 SCICCR_REG SCICCR; // Communications control registerUint16 SCICTL1_REG SCICTL1; // Control register 1Uint16 SCIHBAUD; // Baud rate (high) registerUint16 SCILBAUD; // Baud rate (low) registerUint16 SCICTL2_REG SCICTL2; // Control register 2Uint16 SCIRXST_REG SCIRXST; // Receive status registerUint16 SCIRXEMU; // Receive emulation buffer registerUint16 SCIRXBUF_REG SCIRXBUF; // Receive data bufferUint16 rsvd1; // reservedUint16 SCITXBUF; // Transmit data bufferUint16 SCIFFTX_REG SCIFFTX; // FIFO transmit registerUint16 SCIFFRX_REG SCIFFRX; // FIFO receive registerUint16 SCIFFCT_REG SCIFFCT; // FIFO control registerUint16 rsvd2; // reservedUint16 rsvd3; // reservedUint16 SCIPRI_REG SCIPRI; // FIFO Priority control};
通过以上学习,可以对芯片有一个大致的了解,对28335的工程头文件中寄存器的定义有一个初步的了解,在以后的使用中,即可直接调用寄存器名字对其进行操作,这就将数据手册与头文件相对应了。