代码之家  ›  专栏  ›  技术社区  ›  windoge_10

MSP432p401r:这个声明在哪里?

  •  0
  • windoge_10  · 技术社区  · 6 年前

    这一行:

    /* Disable the USCI module and clears the other bits of control register */
    BITBAND_PERI(EUSCI_B_CMSIS(moduleInstance)->rCTLW0.r,UCSWRST_OFS) = 1;
    

    在driverlib.c中的I2C_initMaster()函数中。但是,我找不到该项目的声明 ->rCTLW0.r 段有没有办法用这个?

    1 回复  |  直到 6 年前
        1
  •  0
  •   CL.    6 年前

    driverlib/MSP432P4xx/eusci.h 有:

    #define EUSCI_A_CMSIS(x) ((EUSCI_A_Type *) x)
    

    inc/msp432p401r.h 有:

    typedef struct {
      __IO uint16_t CTLW0;                           /**< eUSCI_Ax Control Word Register 0 */
      __IO uint16_t CTLW1;                           /**< eUSCI_Ax Control Word Register 1 */
           uint16_t RESERVED0;
      __IO uint16_t BRW;                             /**< eUSCI_Ax Baud Rate Control Word Register */
      __IO uint16_t MCTLW;                           /**< eUSCI_Ax Modulation Control Word Register */
      __IO uint16_t STATW;                           /**< eUSCI_Ax Status Register */
      __I  uint16_t RXBUF;                           /**< eUSCI_Ax Receive Buffer Register */
      __IO uint16_t TXBUF;                           /**< eUSCI_Ax Transmit Buffer Register */
      __IO uint16_t ABCTL;                           /**< eUSCI_Ax Auto Baud Rate Control Register */
      __IO uint16_t IRCTL;                           /**< eUSCI_Ax IrDA Control Word Register */
           uint16_t RESERVED1[3];
      __IO uint16_t IE;                              /**< eUSCI_Ax Interrupt Enable Register */
      __IO uint16_t IFG;                             /**< eUSCI_Ax Interrupt Flag Register */
      __I  uint16_t IV;                              /**< eUSCI_Ax Interrupt Vector Register */
    } EUSCI_A_Type;
    

    rXXX.r stuff仅在ROM驱动器lib中使用。看起来好像每个寄存器都被声明为一个联合,可能是为了允许单独访问所有字节。ROM driverlib的源代码永远无法更改,但您可以自己编译的driverlib的源代码( driverlib/MSP432P4xx/i2c.c rom/MSP432P4xx/driverlib.c )使用正确的声明。

    (如果您不喜欢CMSIS样式的寄存器访问,请使用 msp432p401r_classic.h .)

    推荐文章