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.

CCS/TMS320F28069M: ISSUE WORKING WITH usb_host_msc.c EXAMPLE CODE.

Part Number: TMS320F28069M

Tool/software: Code Composer Studio

Dear all,

I am trying to interface usb with c2000 microcontroller but the example code usb_host_msc.c   is stopping at while loop in  SysCtrlInit() function.

The function is as follows:

void SysCtrlInit(void)
{

EALLOW;
//Disable Watchdog
SysCtrlRegs.WDCR = 0x68;

//Setup Clock
//20MHz ->PLL->80MHz->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);///////////////////////////////////// it is stopping here.
SysCtrlRegs.PLLSTS.bit.DIVSEL = 0;// /4
SysCtrlRegs.PLLSTS.bit.MCLKOFF = 1;
SysCtrlRegs.PLLCR.bit.DIV = 0xA;

while(!SysCtrlRegs.PLLSTS.bit.PLLLOCKS);
SysCtrlRegs.PLLSTS.bit.MCLKOFF = 1;
SysCtrlRegs.PLLSTS.bit.DIVSEL = 2;

SysCtrlRegs.PLL2CTL.bit.PLL2CLKSRCSEL = 2;
 SysCtrlRegs.PLL2CTL.bit.PLL2EN = 1;
 SysCtrlRegs.PLL2MULT.bit.PLL2MULT = 6;
 while(!SysCtrlRegs.PLL2STS.bit.PLL2LOCKS);

//Enable USB Clock
SysCtrlRegs.PCLKCR3.bit.USB0ENCLK = 1;
//Enable PHY
GpioCtrlRegs.GPACTRL2.bit.USB0IOEN = 1;

EDIS;
}

Anyone please help,

Regards,

Nayan Khulbe.

  • It's detecting a missing clock. You can try clearing it by using the PLLSTS.MCLKCLR bit, retrying selecting your clock source, and checking the MCLKSTS bit again to see if the clock is still missing.

    What board are you using? A TI board (LaunchPad? controlCARD?) or a custom board?

    Whitney
  • Hi,

    Thanks for replying, I am using c2000 piccolo launchpad.

    Regards,
    Nayan
  • Thanks for the additional info. Did you try my suggestion?

    Whitney
  • HI,

    Do we need external oscillator for USB operation. Because if i make

    SysCtrlRegs.CLKCTL.bit.XCLKINOFF = 0;
    SysCtrlRegs.CLKCTL.bit.XTALOSCOFF = 0;
    SysCtrlRegs.CLKCTL.bit.OSCCLKSRC2SEL = 0;
    SysCtrlRegs.CLKCTL.bit.OSCCLKSRCSEL = 0;

    instead of:

    SysCtrlRegs.CLKCTL.bit.XCLKINOFF = 1;
    SysCtrlRegs.CLKCTL.bit.XTALOSCOFF = 0;
    SysCtrlRegs.CLKCTL.bit.OSCCLKSRC2SEL = 0;
    SysCtrlRegs.CLKCTL.bit.OSCCLKSRCSEL = 1;

    it is passing the while loop.



    Regards,

    nayan
  • Hi,

    You want me to do something like this:

    void SysCtrlInit(void)
    {

    EALLOW;
    //Disable Watchdog
    SysCtrlRegs.WDCR = 0x68;

    //Setup Clock
    //20MHz ->PLL->80MHz->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.MCLKCLR = 1;///////////////////////////// as you have told
    SysCtrlRegs.CLKCTL.bit.XCLKINOFF = 1;
    SysCtrlRegs.CLKCTL.bit.XTALOSCOFF = 0;
    SysCtrlRegs.CLKCTL.bit.OSCCLKSRC2SEL = 0;
    SysCtrlRegs.CLKCTL.bit.OSCCLKSRCSEL = 1;
    }

    // SysCtrlRegs.PLLSTS.bit.MCLKOFF = 1;
    SysCtrlRegs.PLLSTS.bit.DIVSEL = 0;// /4
    SysCtrlRegs.PLLSTS.bit.MCLKOFF = 1;
    SysCtrlRegs.PLLCR.bit.DIV = 4;

    while(!SysCtrlRegs.PLLSTS.bit.PLLLOCKS);
    SysCtrlRegs.PLLSTS.bit.MCLKOFF = 1;
    SysCtrlRegs.PLLSTS.bit.DIVSEL = 3;

    SysCtrlRegs.PLL2CTL.bit.PLL2CLKSRCSEL = 0;
    SysCtrlRegs.PLL2CTL.bit.PLL2EN = 1;
    SysCtrlRegs.PLL2MULT.bit.PLL2MULT = 6;
    while(!SysCtrlRegs.PLL2STS.bit.PLL2LOCKS);

    //Enable USB Clock
    SysCtrlRegs.PCLKCR3.bit.USB0ENCLK = 1;
    //Enable PHY
    GpioCtrlRegs.GPACTRL2.bit.USB0IOEN = 1;

    EDIS;
    }

    Regards,
    nayan
  • hi,

    I am sorry my launchpad does not have a external oscillator that is why the program is not coming out of while loop.

    I have one more question:
    Do we really need an external oscillator for the usb. Does internal oscillator wont work.

    Regards,
    Nayan.
  • Yes, according to the datasheet, INTOSC1 (the only internal source that can be selected for PLL2) can't be used for USB because it does not meet the accuracy requirements. You will need to provide something external.

    Whitney