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.

[参考译文] MSP430FR2355:函数中的条件 IF 语句不起作用?

Guru**** 2535760 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/999761/msp430fr2355-conditional-if-statement-in-function-not-working

器件型号:MSP430FR2355

是否有人能告诉我、如果情况(见下文)似乎无法满足以下条件、为什么会出现这种情况?  当 PORT1、PORT3或 PORT5被称为....时,其它器件工作正常

void Timer_PWM(Timer_RegDef_t *pTIMERx, uint8_t WhichCCRegister, uint8_t Output, uint16_t LoadValue, \
               GPIO_RegDef_t *pGPIOx, uint8_t Pin)
{
    uint16_t *p;

    pGPIOx->POUT |= (1 << Pin);
    pGPIOx->DIR |= (1 << Pin);

    p = (uint16_t *)(&pGPIOx->SEL[0]);

    if ((pGPIOx == PORT2) || (pGPIOx == PORT4) || (pGPIOx == PORT6))
        *(p+1) |= (1 << Pin);
    else
        *p = (1 << Pin);

    p = (uint16_t *)(&pTIMERx->TB_CTL);
    *(p + CCVALUE_OFFSET + WhichCCRegister) = LoadValue;
    *(p + CCCNTRL_OFFSET + WhichCCRegister) &= (0x7 << 5);
    *(p + CCCNTRL_OFFSET + WhichCCRegister) |= (Output << 5);
}

端口定义如下、如果需要的话、与 GPIO_RegDef_t 一起....

typedef struct
{
    __vo uint16_t PIN;   /*GPIO port input value register        Offset 0x00 */
    __vo uint16_t POUT;  /*GPIO port output value register       Offset 0x02 */
    __vo uint16_t DIR;   /*GPIO port direction register          Offset 0x04 */
    __vo uint16_t PREN; /*GPIO resistor enable register          Offset 0x06 */
    uint16_t RESERVED;   /* Reserved                             Offset 0x08 */
    __vo uint16_t SEL[2];/*GPIO port function select register    Offset 0x0A SEL[0] - 0x0C SEL[1] */
    __vo uint16_t IV;   /*GPIO port output data register        Offset 0x0E */
    uint16_t RSVDA[3];   /*Reserved                              Offset 0x10, 0x12, 0x14 */
    __vo uint16_t PSELC; /*GPIO Complement selection             Offset 0x16 */
    __vo uint16_t PIES;  /*GPIO Interrupt edge select            Offset 0x18 */
    __vo uint16_t PIE;  /*GPIO Interrupt edge                    Offset 0x1A */
    __vo uint16_t PIFG;  /*GPIO Interrupt flag                   Offset 0x1C */
}GPIO_RegDef_t;

#define PORT1   (GPIO_RegDef_t *)P1_BASE
#define PORT2   (GPIO_RegDef_t *)P2_BASE
#define PORT3   (GPIO_RegDef_t *)P3_BASE
#define PORT4   (GPIO_RegDef_t *)P4_BASE
#define PORT5   (GPIO_RegDef_t *)P5_BASE
#define PORT6   (GPIO_RegDef_t *)P6_BASE