Hi,
I am trying to read GPIO1[15] input but the value is always the same.
Other GPIO pins work fine when configured as input and GPIO configured in relevant pinmux.
Source code used to reproduce the issue:
#define HW_PINMUX2_GPIO1_MASK 0xFFFF0F00u
#define HW_PINMUX2_GPIO1_ENABLE 0x00004048u
#define GPIOPINNUMBER(bank, pin) ((bank << 4) | (pin + 1))
#define GPIO_BANK_1_NR 1
#define GPIO_1_12_PIN_NR 12
#define GPIO_1_14_PIN_NR 14
#define GPIO_1_15_PIN_NR 15
#define GPIO_1_12_PIN GPIOPINNUMBER(GPIO_BANK_1_NR, GPIO_1_12_PIN_NR)
#define GPIO_1_14_PIN GPIOPINNUMBER(GPIO_BANK_1_NR, GPIO_1_14_PIN_NR)
#define GPIO_1_15_PIN GPIOPINNUMBER(GPIO_BANK_1_NR, GPIO_1_15_PIN_NR)
uint8_t version = 0;
// Unlock kick registers (necessary on C6748)
HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_KICK0R) = SYSCFG_KICK0R_UNLOCK;
HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_KICK1R) = SYSCFG_KICK1R_UNLOCK;
// Configure GPIO pins to GPIO
HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(2)) &= HW_PINMUX2_GPIO1_MASK;
HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(2)) |= HW_PINMUX2_GPIO1_ENABLE;
Task_sleep(1); // 1ms delay
version = GPIOPinRead(SOC_GPIO_0_REGS, GPIO_1_14_PIN);
version |= GPIOPinRead(SOC_GPIO_0_REGS, GPIO_1_15_PIN) << 1;
version |= GPIOPinRead(SOC_GPIO_0_REGS, GPIO_1_12_PIN) << 2;
Following code output shows that second bit (GPIO1[15]) of version variable is always 0.
If I do:
GPIODirModeSet(SOC_GPIO_0_REGS, GPIO_1_15_PIN, GPIO_DIR_INPUT);
before reading the value will always be 1.
Other pins GPIO1[12] and GPIO1[14] are working fine.
GPIO1[15] is shared with McASP I/O pin AXR7. When the pin is read from MCASP_PDIN then the value changes but it does not when read from relevant GPIO register.
When using McASP registers then the readout is correct:
HWREG(SOC_MCASP_0_CTRL_REGS + MCASP_PFUNC) = 0xFEFF;
PDINvar = HWREG(SOC_MCASP_0_CTRL_REGS + MCASP_PDIN);
Any ideas why?
Best reagards,
Teet