Trying to set up the GPIOs, the GPIO clock setup is not succeeding;
it gets stuck on the last “while” wait in GPIO0ModuleClkConfig;
see the following complete source code, copied from Starterware,
that compiles and runs:
----------------------------------------
#define HWREG(x) (*((volatile unsigned int*)(x)))
#define PRCM_REGS (0x44E00000)
#define SOC_CM_WKUP_REGS (PRCM_REGS + 0x400)
#define CM_WKUP_CLKSTCTRL (0x0)
#define CM_WKUP_GPIO0_CLKCTRL (0x8) /* For GPIO0 */
/* CLKSTCTRL */
#define CM_WKUP_CLKSTCTRL_CLKACTIVITY_GPIO0_GDBCLK (0x00000100u) /* For GPIO0 */
/* GPIO0_CLKCTRL */
#define CM_WKUP_GPIO0_CLKCTRL_IDLEST (0x00030000u) /* For GPIO0 */
#define CM_WKUP_GPIO0_CLKCTRL_IDLEST_SHIFT (0x00000010u) /* For GPIO0 */
#define CM_WKUP_GPIO0_CLKCTRL_IDLEST_FUNC (0x0u) /* For GPIO0 */
#define CM_WKUP_GPIO0_CLKCTRL_MODULEMODE (0x00000003u)
#define CM_WKUP_GPIO0_CLKCTRL_MODULEMODE_ENABLE (0x2u) /* For GPIO0 */
#define CM_WKUP_GPIO0_CLKCTRL_OPTFCLKEN_GPIO0_GDBCLK (0x00040000u) /* For GPIO0 */
int main() /* Establish only GPIO0ModuleClkConfig */
{
/* Writing to MODULEMODE field of CM_WKUP_GPIO0_CLKCTRL register. */
HWREG(SOC_CM_WKUP_REGS + CM_WKUP_GPIO0_CLKCTRL) |=
CM_WKUP_GPIO0_CLKCTRL_MODULEMODE_ENABLE;
/* Waiting for MODULEMODE field to reflect the written value. */
while(CM_WKUP_GPIO0_CLKCTRL_MODULEMODE_ENABLE !=
(HWREG(SOC_CM_WKUP_REGS + CM_WKUP_GPIO0_CLKCTRL) &
CM_WKUP_GPIO0_CLKCTRL_MODULEMODE));
/*
** Writing to OPTFCLKEN_GPIO0_GDBCLK field of CM_WKUP_GPIO0_CLKCTRL
** register.
*/
HWREG(SOC_CM_WKUP_REGS + CM_WKUP_GPIO0_CLKCTRL) |=
CM_WKUP_GPIO0_CLKCTRL_OPTFCLKEN_GPIO0_GDBCLK;
/* Waiting for OPTFCLKEN_GPIO0_GDBCLK field to reflect the written value. */
while(CM_WKUP_GPIO0_CLKCTRL_OPTFCLKEN_GPIO0_GDBCLK !=
(HWREG(SOC_CM_WKUP_REGS + CM_WKUP_GPIO0_CLKCTRL) &
CM_WKUP_GPIO0_CLKCTRL_OPTFCLKEN_GPIO0_GDBCLK));
/* Writing to IDLEST field in CM_WKUP_GPIO0_CLKCTRL register. */
while((CM_WKUP_GPIO0_CLKCTRL_IDLEST_FUNC <<
CM_WKUP_GPIO0_CLKCTRL_IDLEST_SHIFT) !=
(HWREG(SOC_CM_WKUP_REGS + CM_WKUP_GPIO0_CLKCTRL) &
CM_WKUP_GPIO0_CLKCTRL_IDLEST));
/*
** Waiting for CLKACTIVITY_GPIO0_GDBCLK field in CM_WKUP_GPIO0_CLKCTRL
** register to attain desired value.
*/
while(CM_WKUP_CLKSTCTRL_CLKACTIVITY_GPIO0_GDBCLK !=
(HWREG(SOC_CM_WKUP_REGS + CM_WKUP_CLKSTCTRL) &
CM_WKUP_CLKSTCTRL_CLKACTIVITY_GPIO0_GDBCLK));
return 0;
}
----------------------------------------
The voltages are, on my new board:
VDDSHV1/GPMC = VDIG1= 1.8V
VDDSHV2/MMCSD-B = VMMC = 3.3V
VDDSHV3/GEMAC-B = VMMC = 3.3V
VDDSHV4/MMCSD-A = VMMC = 3.3V
VDDSHV5/GEMAC-A = VMMC = 3.3V
VDDSHV6/GENERAL = VAUX2 = 3.3V
Does VDDSHV1 need to be set to 3.3V for GPIO0ModuleClkConfig?
Setting that will require I2C setup on my new board…
Best regards