📄 sysinit.c
字号:
{
imm->dramc.DCR = 0x8022; // DCR
// An auto-refresh period for 4096 rows
// to receive 64 mS of refresh every
// 15.625 us for each row
// (312 bus clocks at 19.992 MHz)
// RC = (312/16)-1 = 18.56 = 0x12
imm->dramc.DACR0 = 0x40002224; // DACR0
//imm->dramc.DMR0 = 0x00fc0075; // DMR0 for 16M
imm->dramc.DMR0 = 0x007c0075; // DMR0 for 8M
imm->dramc.DACR0 = 0x4000222c; // DACR0
*((volatile uint32 *)(0x40000000)) = 0xA5A59696;
imm->dramc.DACR0 = 0x4000a224; // DACR0
delay100ms();
imm->dramc.DACR0 = 0x4000a264; // DACR0
*((volatile uint32 *)(0x40000800)) = 0xA5A59696;
}
/****************************************************************/
uint16 mcf5249_sdram_test(void)
{
uint32 i,b;
uint16 b0,b1;
DRAMBuffer = (uint16 *)(SDRAM_ADDRESS);
for(i=0; i<0x400000; i++) // 0x800000(8Mx16Bits)
{
DRAMBuffer[i] = 0;
}
for(i=0; i<0x200000; i++)
{
DRAMBuffer[2*i] = i>>16;
DRAMBuffer[2*i+1] = i;
}
for(i=0; i<0x200000; i++)
{
b1 = DRAMBuffer[2*i];
b0 = DRAMBuffer[2*i+1];
b = b1<<16 | b0;
if(b!=i)
{
return 1;
}
}
return 0;
}
/****************************************************************/
uint16 mcf5249_flash_test(void)
{
uint32 i;
DRAMBuffer = (uint16 *)(FLASH_ADDRESS);
for(i=0; i<0x100000; i++) // 0x100000(1Mx16Bits)
{
if(DRAMBuffer[i]!=0x0000) return 1;
}
return 0;
}
/****************************************************************/
void mcf5249_gpio_init(void)
{
imm2->gpio.GOR &= ~MCF5249_GPIO25; //DM9000 reset
imm2->gpio.GFR |= MCF5249_GPIO25;
imm2->gpio.GER |= MCF5249_GPIO25;
imm2->gpio.G1OR &= ~MCF5249_GPIO38; //SMC_ce
imm2->gpio.G1FR |= MCF5249_GPIO38;
imm2->gpio.G1ER |= MCF5249_GPIO38;
imm2->gpio.GOR |= MCF5249_GPIO19; //IDE_reset
imm2->gpio.GFR |= MCF5249_GPIO19;
imm2->gpio.GER |= MCF5249_GPIO19;
imm2->gpio.GOR |= MCF5249_GPIO18; //CFC_reset
imm2->gpio.GFR |= MCF5249_GPIO18;
imm2->gpio.GER |= MCF5249_GPIO18;
imm2->gpio.G1OR |= MCF5249_GPIO33; //D12_reset
imm2->gpio.G1FR |= MCF5249_GPIO33;
imm2->gpio.G1ER |= MCF5249_GPIO33;
imm2->gpio.GOR &= ~MCF5249_GPIO9; //D12_suspd
imm2->gpio.GFR |= MCF5249_GPIO9;
imm2->gpio.GER |= MCF5249_GPIO9;
imm2->gpio.GOR |= MCF5249_GPIO5; //INT5-
imm2->gpio.GFR |= MCF5249_GPIO5;
imm2->gpio.GER &= ~MCF5249_GPIO5;
imm2->gpio.GIEN = 0; //Disable all PIN interrupt
imm2->gpio.GIS = 0x0000FFFF;
imm2->gpio.G1OR |= MCF5249_GPIO56; //LCD_Reset
imm2->gpio.G1FR |= MCF5249_GPIO56;
imm2->gpio.G1ER |= MCF5249_GPIO56;
imm2->gpio.G1OR &= ~MCF5249_GPIO36; //LCD_RS
imm2->gpio.G1FR |= MCF5249_GPIO36;
imm2->gpio.G1ER |= MCF5249_GPIO36;
imm2->gpio.GFR |= MCF5249_GPIO3; //SCL2
imm2->gpio.GOR |= MCF5249_GPIO3;
imm2->gpio.GER |= MCF5249_GPIO3;
imm2->gpio.G1FR |= MCF5249_GPIO55; //SDA2
imm2->gpio.G1OR |= MCF5249_GPIO55;
imm2->gpio.G1ER |= MCF5249_GPIO55;
imm2->gpio.GOR &= ~MCF5249_GPIO15; //LED1
imm2->gpio.GFR |= MCF5249_GPIO15;
imm2->gpio.GER |= MCF5249_GPIO15;
imm2->gpio.GOR &= ~MCF5249_GPIO23; //LED2
imm2->gpio.GFR |= MCF5249_GPIO23;
imm2->gpio.GER |= MCF5249_GPIO23;
imm2->gpio.G1OR &= ~MCF5249_GPIO50; //LED3
imm2->gpio.G1FR |= MCF5249_GPIO50;
imm2->gpio.G1ER |= MCF5249_GPIO50;
imm2->gpio.G1OR &= ~MCF5249_GPIO46; //LED4
imm2->gpio.G1FR |= MCF5249_GPIO46;
imm2->gpio.G1ER |= MCF5249_GPIO46;
imm2->gpio.G1OR &= ~MCF5249_GPIO55; //LED5
imm2->gpio.G1FR |= MCF5249_GPIO55;
imm2->gpio.G1ER |= MCF5249_GPIO55;
imm2->gpio.GOR &= ~MCF5249_GPIO3; //LED6
imm2->gpio.GFR |= MCF5249_GPIO3;
imm2->gpio.GER |= MCF5249_GPIO3;
}
/****************************************************************/
void mcf5249_ide_init(void)
{
imm2->ide.IDECFG1 = ( 0
| 0x00005400
| MCF5249_IDE_CFG1_BUFEN1CS2 );
imm2->ide.IDECFG2 = 0x000C0400;
}
/****************************************************************/
void mcf5249_iis_init(void)
{
imm2->iis.IIS2CONFIG = 0x0800; /* Reset IIS2 to 1 sample remaining */
imm2->iis.IIS2CONFIG = 0xc310; /* Route PDOR3 to IIS2,
IIS2 clock = Audio clock/2 = 2.8224MHz,
16 bits per sample, Philips mode,
32 clocks per word */
imm2->iis.AUDIOGLOB = 0x0000;
imm2->iis.AUDIOINTERRUPTEN = 0; //MCF5249_IIS_INT_IIS2TXEMPTY;
imm2->iis.AUDIOINTERRUPTSTA = 0;
asm(nop);
imm2->iis.PDOR3 = 0x00000000;
}
/****************************************************************/
void mcf5249_qspi_init(void)
{
imm->qspi.QMR = 0xe308; //MSTR=1, DOHIE=1, BITS=1000(8bits)
//BAUD=8, 39.984MHz/2/8=2.499MHz
}
/********************************************************************/
/********************************************************************/
/********************************************************************/
/********************************************************************/
/********************************************************************/
void SET_SMCMP3player(void)
{
imm2->gpio.GOR &= ~MCF5249_GPIO9; //USB_Connet output '0'
imm2->gpio.GER |= MCF5249_GPIO9;
imm2->gpio.G1OR |= MCF5249_GPIO35; //USB_CS output '1'
imm2->gpio.GOR &= ~MCF5249_GPIO5; //IDE_CS output '0'
imm2->gpio.G1OR &= ~MCF5249_GPIO33; //Reset IDE
delay10ms();
imm2->gpio.G1OR |= MCF5249_GPIO33;
delay10ms();
}
/********************************************************************/
uint16 SET_USBmass(void)
{
imm2->gpio.GOR |= MCF5249_GPIO5; //IDE_CS output '1'
imm2->gpio.G1OR &= ~MCF5249_GPIO35; //USB_CS output '0'
imm2->gpio.GER &= ~MCF5249_GPIO9; //Check USB_Connet
delay10ms();
if((imm2->gpio.GRR)&MCF5249_GPIO9)
{
return 1;
}
else
{
imm2->gpio.GOR &= ~MCF5249_GPIO9; //USB_Connet output '0'
imm2->gpio.GER |= MCF5249_GPIO9;
imm2->gpio.G1OR |= MCF5249_GPIO35; //USB_CS output '1'
imm2->gpio.GOR &= ~MCF5249_GPIO5; //IDE_CS output '0'
return 0;
}
}
/********************************************************************/
void plldelay(void)
{
uint32 i;
for(i=0; i<0x00001000; i++)
{
asm(nop);
}
}
/********************************************************************/
void delayIIC(void)
{
uint32 i;
for(i=0; i<0x00000020; i++)
{
asm(nop);
}
}
/********************************************************************/
void delay1ms(void)
{
uint32 i;
for(i=0; i<0x00000228; i++)
{
asm(nop);
}
}
/********************************************************************/
void delay10ms(void)
{
uint32 i;
for(i=0; i<0x00005700; i++)
{
asm(nop);
}
}
/********************************************************************/
void delay100ms(void)
{
uint32 i;
for(i=0; i<0x00038000; i++)
{
asm(nop);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -