Hi,
I'm trying to configure the L138 PLL from the DSP at startup. I've attached the code below. After configuring it, it never seems to change frequency. Specifically the EMIF clock. I'm trying to set it to 100MHz but it stays at 25MHz after I've configured it.
I've even checked using a gel file from one of the forums used for diagnostic. It says the PLL is setup correctly and should be set to 100MHz. Do you see anything I may have done wrong.
My configuration code is now based on the "C6000 DSP+ARM Processor Technical Reference Manual" instructions with some additions from a gel file that was provided to me.
Thanks for your help.
Regards,
James McNEill
#define PLL_LOCK_TIME_CNT 2400 #define PLL_STABILIZATION_TIME 2000 #define PLL_RESET_TIME_CNT 200 void Initialize(void) { GIO_Attrs gioAttrs = GIO_ATTRS; Int32 result; Int UartStatus = 0; Uint32 cntDACmem=0; Uint32 temp; Uint32 temparray[2048]; Uint32 FPGA_Ver_Major, FPGA_Ver_Minor, FPGA_Ver_Build; // Gpio_Params gpioParams=Gpio_PARAMS; //------------------------------------------------- // CONFIGURE PIN MUXES //------------------------------------------------- //-- Write Unlock code to the Kick Registers SYSCONFIG0->KICK0R = KICK0R_Unlock; SYSCONFIG0->KICK1R = KICK1R_Unlock; //-- Setup Pin Muxes //-- Setup EMFA, UART2, MMCSD0, Inerrupt GPIOs SYSCONFIG0->PINMUX0 = PINMUX0_VALUE; SYSCONFIG0->PINMUX1 = PINMUX1_VALUE; SYSCONFIG0->PINMUX2 = PINMUX2_VALUE; SYSCONFIG0->PINMUX3 = PINMUX3_VALUE; SYSCONFIG0->PINMUX4 = PINMUX4_VALUE; SYSCONFIG0->PINMUX5 = PINMUX5_VALUE; SYSCONFIG0->PINMUX6 = PINMUX6_VALUE; SYSCONFIG0->PINMUX7 = PINMUX7_VALUE; SYSCONFIG0->PINMUX8 = PINMUX8_VALUE; SYSCONFIG0->PINMUX9 = PINMUX9_VALUE; SYSCONFIG0->PINMUX10 = PINMUX10_VALUE; SYSCONFIG0->PINMUX11 = PINMUX11_VALUE; SYSCONFIG0->PINMUX12 = PINMUX12_VALUE; SYSCONFIG0->PINMUX13 = PINMUX13_VALUE; SYSCONFIG0->PINMUX14 = PINMUX14_VALUE; SYSCONFIG0->PINMUX15 = PINMUX15_VALUE; SYSCONFIG0->PINMUX16 = PINMUX16_VALUE; SYSCONFIG0->PINMUX17 = PINMUX17_VALUE; SYSCONFIG0->PINMUX18 = PINMUX18_VALUE; SYSCONFIG0->PINMUX19 = PINMUX19_VALUE; //-------------------------------------- // Configure the PLLs //-------------------------------------- printf("SETTING UP THE PLLs"); //-- Clear the PLL register lock //SYSCONFIG0->CFGCHIP0 &= ~(0x00000010); SYSCONFIG0->CFGCHIP0 &= ~CSL_SYSCFG_CFGCHIP0_PLL_MASTER_LOCK_MASK; SYSCONFIG0->CFGCHIP3 &= ~CSL_SYSCFG_CFGCHIP3_PLL1_MASTER_LOCK_MASK; //-- Program the PLL mode bit to internal Oscillator. PLL_regs->PLLCTL &= ~CSL_PLLC_PLLCTL_CLKMODE_MASK; //-- Clear the PLLENSRC bit PLL_regs->PLLCTL &= ~CSL_PLLC_PLLCTL_PLLENSRC_MASK; //-- Set External source to internal oscillator PLL_regs->PLLCTL &= ~CSL_PLLC_PLLCTL_EXTCLKSRC_MASK; //-- Set the PLLEN to '0' PLL_regs->PLLCTL &= ~CSL_PLLC_PLLCTL_PLLEN_MASK; //-- Wait 5 cycles for PLLEN to take affect for(temp=0; temp<4; temp++) {;} //-- Clear the PLL reset bit PLL_regs->PLLCTL &= ~CSL_PLLC_PLLCTL_PLLRST_MASK; //-- Disable the PLL output PLL_regs->PLLCTL |= CSL_PLLC_PLLCTL_PLLDIS_MASK; //-- Clear the PLL power down bit PLL_regs->PLLCTL &= ~CSL_PLLC_PLLCTL_PLLPWRDN_MASK; //-- Enable the PLL output PLL_regs->PLLCTL &= ~CSL_PLLC_PLLCTL_PLLDIS_MASK; //-- Wait for the PLL stabilisation time for(temp=0; temp<PLL_STABILIZATION_TIME; temp++) {;} //-- Program PLLM PLL_regs->PLLM = CSL_PLLC_PLLM_PLLM_MASK & 24; //-- Make sure PREDIV is enabled PLL_regs->PREDIV |= CSL_PLLC_PREDIV_PREDEN_MASK; //-- Disable POSTDIV // PLL_regs->POSTDIV |= CSL_PLLC_POSTDIV_POSTDEN_MASK; PLL_regs->POSTDIV = CSL_PLLC_POSTDIV_POSTDEN_MASK | 1; //-- Wait for GOSTAT to clear while ( (PLL_regs->PLLSTAT & 0x1) == 1 ){} //-- Program the PLLDIVx Registers PLL_regs->PLLDIV1 = (0 & CSL_PLLC_PLLDIV1_RATIO_MASK) | CSL_PLLC_PLLDIV1_D1EN_MASK; PLL_regs->PLLDIV2 = (1 & CSL_PLLC_PLLDIV2_RATIO_MASK) | CSL_PLLC_PLLDIV2_D2EN_MASK; PLL_regs->PLLDIV3 = (2 & CSL_PLLC_PLLDIV3_RATIO_MASK) | CSL_PLLC_PLLDIV3_D3EN_MASK; PLL_regs->PLLDIV4 = (3 & CSL_PLLC_PLLDIV4_RATIO_MASK) | CSL_PLLC_PLLDIV4_D4EN_MASK; PLL_regs->PLLDIV6 = (0 & CSL_PLLC_PLLDIV6_RATIO_MASK) | CSL_PLLC_PLLDIV6_D6EN_MASK; PLL_regs->PLLDIV7 = (5 & CSL_PLLC_PLLDIV7_RATIO_MASK) | CSL_PLLC_PLLDIV7_D7EN_MASK; //-- Wait for GOSTAT to clear while ( (PLL_regs->PLLSTAT & 0x1) == 1 ){} //-- Set GPSET bit to '1' PLL_regs->PLLCTL |= CSL_PLLC_PLLCMD_GOSET_MASK; //-- Wait for GOSTAT to clear while ( (PLL_regs->PLLSTAT & 0x1) == 1 ){} //-- Wait for PLL to reset properly for(temp=0; temp<PLL_RESET_TIME_CNT; temp++) {;} //-- set the PLL reset bit PLL_regs->PLLCTL |= CSL_PLLC_PLLCTL_PLLRST_MASK; //-- Wait for the PLL to LOCK for(temp=0; temp<PLL_LOCK_TIME_CNT; temp++) {;} //-- Set the PLLEN to '1' PLL_regs->PLLCTL |= CSL_PLLC_PLLCTL_PLLEN_MASK; SYSCONFIG0->CFGCHIP3 &= ~CSL_SYSCFG_CFGCHIP3_EMA_CLKSRC_MASK; //-- Set the PLL register lock //SYSCONFIG0->CFGCHIP0 |= (0x1 << 4) & 0x00000010; SYSCONFIG0->CFGCHIP0 |= CSL_SYSCFG_CFGCHIP0_PLL_MASTER_LOCK_MASK; SYSCONFIG0->CFGCHIP3 |= CSL_SYSCFG_CFGCHIP3_PLL1_MASTER_LOCK_MASK; // // END PLL SETUP //------------------------------------------ //---------------------------------- //-- Setup FPGA Memory Space. //---------------------------------- //EMIFA_regs->CE2CFG = 0x8244125; EMIFA_regs->CE2CFG = 0x83441A9; printf("SETUP THE EMIF MEMORY SPACE\n"); }