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: Conditional IF statement in function not working?

Part Number: MSP430FR2355


Can someone tell me why the following IF condition (see below) doesn't seem to capture?  The else works fine when PORT1, PORT3 or PORT5 is called....

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);
}

The PORTs are defined as follows, along with GPIO_RegDef_t if needed....

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

**Attention** This is a public forum