📄 u2440mon.c
字号:
#if USBDMA
j=0x10000;
while(1)
{
if( (rDCDST2-(U32)downloadAddress+8)>=j)
{
Uart_Printf("\b\b\b\b\b\b\b\b%8d",j);
j+=0x10000;
}
if(totalDmaCount>=downloadFileSize)break;
}
#else
j=0x10000;
while(((U32)downPt-downloadAddress)<(downloadFileSize-8))
{
if( ((U32)downPt-downloadAddress)>=j)
{
Uart_Printf("\b\b\b\b\b\b\b\b%8d",j);
j+=0x10000;
}
}
#endif
time=Timer_StopEx();
Uart_Printf("\b\b\b\b\b\b\b\b%8d",downloadFileSize);
Uart_Printf("\n(%5.1fKB/S,%3.1fS)\n",(float)(downloadFileSize/time/1000.),time);
#if USBDMA
/*******************************/
/* Verify check sum */
/*******************************/
Uart_Printf("Now, Checksum calculation\n");
cs=0;
i=(downloadAddress);
j=(downloadAddress+downloadFileSize-10)&0xfffffffc;
while(i<j)
{
temp=*((U32 *)i);
i+=4;
cs+=(U16)(temp&0xff);
cs+=(U16)((temp&0xff00)>>8);
cs+=(U16)((temp&0xff0000)>>16);
cs+=(U16)((temp&0xff000000)>>24);
}
i=(downloadAddress+downloadFileSize-10)&0xfffffffc;
j=(downloadAddress+downloadFileSize-10);
while(i<j)
{
cs+=*((U8 *)i++);
}
checkSum=cs;
#else
//checkSum was calculated including dnCS. So, dnCS should be subtracted.
checkSum=checkSum - *((unsigned char *)(downloadAddress+downloadFileSize-8-2))
- *( (unsigned char *)(downloadAddress+downloadFileSize-8-1) );
#endif
dnCS=*((unsigned char *)(downloadAddress+downloadFileSize-8-2))+
(*( (unsigned char *)(downloadAddress+downloadFileSize-8-1) )<<8);
if(checkSum!=dnCS)
{
Uart_Printf("Checksum Error!!! MEM:%x DN:%x\n",checkSum,dnCS);
return;
}
Uart_Printf("Download O.K.\n\n");
Uart_TxEmpty(consoleNum);
if(download_run==1)
{
if(download_update_wince == 1)
{
rINTMSK = BIT_ALLMSK;
NF8_Init();
NandFlashProgram(3, downloadFileSize);
}
else if(download_update_ugboot == 1)
{
rINTMSK = BIT_ALLMSK;
NF8_Init();
NandFlashProgram(0, downloadFileSize);
}
else if((download_update_ugboot == 0) &&(download_update_wince == 0))
{
rINTMSK=BIT_ALLMSK;
run=(void (*)(void))downloadAddress;
run();
}
}
}
void Isr_Init(void)
{
pISR_UNDEF=(unsigned)HaltUndef;
pISR_SWI =(unsigned)HaltSwi;
pISR_PABORT=(unsigned)HaltPabort;
pISR_DABORT=(unsigned)HaltDabort;
rINTMOD=0x0; // All=IRQ mode
rINTMSK=BIT_ALLMSK; // All interrupt is masked.
#if 1
pISR_USBD =(unsigned)IsrUsbd;
pISR_DMA2 =(unsigned)IsrDma2;
#else
pISR_IRQ =(unsigned)IsrUsbd;
//Why doesn't it receive the big file if use this. (???)
//It always stops when 327680 bytes are received.
#endif
ClearPending(BIT_DMA2);
ClearPending(BIT_USBD);
//rINTMSK&=~(BIT_USBD);
//pISR_FIQ,pISR_IRQ must be initialized
}
void HaltUndef(void)
{
Uart_Printf("Undefined instruction exception!!!\n");
while(1);
}
void HaltSwi(void)
{
Uart_Printf("SWI exception!!!\n");
while(1);
}
void HaltPabort(void)
{
Uart_Printf("Pabort exception!!!\n");
while(1);
}
void HaltDabort(void)
{
Uart_Printf("Dabort exception!!!\n");
while(1);
}
void ClearMemory(void)
{
int i;
int memError=0;
U32 *pt;
//
// memory clear
//
Uart_Printf("Clear Memory (%xh-%xh):WR",_WINCE_RAMIMAGE_STARTADDRESS,HEAPEND);
pt=(U32 *)(_WINCE_RAMIMAGE_STARTADDRESS + 0x02200000 );
memset(pt, 0, 0x5bf0000);//0x7df0000.0x2200000
/* while((U32)pt < HEAPEND)
{
*pt=(U32)0x0;
pt++;
}
*/
Uart_Printf("\b\bO.K.\n");
}
void ReserveBlock()
{
DWORD i;
SectorInfo si;
// to keep bootpart off of our reserved blocks we must mark it as bad, reserved & read-only
si.bOEMReserved = OEM_BLOCK_RESERVED | OEM_BLOCK_READONLY;
si.bBadBlock = BADBLOCKMARK;
si.dwReserved1 = 0;
si.wReserved2 = 0;
Uart_Printf("Reserving Blocks [0x%x - 0x%x] ...\r\n", 0, 512-1);
for (i = 0; i < 512*64; i++) {
FMD_WriteSector(i, NULL, &si, 1);
}
Uart_Printf("...reserve complete.\r\n");
}
void LoadWince(void)
{
DWORD dwSector; // Start Sector & Length
DWORD dwRAM, i;
int dwLength = 0x02200000;//0x02e00000
U16 flashid;
dwRAM =(void *) 0x30200000;
JumpAddr = 0x30200000;
if (!FMD_Init ())//lpActiveReg, pRegIn, pRegOut))
return;
flashid = NF8_CheckId();
Uart_Printf("NandFlash ID = %x\n",flashid);
dwSector = 0x3<<6;
while(dwLength > 0) {
// if (!FMD_ReadSector(dwSector, (LPBYTE) dwRAM,NULL, 1) )
if (!NF8_ReadPage2(dwSector/64, dwSector%64, (LPBYTE) dwRAM) )
{
Uart_Printf("Failed reading nk.nb0:");
Uart_Printf("dwSector = %x \n", dwSector);
dwSector++;
return;
}
dwSector++;
// dwSectorsNeeded--;
dwRAM += SECTOR_SIZE;
dwLength-=SECTOR_SIZE;
}
Launch(JumpAddr);
}
void Format_Nand(void)
{
if ( !BP_Init((LPBYTE)0x30021000, 0x30000) )
{
Uart_Printf("WARNING: OEMPlatformInit failed to initialize Boot Media.\r\n\r\n");
return;
}
else
{ if ( !BP_LowLevelFormat( NUM_OF_BLOCK_TO_RESERVE, NUM_BLOCKS - NUM_OF_BLOCK_TO_RESERVE, 0) )
{
Uart_Printf("ERROR: BootMonitor: Low-level boot media format failed.\r\n");
}
}
}
BOOL UGBoot_GetRealTime(LPSYSTEMTIME lpst)
{
// do
// {
lpst->wYear = FROM_BCD(rBCDYEAR) + 2000 ;
lpst->wMonth = FROM_BCD(rBCDMON & 0x1f);
lpst->wDay = FROM_BCD(rBCDDAY & 0x3f);
lpst->wDayOfWeek = (rBCDDATE - 1);
lpst->wHour = FROM_BCD(rBCDHOUR & 0x3f);
lpst->wMinute = FROM_BCD(rBCDMIN & 0x7f);
lpst->wSecond = FROM_BCD(rBCDSEC & 0x7f);
lpst->wMilliseconds = 0;
// }
// while(!(lpst->wSecond));
return(TRUE);
}
BOOL UGBoot_SetRealTime(LPSYSTEMTIME lpst)
{
rRTCCON = (1 << 3) | (1 << 0); /* RTC Control Enable & Reset */
rBCDSEC = (unsigned char)TO_BCD(lpst->wSecond );
rBCDMIN = (unsigned char)TO_BCD(lpst->wMinute );
rBCDHOUR = (unsigned char)TO_BCD(lpst->wHour );
rBCDDATE = (unsigned char)(lpst->wDayOfWeek + 1);
rBCDDAY = (unsigned char)TO_BCD(lpst->wDay );
rBCDMON = (unsigned char)TO_BCD(lpst->wMonth );
rBCDYEAR = (unsigned char)TO_BCD(((DWORD)lpst->wYear % 100));
rRTCCON = (0 << 0); /* RTC Control Disable */
return TRUE;
}
DWORD
UGBoot_GetSecs( void )
{
SYSTEMTIME st;
DWORD ti;
UGBoot_GetRealTime( &st );
ti = ((60UL * (60UL * (24UL * (31UL * st.wMonth + st.wDay) + st.wHour) + st.wMinute)) + st.wSecond);
return ti;
}
int UGBoot_ReadDebugByte()
{
unsigned char ch;
// Any receive data for us?
//
if(consoleNum == 0)
{
if (!(rUTRSTAT0 & 0x1))
{
ch = -1; // No data.
}
else
{
ch = rURXH0; // Read character.
}
}
else if(consoleNum == 1)
{
if (!(rUTRSTAT1 & 0x1))
{
ch = -1; // No data.
}
else
{
ch = rURXH1; // Read character.
}
}
else
{
if (!(rUTRSTAT2 & 0x1))
{
ch = -1; // No data.
}
else
{
ch = rURXH2; // Read character.
}
}
return (ch);
}
void MemoryTest(void)
{
int i;
U32 data;
int memError=0;
U32 *pt;
//
// memory test
//
Uart_Printf("Memory Test(%xh-%xh):WR",_WINCE_RAMIMAGE_STARTADDRESS,(_ISR_STARTADDRESS&0xffff0000));
pt=(U32 *)_WINCE_RAMIMAGE_STARTADDRESS;
while((U32)pt<(_ISR_STARTADDRESS&0xffff0000))
{
*pt=(U32)pt;
pt++;
}
Uart_Printf("\b\bRD");
pt=(U32 *)_WINCE_RAMIMAGE_STARTADDRESS;
while((U32)pt<(_ISR_STARTADDRESS&0xffff0000))
{
data=*pt;
if(data!=(U32)pt)
{
memError=1;
Uart_Printf("\b\bFAIL:0x%x=0x%x\n",i,data);
break;
}
pt++;
}
if(memError==0)Uart_Printf("\b\bO.K.\n");
}
// xm.hu
// for debug the audio
// init all the gpio
void Gpio_Init(void)
{
unsigned int tempGpio = 0;
//CAUTION:Follow the configuration order for setting the ports.
// 1) setting value(GPnDAT)
// 2) setting control register (GPnCON)
// 3) configure pull-up resistor(GPnUP)
//32bit data bus configuration
//*** PORT A GROUP
//Ports : GPA22 GPA21 GPA20 GPA19 GPA18 GPA17 GPA16 GPA15 GPA14 GPA13 GPA12
//Signal : nFCE nRSTOUT nFRE nFWE ALE CLE nGCS5 nGCS4 nGCS3 nGCS2 nGCS1
//Binary : 1 1 1 , 1 1 1 1 , 1 1 1 1
//Ports : GPA11 GPA10 GPA9 GPA8 GPA7 GPA6 GPA5 GPA4 GPA3 GPA2 GPA1 GPA0
//Signal : ADDR26 ADDR25 ADDR24 ADDR23 ADDR22 ADDR21 ADDR20 ADDR19 ADDR18 ADDR17 ADDR16 ADDR0
//Binary : 1 1 1 1 , 1 1 1 1 , 1 1 1 1
// rGPACON = 0x7fffff;
rGPACON = SamsungGPA;
//**** PORT B GROUP
//Ports : GPB10 GPB9 GPB8 GPB7 GPB6 GPB5 GPB4 GPB3 GPB2 GPB1 GPB0
//Signal : nXDREQ0 nXDACK0 nXDREQ1 nXDACK1 nSS_KBD nDIS_OFF L3CLOCK L3DATA L3MODE nIrDATXDEN Keyboard
//Setting: OUTPUT OUTPUT OUTPUT OUTPUT OUTPUT OUTPUT OUTPUT OUTPUT OUTPUT OUTPUT OUTPUT
//Binary : 01 , 01 01 , 01 01 , 01 01 , 01 01 , 01 01
// rGPBCON = 0x155555;
rGPBCON = SamsungGPB;
rGPBUP = 0x7ff; // The pull up function is disabled GPB[10:0]
//*** PORT C GROUP
//Ports : GPC15 GPC14 GPC13 GPC12 GPC11 GPC10 GPC9 GPC8 GPC7 GPC6 GPC5 GPC4 GPC3 GPC2 GPC1 GPC0
//Signal : VD7 VD6 VD5 VD4 VD3 VD2 VD1 VD0 LCDVF2 LCDVF1 LCDVF0 VM VFRAME VLINE VCLK LEND
//Binary : 10 10 , 10 10 , 10 10 , 10 10 , 10 10 , 10 10 , 10 10 , 10 10
//rGPCCON = 0xaaaaaaaa;
rGPCCON = SamsungGPC;
rGPCUP = 0xffff; // The pull up function is disabled GPC[15:0]
//*** PORT D GROUP
//Ports : GPD15 GPD14 GPD13 GPD12 GPD11 GPD10 GPD9 GPD8 GPD7 GPD6 GPD5 GPD4 GPD3 GPD2 GPD1 GPD0
//Signal : VD23 VD22 VD21 VD20 VD19 VD18 VD17 VD16 VD15 VD14 VD13 VD12 VD11 VD10 VD9 VD8
//Binary : 10 10 , 10 10 , 10 10 , 10 10 , 10 10 , 10 10 , 10 10 ,10 10
//rGPDCON = 0xaaaaaaaa;
rGPDCON = SamsungGPD;
rGPDUP = 0xffff; // The pull up function is disabled GPD[15:0]
//*** PORT E GROUP
//Ports : GPE15 GPE14 GPE13 GPE12 GPE11 GPE10 GPE9 GPE8 GPE7 GPE6 GPE5 GPE4
//Signal : IICSDA IICSCL SPICLK SPIMOSI SPIMISO SDDATA3 SDDATA2 SDDATA1 SDDATA0 SDCMD SDCLK I2SSDO
//Binary : 10 10 , 10 10 , 10 10 , 10 10 , 10 10 , 10 10 ,
//-------------------------------------------------------------------------------------------------------
//Ports : GPE3 GPE2 GPE1 GPE0
//Signal : I2SSDI CDCLK I2SSCLK I2SLRCK
//Binary : 10 10 , 10 10
//rGPECON = 0xaaaaaaaa;
rGPECON = SamsungGPE;
rGPEUP = 0xffff; // The pull up function is disabled GPE[15:0]
//*** PORT F GROUP
//Ports : GPF7 GPF6 GPF5 GPF4 GPF3 GPF2 GPF1 GPF0
//Signal : nLED_8 nLED_4 nLED_2 nLED_1 nIRQ_PCMCIA EINT2 KBDINT EINT0
//Setting: Output Output Output Output EINT3 EINT2 EINT1 EINT0
//Binary : 01 01 , 01 01 , 10 10 , 10 10
//rGPFCON = 0x55aa;
rGPFCON = SamsungGPF;
rGPFUP = 0xff; // The pull up function is disabled GPF[7:0]
//*** PORT G GROUP
//Ports : GPG15 GPG14 GPG13 GPG12 GPG11 GPG10 GPG9 GPG8 GPG7 GPG6
//Signal : nYPON YMON nXPON XMON EINT19 DMAMODE1 DMAMODE0 DMASTART KBDSPICLK KBDSPIMOSI
//Setting: nYPON YMON nXPON XMON EINT19 Output Output Output SPICLK1 SPIMOSI1
//Binary : 11 11 , 11 11 , 10 01 , 01 01 , 11 11
//-----------------------------------------------------------------------------------------
//Ports : GPG5 GPG4 GPG3 GPG2 GPG1 GPG0
//Signal : KBDSPIMISO LCD_PWREN EINT11 nSS_SPI IRQ_LAN IRQ_PCMCIA
//Setting: SPIMISO1 LCD_PWRDN EINT11 nSS0 EINT9 EINT8
//Binary : 11 11 , 10 11 , 10 10
//rGPGCON = 0xff95ffba;
rGPGCON = SamsungGPG;
rGPGUP = 0xffff; // The pull up function is disabled GPG[15:0]
//*** PORT H GROUP
//Ports : GPH10 GPH9 GPH8 GPH7 GPH6 GPH5 GPH4 GPH3 GPH2 GPH1 GPH0
//Signal : CLKOUT1 CLKOUT0 UCLK nCTS1 nRTS1 RXD1 TXD1 RXD0 TXD0 nRTS0 nCTS0
//Binary : 10 , 10 10 , 11 11 , 10 10 , 10 10 , 10 10
//rGPHCON = 0x2afaaa;
rGPHCON = SamsungGPH;
rGPHUP = 0x7ff; // The pull up function is disabled GPH[10:0]
// Added for S3C2440, DonGo
//PORT J GROUP
//Ports : GPJ12 GPJ11 GPJ10 GPJ9 GPJ8 GPJ7 GPJ6 GPJ5 GPJ4 GPJ3 GPJ2 GPJ1 GPJ0
//Signal : CAMRESET CAMCLKOUT CAMHREF CAMVS CAMPCLKIN CAMD7 CAMD6 CAMD5 CAMD4 CAMD3 CAMD2 CAMD1 CAMD0
//Setting: Out Out CAMHREF CAMVS CAMPCLKIN CAMD7 CAMD6 CAMD5 CAMD4 CAMD3 CAMD2 CAMD1 CAMD0
//Binary : 01 01 10 10 10 10 10 10 10 10 10 10 10
//PU_OFF : 1 0 1 1 1 1 1 1 1 1 1 1 1
//---------------------------------------------------------------------------------------
rGPJDAT = (1<<12)|(0<<11);
rGPJCON = 0x016aaaa;
rGPJUP = ~((0<<12)|(1<<11));
rGPJDAT = (0<<12)|(0<<11);
rGPJCON = 0x016aaaa;
rGPJUP = 0x1fff;//~((1<<12)|(1<<11));
//rGPJCON = 0x02aaaaaa;
//rGPJUP = 0x1fff; // The pull up function is disabled GPH[10:0]
//External interrupt will be falling edge triggered.
rEXTINT0 = 0x42222224; // EINT[7:0]
rEXTINT1 = 0x22222222; // EINT[15:8]
rEXTINT2 = 0x22222222; // EINT[23:16]
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -