📄 sysinit.c
字号:
/*
* File: sysinit.c
* Purpose: Reset configuration of the M5282EVB
*
* Notes:
*/
#include "src/include/dbug.h"
/********************************************************************/
void
mcf5282_init(void)
{
void mcf5282_wtm_init(void);
void mcf5282_pll_init(void);
void mcf5282_scm_init(void);
void mcf5282_gpio_init(void);
void mcf5282_uart_init(void);
void mcf5282_cs_init(void);
void mcf5282_sdram_init(void);
mcf5282_wtm_init();
mcf5282_pll_init();
mcf5282_scm_init();
mcf5282_cs_init();
mcf5282_gpio_init();
mcf5282_uart_init();
mcf5282_sdram_init();
}
/********************************************************************/
void
mcf5282_wtm_init(void)
{
/*
* Disable Software Watchdog Timer
*/
MCF5282_WTM_WCR = 0;
}
/********************************************************************/
void
mcf5282_pll_init(void)
{
/*
* Multiply 8Mhz reference crystal by 8 to acheive system clock of 64Mhz
*/
MCF5282_CLOCK_SYNCR = MCF5282_CLOCK_SYNCR_MFD(2);
while (!(MCF5282_CLOCK_SYNSR & MCF5282_CLOCK_SYNSR_LOCK));
}
/****************************************************************/
void
mcf5282_scm_init(void)
{
/*
* Enable on-chip modules to access internal SRAM
*/
MCF5282_SCM_RAMBAR = MCF5282_SCM_RAMBAR_BDE;
}
/********************************************************************/
void
mcf5282_gpio_init(void)
{
/*
* When booting from external Flash, the port-size is less than
* the port-size of SDRAM. In this case it is necessary to enable
* Data[23:0] on Ports B, C, and D.
*/
MCF5282_GPIO_PBCDPAR = (0
| MCF5282_GPIO_PBCDPAR_PBPA
| MCF5282_GPIO_PBCDPAR_PCDPA);
/*
* Initialize PEHLPAR to enable Ethernet signals
*/
MCF5282_GPIO_PEHLPAR = 0xC0;
}
/********************************************************************/
void
mcf5282_uart_init(void)
{
/*
* Initialize UART0 for serial communications
*/
register uint16 ubgs;
/*
* Enable URXD0 and UTXD0 on Port UA
*/
MCF5282_GPIO_PUAPAR = 0x03;
/*
* Reset Transmitter
*/
MCF5282_UART0_UCR = MCF5282_UART_UCR_RESET_TX;
/*
* Reset Receiver
*/
MCF5282_UART0_UCR = MCF5282_UART_UCR_RESET_RX;
/*
* Reset Mode Register
*/
MCF5282_UART0_UCR = MCF5282_UART_UCR_RESET_MR;
/*
* No parity, 8-bits per character
*/
MCF5282_UART0_UMR = (0
| MCF5282_UART_UMR1_PM_NONE
| MCF5282_UART_UMR1_BC_8 );
/*
* No echo or loopback, 1 stop bit
*/
MCF5282_UART0_UMR = (0
| MCF5282_UART_UMR2_CM_NORMAL
| MCF5282_UART_UMR2_STOP_BITS_1);
/*
* Set Rx and Tx baud by timer
*/
MCF5282_UART0_UCSR = (0
| MCF5282_UART_UCSR_RCS_SYS_CLK
| MCF5282_UART_UCSR_TCS_SYS_CLK);
/*
* Mask all UART interrupts
*/
MCF5282_UART0_UIMR = 0;
/*
* Calculate baud settings
*/
ubgs = (uint16)((SYSTEM_CLOCK*1000000)/(board_get_baud() * 32));
MCF5282_UART0_UBG1 = (uint8)((ubgs & 0xFF00) >> 8);
MCF5282_UART0_UBG2 = (uint8)(ubgs & 0x00FF);
/*
* Enable receiver and transmitter
*/
MCF5282_UART0_UCR = (0
| MCF5282_UART_UCR_TX_ENABLED
| MCF5282_UART_UCR_RX_ENABLED);
}
/********************************************************************/
void
mcf5282_sdram_init(void)
{
int i;
if (!(MCF5282_SDRAMC_DACR0 & MCF5282_SDRAMC_DACR_RE))
{
/*
* Initialize DRAM Control Register: DCR
*/
MCF5282_SDRAMC_DCR = (0
| MCF5282_SDRAMC_DCR_RTIM_6
| MCF5282_SDRAMC_DCR_RC((15 * SYSTEM_CLOCK)>>4));
/*
* Initialize DACR0
*/
MCF5282_SDRAMC_DACR0 = (0
| MCF5282_SDRAMC_DACR_BASE(SDRAM_ADDRESS)
| MCF5282_SDRAMC_DACR_CASL(1)
| MCF5282_SDRAMC_DACR_CBM(3)
| MCF5282_SDRAMC_DACR_PS_32);
/*
* Initialize DMR0
*/
MCF5282_SDRAMC_DMR0 = (0
| MCF5282_SDRAMC_DMR_BAM_16M
| MCF5282_SDRAMC_DMR_V);
/*
* Set IP (bit 3) in DACR
*/
MCF5282_SDRAMC_DACR0 |= MCF5282_SDRAMC_DACR_IP;
/*
* Write to this block to initiate precharge
*/
*(uint32 *)(SDRAM_ADDRESS) = 0xA5A59696;
/*
* Set RE (bit 15) in DACR
*/
MCF5282_SDRAMC_DACR0 |= MCF5282_SDRAMC_DACR_RE;
/*
* Wait for at least 8 auto refresh cycles to occur
*/
for (i = 0; i < 2000; i++)
{
#ifndef __MWERKS__
asm(" nop");
#else
asm( nop);
#endif
}
/*
* Finish the configuration by issuing the IMRS.
*/
MCF5282_SDRAMC_DACR0 |= MCF5282_SDRAMC_DACR_IMRS;
/*
* Write to the SDRAM Mode Register
*/
*(uint32 *)(SDRAM_ADDRESS + 0x400) = 0xA5A59696;
}
}
/********************************************************************/
void
mcf5282_cs_init(void)
{
/*
* ChipSelect 1 - External SRAM
*/
MCF5282_CS1_CSAR = MCF5282_CS_CSAR_BA(EXT_SRAM_ADDRESS);
MCF5282_CS1_CSCR = MCF5282_CS_CSCR_AA | MCF5282_CS_CSCR_PS_32;
MCF5282_CS1_CSMR = MCF5282_CS_CSMR_BAM_512K | MCF5282_CS_CSMR_V;
/*
* ChipSelect 0 - External Flash
*/
MCF5282_CS0_CSAR = MCF5282_CS_CSAR_BA(AMD_FLASH_ADDRESS);
MCF5282_CS0_CSCR = (0
| MCF5282_CS_CSCR_WS((int)(AMD_FLASH_SPEED/SYSTEM_CLK_PERIOD))
| MCF5282_CS_CSCR_AA
| MCF5282_CS_CSCR_PS_16);
MCF5282_CS0_CSMR = MCF5282_CS_CSMR_BAM_2M | MCF5282_CS_CSMR_V;
}
/********************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -