Hello,
I'm a newbie to USB and I was trying my luck executing the Piccollo USB examples(downloaded from the ControlSuite) on the F2806x development kit.
I was trying to execute the USB dev bulk example on F28069 development Kit. The program gets in a loop after configuring the system clock.(since the internal watchdog is disabled, the program doesnt comeout of execution).
1. Do I need to add an additional crystal on the development kit to execute the USB examples? if yes, what can be the frequency of the crystal?
2. The PLL2 doesnt get locked up, as the external crystal is missing in the Development kit. below is the code sinnpets,
EALLOW;
//Disable Watchdog
SysCtrlRegs.WDCR = 0x68;
//Setup Clock
//10MHz ->PLL->60MHz->C28
// ->PLL2->120MHz->USB
SysCtrlRegs.CLKCTL.bit.XCLKINOFF = 1;
SysCtrlRegs.CLKCTL.bit.XTALOSCOFF = 0;
SysCtrlRegs.CLKCTL.bit.OSCCLKSRC2SEL = 0;
SysCtrlRegs.CLKCTL.bit.OSCCLKSRCSEL = 1;
while(SysCtrlRegs.PLLSTS.bit.MCLKSTS);
SysCtrlRegs.PLLSTS.bit.DIVSEL = 0;
SysCtrlRegs.PLLSTS.bit.MCLKOFF = 1;
SysCtrlRegs.PLLCR.bit.DIV = 3;
while(!SysCtrlRegs.PLLSTS.bit.PLLLOCKS);
SysCtrlRegs.PLLSTS.bit.MCLKOFF = 1;
SysCtrlRegs.PLLSTS.bit.DIVSEL = 3;
SysCtrlRegs.PLL2CTL.bit.PLL2CLKSRCSEL = 2;
SysCtrlRegs.PLL2CTL.bit.PLL2EN = 1;
SysCtrlRegs.PLL2MULT.bit.PLL2MULT = 12;
while(!SysCtrlRegs.PLL2STS.bit.PLL2LOCKS); // code gets stuck in this instruction, as the PLL2 is not getting locked
//Enable USB Clock
SysCtrlRegs.PCLKCR3.bit.USB0ENCLK = 1;
//Enable PHY
GpioCtrlRegs.GPACTRL2.bit.USB0IOEN = 1;
EDIS;
2. I tried to provide different OSC source for the Main system clock --> internal OSC2 and the USB system clock -->internal OSC1. The changes did not provide any good results though I was able to lock the PLL2 for the frequency . Pls check the below code more information.
EALLOW;
//Disable Watchdog
SysCtrlRegs.WDCR = 0x68;
//Setup Clock
//10MHz ->PLL->60MHz->C28
// ->PLL2->120MHz->USB
/*
SysCtrlRegs.CLKCTL.bit.XCLKINOFF = 1;
SysCtrlRegs.CLKCTL.bit.XTALOSCOFF = 0;
SysCtrlRegs.CLKCTL.bit.OSCCLKSRC2SEL = 0;
SysCtrlRegs.CLKCTL.bit.OSCCLKSRCSEL = 1;
*/
//SysCtrlRegs.CLKCTL.bit.INTOSC2OFF = 0; // Turn on INTOSC2
SysCtrlRegs.CLKCTL.bit.OSCCLKSRC2SEL = 1; // Switch to INTOSC2
SysCtrlRegs.CLKCTL.bit.XCLKINOFF = 1; // Turn off XCLKIN
SysCtrlRegs.CLKCTL.bit.XTALOSCOFF = 1; // Turn off XTALOSC
SysCtrlRegs.CLKCTL.bit.OSCCLKSRCSEL = 1; // Switch to Internal Oscillator 2
SysCtrlRegs.CLKCTL.bit.WDCLKSRCSEL = 1; // Switch Watchdog Clk Src to INTOSC2
//SysCtrlRegs.CLKCTL.bit.INTOSC1OFF = 1; // Turn off INTOSC1
while(SysCtrlRegs.PLLSTS.bit.MCLKSTS);
SysCtrlRegs.PLLSTS.bit.DIVSEL = 0;
SysCtrlRegs.PLLSTS.bit.MCLKOFF = 1;
SysCtrlRegs.PLLCR.bit.DIV = 3;
while(!SysCtrlRegs.PLLSTS.bit.PLLLOCKS);
SysCtrlRegs.PLLSTS.bit.MCLKOFF = 1;
SysCtrlRegs.PLLSTS.bit.DIVSEL = 3;
//SysCtrlRegs.PLL2CTL.bit.PLL2CLKSRCSEL = 2;
SysCtrlRegs.PLL2CTL.bit.PLL2CLKSRCSEL = 1; // selected Internal OSC1 for PLL2
SysCtrlRegs.PLL2CTL.bit.PLL2EN = 1;
SysCtrlRegs.PLL2MULT.bit.PLL2MULT = 12;
while(!SysCtrlRegs.PLL2STS.bit.PLL2LOCKS);
//Enable USB Clock
SysCtrlRegs.PCLKCR3.bit.USB0ENCLK = 1;
//Enable PHY
GpioCtrlRegs.GPACTRL2.bit.USB0IOEN = 1;
EDIS;
Let me know if I have missed some PLL settings in particular.
Rgds,
Harish