⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sysinit.c

📁 用来测试mcf5249的嵌入式测试程序
💻 C
📖 第 1 页 / 共 2 页
字号:
/*
 * File:		sysinit.c
 * Purpose:		Power-on Reset configuration of the MCF5249.
 *
 */

#include "type.h"
#include "mcf5249.h"
#include "base.h"
#include "sysinit.h"

/********************************************************************/
void mcf5249_init(void)
{
	/*******************************************************
	*	This routine to initialize the MCF5249 modules for the  
	*	(M5249AN | M5249C3) board. A temporary stack has been
	*	 setup in the internal SRAM.
	********************************************************/
	mcf5249_sim_init();
	mcf5249_timer_init();
	mcf5249_uart_init();
	mcf5249_mbus_init();
	mcf5249_dma_init();
	mcf5249_cs_init();
	mcf5249_sdram_init();
	
	/* Enable level 7 interrupt to ColdFire core */
	imm->sim.IMR &= ~MCF5249_SIM_IMR_EINT7;

	/*
	switch (imm->sim.RSR)
	{
		case MCF5249_SIM_RSR_HRST:
			asm(nop);    //Hard Reset
			break;
		case MCF5249_SIM_RSR_SWTR:
			asm(nop);    //Software Watchdog Reset
			break;
	}
	imm->sim.RSR = (0
		| MCF5249_SIM_RSR_HRST
		| MCF5249_SIM_RSR_SWTR
		) ;
	*/
	mcf5249_gpio_init();
	mcf5249_ide_init();
	mcf5249_iis_init();
	mcf5249_qspi_init();
}

/****************************************************************/
void mcf5249_sim_init(void)
{
	/*******************************************************
	*
	* This routine executed upon reset to initialize
	* MCF5249 periphs.  An initial stack must have been setup
	* in the SRAM in order for this routine to work.
	*
	*******************************************************/

	imm->sim.SYPCR	=  0;	/*  Disable the Software Watchdog */
	imm->sim.MARBCR	=  0;	/*  Disable external visibility of internal bus */
	imm->sim.IMR	=  0xFFFFFFFF;	/*  Mask all interrupt sources */
	imm->sim.AVCR	=  0xFF;	/*  Autovector all external interrupts */
 
	/*
	 * Setup Interrupt Source Vectors
	 */
	imm->sim.ICR0 = ( 0                     /* Software Watchdog */
			| MCF5249_SIM_ICR_AVEC
			| MCF5249_SIM_ICR_IL(7)
			| MCF5249_SIM_ICR_IP_EXT ) ;
	imm->sim.ICR1 = ( 0
			| MCF5249_SIM_ICR_AVEC          /* Timer 1 */
			| MCF5249_SIM_ICR_IL(6)
			//| MCF5249_SIM_ICR_IP_EXT
			| MCF5249_SIM_ICR_IP_INT ) ;
	imm->sim.ICR2 = ( 0
			| MCF5249_SIM_ICR_AVEC          /* Timer 2 */
			| MCF5249_SIM_ICR_IL(5)
			| MCF5249_SIM_ICR_IP_INT ) ;
	imm->sim.ICR3 = ( 0
			| MCF5249_SIM_ICR_AVEC          /* MBUS    */
			| MCF5249_SIM_ICR_IL(3) ) ;
	imm->sim.ICR4 = ( 0
			| MCF5249_SIM_ICR_AVEC          /* UART 1  */
			| MCF5249_SIM_ICR_IL(3)
			| MCF5249_SIM_ICR_IP_EXT ) ;
	imm->sim.ICR5 = ( 0
			| MCF5249_SIM_ICR_AVEC          /* UART 2  */
			| MCF5249_SIM_ICR_IL(3)
			| MCF5249_SIM_ICR_IP_INT ) ;
	imm->sim.ICR6 = ( 0
			| MCF5249_SIM_ICR_AVEC          /* DMA 0   */
			| MCF5249_SIM_ICR_IL(2) ) ;
	imm->sim.ICR7 = ( 0
			| MCF5249_SIM_ICR_AVEC          /* DMA 1   */
			| MCF5249_SIM_ICR_IL(2)
			| MCF5249_SIM_ICR_IP_INT ) ;
	imm->sim.ICR8 = ( 0
			| MCF5249_SIM_ICR_AVEC          /* DMA 2   */
			| MCF5249_SIM_ICR_IL(2)
			| MCF5249_SIM_ICR_IP_EXT ) ;
	imm->sim.ICR9 = ( 0
			| MCF5249_SIM_ICR_AVEC          /* DMA 3   */
			| MCF5249_SIM_ICR_IL(2)
			| MCF5249_SIM_ICR_IP_EXT
			| MCF5249_SIM_ICR_IP_INT ) ;
	imm->sim.ICR10 = ( 0
			| MCF5249_SIM_ICR_AVEC          /* QSPI    */
			| MCF5249_SIM_ICR_IL(1) ) ;
	imm->sim.ICR11 = ( 0
			| MCF5249_SIM_ICR_AVEC          /* unused  */
			| MCF5249_SIM_ICR_IL(1)
			| MCF5249_SIM_ICR_IP_EXT ) ;
			
	imm2->sint.INTPRI1 = 0x00007000;
	imm2->sint.INTPRI2 = 0;
	imm2->sint.INTPRI3 = 0;
	imm2->sint.INTPRI4 = 0;
	imm2->sint.INTPRI5 = 0x00700000;
	imm2->sint.INTPRI6 = 0;
	imm2->sint.INTPRI7 = 0;
	imm2->sint.INTPRI8 = 0;
	imm2->sint.INTBASE = 0x80;
}

/****************************************************************/
void mcf5249_mbus_init(void)
{
	imm->mbus.MBCR = 0;     /* Disable MBUS */ 
    imm2->iic2.MBCR2 = 0;
}

/****************************************************************/
void mcf5249_dma_init(void)
{
	imm->dma.DCR0 = 0;	/* Disable DMA 0 */
	imm->dma.DCR1 = 0;	/* Disable DMA 1 */
	imm->dma.DCR2 = 0;	/* Disable DMA 2 */
	imm->dma.DCR3 = 0;	/* Disable DMA 3 */
}

/****************************************************************/
//Set 50ms
void mcf5249_timer_init(void)
{
	/*	Reset timers and disable them */
	//imm->timer.TMR0 = 0x041a;           //Master system clock/(4+1)
	imm->timer.TMR0 = 0x311a;           //Master system clock/(49+1)
	imm->timer.TMR1 = 0;
	imm->timer.TER0 = ( 0
		| MCF5249_TIMER_TER_REF
		| MCF5249_TIMER_TER_CAP
		) ;
	imm->timer.TER1 = ( 0
		| MCF5249_TIMER_TER_REF
		| MCF5249_TIMER_TER_CAP
		) ;
	//imm->timer.TRR0 = 0x0032;           //Reference ->79.968kHz
	imm->timer.TRR0 = 0x4e20;           //Reference ->19.992Hz

	/* Enable Timer0 interrupt to ColdFire core */
	//imm->sim.IMR &= ~MCF5249_SIM_IMR_TIMER1;
	//imm->timer.TMR0 |= MCF5249_TIMER_TMR_RST;
}

/****************************************************************/
void mcf5249_uart_init(void)
{
	/************************************************************************/
	/*  UART 1                                                              */
	/************************************************************************/
	imm->uart1.UCR = MCF5249_UART_UCR_RESET_TX;		/* Transmitter Reset    */
	imm->uart1.UCR = MCF5249_UART_UCR_RESET_RX;		/* Receiver Reset       */
	imm->uart1.UCR = MCF5249_UART_UCR_TX_ENABLED;	/* Enable Transmitter	*/
	imm->uart1.UCR = MCF5249_UART_UCR_RX_ENABLED;	/* Enable Receiver		*/
	imm->uart1.UCR = MCF5249_UART_UCR_RESET_MR;		/* Mode Register Reset  */
 
	imm->uart1.UMR = ( 0
		| MCF5249_UART_UMR1_PM_NONE			/* No parity					*/
		| MCF5249_UART_UMR1_BC_8			/* 8 bits per character			*/
		) ;
	imm->uart1.UMR = ( 0
		| MCF5249_UART_UMR2_CM_NORMAL		/* No echo or loopback			*/
		| MCF5249_UART_UMR2_STOP_BITS_1		/* 1 stop bit					*/
		) ;
	imm->uart1.USR = ( 0
		| MCF5249_UART_UCSR_RCS0
		| MCF5249_UART_UCSR_RCS2
		| MCF5249_UART_UCSR_RCS3
		| MCF5249_UART_UCSR_TCS0
		| MCF5249_UART_UCSR_TCS2
		| MCF5249_UART_UCSR_TCS3
		) ;
	imm->uart1.UIR = 0;						/* Disable all interrupts       */
	imm->uart1.UBG1 = 0;
	imm->uart1.UBG2 = 0x63;					/* Set baud to 19200, 45MHZ		*/

    /************************************************************************/
    /*  UART 2                                                              */
    /************************************************************************/
	imm->uart2.UCR = MCF5249_UART_UCR_RESET_TX;		/* Transmitter Reset    */
	imm->uart2.UCR = MCF5249_UART_UCR_RESET_RX;		/* Receiver Reset       */
	imm->uart2.UCR = MCF5249_UART_UCR_TX_ENABLED;	/* Enable Transmitter	*/
	imm->uart2.UCR = MCF5249_UART_UCR_RX_ENABLED;	/* Enable Receiver		*/
	imm->uart2.UCR = MCF5249_UART_UCR_RESET_MR;		/* Mode Register Reset  */
 
	imm->uart2.UMR = ( 0
		| MCF5249_UART_UMR1_PM_NONE			/* No parity					*/
		| MCF5249_UART_UMR1_BC_8			/* 8 bits per character			*/
		) ;
	imm->uart2.UMR = ( 0
		| MCF5249_UART_UMR2_CM_NORMAL		/* No echo or loopback			*/
		| MCF5249_UART_UMR2_STOP_BITS_1		/* 1 stop bit					*/
		) ;
	imm->uart2.USR = ( 0
		| MCF5249_UART_UCSR_RCS0
		| MCF5249_UART_UCSR_RCS2
		| MCF5249_UART_UCSR_RCS3
		| MCF5249_UART_UCSR_TCS0
		| MCF5249_UART_UCSR_TCS2
		| MCF5249_UART_UCSR_TCS3
		) ;
	imm->uart2.UIR = 0;						/* Disable all interrupts       */
	imm->uart2.UBG1 = 0;
	imm->uart2.UBG2 = 0x63;					/* Set baud to 19200, 45MHZ		*/
}


/****************************************************************/
void mcf5249_cs_init(void)
{
	/*	ChipSelect 0 is the global chip select coming out of system */
	/*	reset.CS0 is asserted for every access until CSMR0 is written. */
	/*	Therefore, the entire ChipSelect must be properly set prior to  */
	/*	asserting CSMR0_V. */
	imm->cs.CSAR0 = MCF5249_CS_CSAR(FLASH_ADDRESS);
	imm->cs.CSCR0 = ( 0
			| MCF5249_CS_CSCR_WS(3)
			| MCF5249_CS_CSCR_AA		/* TA_ generated internally */
			| MCF5249_CS_CSCR_PS_16 );
	imm->cs.CSMR0 = ( 0
			| MCF5249_CS_CSMR_MASK_2M
			| MCF5249_CS_CSMR_CI
			| MCF5249_CS_CSMR_V );

	imm->cs.CSAR1 = MCF5249_CS_CSAR(NET_ADDRESS);
	imm->cs.CSCR1 = ( 0
			| MCF5249_CS_CSCR_WS(3)
			| MCF5249_CS_CSCR_AA		/* TA_ generated internally */
			| MCF5249_CS_CSCR_PS_16 );
	imm->cs.CSMR1 = ( 0
			| MCF5249_CS_CSMR_MASK_2M
			| MCF5249_CS_CSMR_CI
			| MCF5249_CS_CSMR_V );

	imm->cs.CSAR2 = MCF5249_CS_CSAR(IDE_ADDRESS);
	imm->cs.CSCR2 = ( 0
			| MCF5249_CS_CSCR_WS(7)
			| MCF5249_CS_CSCR_AA		/* TA_ generated internally */
			| MCF5249_CS_CSCR_PS_16 );
	imm->cs.CSMR2 = ( 0
			| MCF5249_CS_CSMR_MASK_16M
			| MCF5249_CS_CSMR_CI
			| MCF5249_CS_CSMR_V );
}  

/****************************************************************/
void mcf5249_sdram_init(void)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -