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.

6713启动时,有时会卡在pll初始化,



CCS是采用V3.3版本,代码如下,基本上是参考dsk的初始化,程序烧到flash后,debug版可以正常运行,release后,十次可能有一次会卡在pll初始化中,把延时加长了也不管用。

请问是什么原因?怎么解决

static void pll_delay(int count)
{
volatile int i = count;
while(i--);
}

void init_pllc( void )
{

PLLCSR &= ~0x00000001; //PLLEN=0 put PLL in bypass mode
pll_delay(1000); //delay at least 4 cycles


PLLCSR |= 0x00000008; // PLLRST =1 PLLC reset
pll_delay(5000); // delay
PLLM = 18; // 25Mhz x 18 = 450 MHz
pll_delay(5000); // delay
PLLDIV0 = 0x00008000; // D0en =1 PLLDIV0 = 2 CLKIN = 25Mhz PLLIN = 25Mhz

pll_delay(5000);
while( ( ( PLLCSR ) & 0x40 ) == 0 );
//修改过程中,必须保证SYSCLK2 ≤SYSCLK1/2
//先降慢SYSCLK2的速度
PLLDIV2 = 0x8000 | 3; // SYSCLK2 ( Peripherals ) = PLLIN /(PLLDIV2+1)
pll_delay(5000); // 450 / 4 = 112.5MHz

PLLDIV1 = 0x8000 | 1; // SYSCLK1 ( DSP Core ) = PLLIN /(PLLDIV1+1)
pll_delay(5000); // 450 / 2 = 225MHz

PLLDIV3 = 0x8000 | 4; // SYSCLK3 ( EMIF ) = PLLIN /(PLLDIV3+1)
pll_delay(5000); // 450 / 5 = 90MHz
while( ( ( PLLCSR ) & 0x40 ) == 0 );

PLLCSR &= ~0x00000008; // Set PLLRST = 0 take PLL out of reset
pll_delay(100000); //pll lock time max 187.5 us

PLLCSR |= 0x00000001; // Enable PLL
pll_delay(5000);
}