MSP430 - 混合端口在结构内部注册

时间:2013-05-16 10:33:18

标签: c struct embedded cpu-registers msp430

我现在正在为C中的MSP430做一个程序,我正在使用端口1.6,1.7,2.0,2.1和2.2来驱动一些LED。现在,为了打开所有LED,我只需要写:

P1OUT |= 0xC0; 
P2OUT |= 0x07;

但是,我想知道是否可以创建一个C结构(名称为LED_ACTIVATION),指向P2OUT寄存器(0x0029)的第0,1和2位以及P1OUT寄存器的第6位和第7位(0x0021),这将允许我写这样的东西:

LED_ACTIVATION = 0x2F;

其中端口2.2是最高有效位(第5位),端口1.6是最低有效位(第0位)。

在MSP中,我们可以为每个寄存器执行此分配,如下所示:

__no_init volatile union
{
  unsigned char P1OUT;   /* Port 1 Output */

  struct
  {
    unsigned char P0              : 1; /*  */
    unsigned char P1              : 1; /*  */
    unsigned char P2              : 1; /*  */
    unsigned char P3              : 1; /*  */
    unsigned char P4              : 1; /*  */
    unsigned char P5              : 1; /*  */
    unsigned char P6              : 1; /*  */
    unsigned char P7              : 1; /*  */
  }P1OUT_bit;
} @0x0021;

或者像这样:

#define P1OUT_              (0x0021u)  /* Port 1 Output */
DEFC(   P1OUT             , P1OUT_)

但是可以混合两个寄存器地址吗?

感谢。

1 个答案:

答案 0 :(得分:3)

MSP430的位/引脚不可寻址。所以,不,你不能创建一个包含来自多个端口的单个引脚的结构。

为了制作:

LED_ACTIVATION = 0x2F;

您需要使用函数或宏。

另请参阅:Accessing individual I/O pin on MSP430