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 above program is complete and self-contained. Should it
execute successfully without getting stuck on the last "while"?
If not, what else do I have to set before diving into the GPIO0
clock config?
Best regards