/*
 * 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();
}



