This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSP430F5632:引脚分配和更改引脚值

Guru**** 2387060 points
Other Parts Discussed in Thread: MSP430F5632, MSP430F147
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1130516/msp430f5632-pin-assignment-and-changing-pin-value

器件型号:MSP430F5632
主题中讨论的其他器件: MSP430F147

我有很多为其他编译器编写的代码、我想为 MSP430F5632使用相同的代码。 我想使用此样式代码 DisplayRESET = 0;其中 DisplayRESET 是单个引脚。  下面是我具有的结构和#defines:

结构位映射
   {
   无符号
   Bit0:1、
   BIT1:1、
   Bit2:1、
   BIT3:1、
   Bit 4:1、
   Bit 5:1、
   Bit 6:1、
   位7:1;
   }CHR;

#define Port1_2Base    0x200
#define Port2OUTCHAR     (*(char *) Port1_2Base + 0x03)
#define Port2OUT              (*(结构位映射*) Port1_2Base + 0x03)

#define Port5_6Base       0x240
#define Port5OUT             (*(结构位映射*) Port5_6Base + 0x02)
#define Port6IN                (*(结构位映射*) Port5_6Base + 0x01)
#define Port6OUT             (*(结构位映射*) Port5_6Base + 0x03)

#define Port7_8Base       0x260
#define Port7IN                (*(结构位映射*) Port7_8Base + 0x00)
#define Port7OUT              (*(结构位映射*) Port7_8Base + 0x02)


#define   DisplayCD   Port6OUT.Bit6
#define   DisplayCE   Port7OUT.Bit7
#define   DisplayWR   Port7OUT.Bit6
#define   DisplayData Port2OUT.CHR
#define   DisplayRD   Port6OUT.Bit7
#define   DisplayRESET Port5OUT.Bit6

当我编译时、无论在哪里、我都使用显示引脚、例如:

DisplayCD = 0;

我得到:

说明   资源   路径   位置   类型
#42表达式必须具有算术或指针类型   DisplayRoutines.c   /HRX MSP Ccode/MSP HRX CCODE   第89行   C/C++问题

我没有找到类似这样的引脚示例。  全部是:

DisplayCD |= BIT6;

DisplayCD &=~BIT6;

我需要做什么才能使用:

DisplayCD = 0;

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您是否尝试过* DisplayCD?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    只是尝试过、不起作用。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 David:

    这是一个有趣的问题。 我不确定是否有一种在 MSP430上执行此操作的简单方法。 原因是位设置/清零需要回读 GPIO PxOUT 寄存器。 因此需要"|="(即 x = x | y)。  据我所知、没有一个 C 操作可以实现这一目的。  

    BitMapping 结构很简洁、但我以前从未见过":1"符号。 您能给我一个描述其工作原理的参考吗?

    您能够将此软件范式与哪些编译器/MCU 结合使用?

    此致、

    Evan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    标准 C。它是一个位字段。 K&R 2中的第6.9节(第149页) ^μ A)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    具有 MSP430F147和 MSP430F2402的 Quadravox

    编译器中是否存在我缺失的设置或其他设置?

    我的电脑上的 Quadravox 死了、所以我要把我的所有代码都移动到 TI 的 code composer 中。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    发现了它!!!

    编译器不喜欢计算地址。 我偶然尝试了:

    #define Port5OUT         (*(struct BitMapping *) 0x242)
    #define Port6IN             (*(struct BitMapping *) 0x241)
    #define Port6OUT         (*(struct BitMapping *) 0x243)

    我的错误消失了。  以某种方式计算地址在 编译器的一部分 msp430f5632.h 中有效。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 David:  

    我对您的原始代码进行了几处修改、使其正常工作:

    #include <msp430.h>
    
    
    struct __attribute__((__packed__)) BitMapping
        {
        unsigned
        Bit0:1,
        Bit1:1,
        Bit2:1,
        Bit3:1,
        Bit4:1,
        Bit5:1,
        Bit6:1,
        Bit7:1;
        }CHR;
    
    #define  Port1_2Base     0x200
    #define  Port2OUT        ( (struct BitMapping *)Port1_2Base + 0x03)
    
    
    
    int main(void)
    {
      WDTCTL = WDTPW+WDTHOLD;                   // Stop WDT
    
      P2DIR |= 0xFF;
    
      while (1)
      {
         Port2OUT->Bit5 = 1;
         __delay_cycles(1000);
         Port2OUT->Bit5 = 0;
         __delay_cycles(1000);
      }
    
    }

    关键变化:

    1. 使用 struct __attribute__(__packed__) BitMapping 使编译器了解位打包意向
    2. 删除了#define 内 Port2OUT 前面的*
    3. 使用'->'表示法而不是'.'。

    我在我的示例中看到了引脚切换:)快乐编码。

    Evan