/* * File: mcf52221_sysinit.c * Purpose: Power-on Reset configuration of the MCF52221. * * Notes: * */ #include "support_common.h" #include "exceptions.h" /********************************************************************/ static void pll_init(void) { MCF_CLOCK_CCHR =0x05; // The PLL pre divider - 48MHz / 6 = 8MHz /* The PLL pre-divider affects this!!! * Multiply 8Mhz reference crystal /CCHR by 10 to acheive system clock of 80Mhz */ MCF_CLOCK_SYNCR = MCF_CLOCK_SYNCR_MFD(3) | MCF_CLOCK_SYNCR_CLKSRC| MCF_CLOCK_SYNCR_PLLMODE | MCF_CLOCK_SYNCR_PLLEN ; while (!(MCF_CLOCK_SYNSR & MCF_CLOCK_SYNSR_LOCK)) { } } /********************************************************************/ static void scm_init(void) { /* * Enable on-chip modules to access internal SRAM */ MCF_SCM_RAMBAR = (0 | MCF_SCM_RAMBAR_BA(RAMBAR_ADDRESS) | MCF_SCM_RAMBAR_BDE); } /********************************************************************/ /* * Out of reset, the low-level assembly code calls this routine to * initialize the mcf5206e for this board. A temporary stack has been * setup in the internal SRAM, and the stack pointer will be changed * to point to DRAM once this routine returns. */ void __initialize_hardware(void) { /******************************************************* * Out of reset, the low-level assembly code calls this * routine to initialize the MCF52221 modules for the * M522223EVB board. ********************************************************/ asm { /* Initialize IPSBAR */ move.l #__IPSBAR,d0 andi.l #0xC0000000,d0 // need to mask add.l #0x1,d0 move.l d0,0x40000000 /* Initialize FLASHBAR */ move.l #__FLASHBAR,d0 andi.l #0xFFF80000,d0 // need to mask add.l #0x61,d0 movec d0,FLASHBAR } /* Set real time clock freq */ MCF_CLOCK_RTCDR = 48000000; pll_init(); scm_init(); initialize_exceptions(); }