?? u2440mon.c
字號:
Uart_Printf("\n");
progSize+=PAGES_PER_BLOCK*SECTOR_SIZE;//0x4000;
if(progSize>=downloadFileSize)
break; // Exit while loop
blockIndex++;
}
}
}
extern int PrintToTerminal;
int SERAfterRcvFirstDataPacket()
{
U32 i;
U32 j;
U16 cs;
U32 temp;
U16 dnCS;
float time;
char buf[64];
int posx,posy;
U32 systime;
// Timer_InitEx();
// Timer_StartEx();
systime=OSTimeGet ();
OSSchedLock();
PrintToTerminal=0;
Uart_Printf("\nNow, Downloading [ADDRESS:%xh,TOTAL:%d]\n",
downloadAddress,downloadFileSize);
// sprintf(buf,"RECEIVED FILE SIZE:%8d",0);
// posx=GUI_GetDispPosX();
// posy=GUI_GetDispPosY();
// GUI_DispStringAt(buf,posx,posy);
Uart_Printf("RECEIVED FILE SIZE:%8d",0);
// GUI_Exec();
j=0x10000;
while(((U32)downPt-downloadAddress)<(downloadFileSize-4))
{
if( ((U32)downPt-downloadAddress)>=j)
{
// Uart_Printf("\b\b\b\b\b\b\b\b%8d",j);
Uart_SendByte('p');
j+=0x10000;
// GUI_Exec();
}
}
time = OSTimeGet();
OSSchedUnlock();
Uart_Printf("\b\b\b\b\b\b\b\b%8d",downloadFileSize);
// sprintf(buf,"RECEIVED FILE SIZE:%8d",j);
// GUI_DispStringAt(buf,posx,posy);
Uart_Printf("\n(%5.1fKB/S,%3.1fS)\n",(float)(downloadFileSize/((time-systime)/OS_TICKS_PER_SEC)/1000.),(time-systime)/OS_TICKS_PER_SEC);
//checkSum was calculated including dnCS. So, dnCS should be subtracted.
checkSum=checkSum - *((unsigned char *)(downloadAddress+downloadFileSize-4-2))
- *( (unsigned char *)(downloadAddress+downloadFileSize-4-1) );
dnCS=*((unsigned char *)(downloadAddress+downloadFileSize-4-2))+
(*( (unsigned char *)(downloadAddress+downloadFileSize-4-1) )<<8);
if(checkSum!=dnCS)
{
Uart_Printf("Checksum Error!!! MEM:%x DN:%x\n",checkSum,dnCS);
// GUI_Exec();
// return -1;
}
Uart_Printf("Download O.K.\n\n");
while(!(rUTRSTAT1 & 0x4)); //Wait until tx shifter is empty.
Init_Uart0 ();
PrintToTerminal=1;
// MMU_Init();
// Uart_Printf("EnableDCache:\n");
// GUI_Exec();
return 0;
}
int AfterRcvFirstDataPacket()
{
U32 i;
U32 j;
U16 cs;
U32 temp;
U16 dnCS;
float time;
char buf[64];
int posx,posy;
U32 systime;
// Timer_InitEx();
// Timer_StartEx();
systime=OSTimeGet ();
OSSchedLock();
#if USBDMA
// WM_SelectWindow(0);
// if(download_run == 1)
// WM_DeleteWindow(_usbhFrameWin);
// GUI_SetBkColor(GUI_BLUE);
// GUI_Clear();
rINTMSK&=~(BIT_DMA2);
ClearEp3OutPktReady();
// indicate the first packit is processed.
// has been delayed for DMA2 cofiguration.
if(downloadFileSize>EP3_PKT_SIZE)
{
if(downloadFileSize<=(0x80000))
{
ConfigEp3DmaMode(downloadAddress+EP3_PKT_SIZE-8,downloadFileSize-EP3_PKT_SIZE);
//will not be used.
}
else
{
ConfigEp3DmaMode(downloadAddress+EP3_PKT_SIZE-8,0x80000-EP3_PKT_SIZE);
if(downloadFileSize>(0x80000*2))//for 1st autoreload
{
rDIDST2=(downloadAddress+0x80000-8); //for 1st autoreload.
rDIDSTC2=(1<<2)|(0<<1)|(0<<0);
rDCON2=rDCON2&~(0xfffff)|(0x80000);
while(rEP3_DMA_TTC<0xfffff)
{
rEP3_DMA_TTC_L=0xff;
rEP3_DMA_TTC_M=0xff;
rEP3_DMA_TTC_H=0xf;
}
}
else
{
rDIDST2=(downloadAddress+0x80000-8); //for 1st autoreload.
rDIDSTC2=(1<<2)|(0<<1)|(0<<0);
rDCON2=rDCON2&~(0xfffff)|(downloadFileSize-0x80000);
while(rEP3_DMA_TTC<0xfffff)
{
rEP3_DMA_TTC_L=0xff;
rEP3_DMA_TTC_M=0xff;
rEP3_DMA_TTC_H=0xf;
}
}
}
totalDmaCount=0;
}
else
{
totalDmaCount=downloadFileSize;
}
#endif
Uart_Printf("\nNow, Downloading [ADDRESS:%xh,TOTAL:%d]\n",
downloadAddress,downloadFileSize);
// sprintf(buf,"RECEIVED FILE SIZE:%8d",0);
// posx=GUI_GetDispPosX();
// posy=GUI_GetDispPosY();
// GUI_DispStringAt(buf,posx,posy);
Uart_Printf("RECEIVED FILE SIZE:%8d",0);
GUI_Exec();
#if USBDMA
j=0x10000;
while(1)
{
if( (rDCDST2-(U32)downloadAddress+8)>=j)
{
// sprintf(buf,"RECEIVED FILE SIZE:%8d",j);
// GUI_DispStringAt(buf,posx,posy);
Uart_Printf("\b\b\b\b\b\b\b\b%8d",j);
j+=0x10000;
GUI_Exec();
}
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
// for(j=0;j<1000000;j++);
// time=Timer_StopEx();
time = OSTimeGet();
OSSchedUnlock();
Uart_Printf("\b\b\b\b\b\b\b\b%8d",downloadFileSize);
// sprintf(buf,"RECEIVED FILE SIZE:%8d",j);
// GUI_DispStringAt(buf,posx,posy);
Uart_Printf("\n(%5.1fKB/S,%3.1fS)\n",(float)(downloadFileSize/((time-systime)/OS_TICKS_PER_SEC)/1000.),(time-systime)/OS_TICKS_PER_SEC);
#if USBDMA
/*******************************/
/* Verify check sum */
/*******************************/
Uart_Printf("Now, Checksum calculation\n");
// GUI_Exec();
cs=0;
i=(downloadAddress);
j=(downloadAddress+downloadFileSize-10)&0xfffffffc;
// for(;i<j;i++)
// cs+=*((U8 *)i++);
#if 1
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++);
}
#endif
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);
// GUI_Exec();
return -1;
}
Uart_Printf("Download O.K.\n\n");
while(!(rUTRSTAT1 & 0x4)); //Wait until tx shifter is empty.
// MMU_Init();
// Uart_Printf("EnableDCache:\n");
// GUI_Exec();
return 0;
}
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.
//pISR_URXD0=(unsigned)Uart0_RxInt;
//rINTMSK=~(BIT_URXD0); //enable UART0 RX Default value=0xffffffff
#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;
U32 data;
int memError=0;
U32 *pt;
//
// memory clear
//
Uart_Printf("Clear Memory (%xh-%xh):WR",_RAM_STARTADDRESS,HEAPEND);
pt=(U32 *)_RAM_STARTADDRESS;
while((U32)pt < HEAPEND)
{
*pt=(U32)0x0;
pt++;
}
if(memError==0)Uart_Printf("\b\bO.K.\n");
}
void Clk0_Enable(int clock_sel)
{ // 0:MPLLin, 1:UPLL, 2:FCLK, 3:HCLK, 4:PCLK, 5:DCLK0
rMISCCR = rMISCCR&~(7<<4) | (clock_sel<<4);
rGPHCON = rGPHCON&~(3<<18) | (2<<18);
}
void Clk1_Enable(int clock_sel)
{ // 0:MPLLout, 1:UPLL, 2:RTC, 3:HCLK, 4:PCLK, 5:DCLK1
rMISCCR = rMISCCR&~(7<<8) | (clock_sel<<8);
rGPHCON = rGPHCON&~(3<<20) | (2<<20);
}
void Clk0_Disable(void)
{
rGPHCON = rGPHCON&~(3<<18); // GPH9 Input
}
void Clk1_Disable(void)
{
rGPHCON = rGPHCON&~(3<<20); // GPH10 Input
}
BOOL UbootReadData(DWORD cbData, LPBYTE pbData)
{
unsigned int temp;
int i;
int old_isUsbdSetConfiguration = isUsbdSetConfiguration;
Loop:
if ( downPtIndex > readPtIndex + cbData )
{
memcpy(pbData, (void*)readPtIndex, cbData);
readPtIndex += cbData;
}
else if (downPtIndex == DMABUFFER)
{
downloadFileSize=0;
// Uart_Printf("DisableDCache:\n");
MMU_DeInit();
#if 0
ChangeMPllValue(68,1,1);
Calc_Clock(1);
UPDATE_REFRESH(Hclk);
#endif
// Uart_Init(Pclk, 115200);
if(isUsbdSetConfiguration == 0)
Uart_Printf("USB host is not connected now,please reconnect the USB Cable.\n");
while(downloadFileSize == 0){
if((isUsbdSetConfiguration == 0) && (old_isUsbdSetConfiguration != 0))
{
Uart_Printf("USB host is not connected now,please reconnect the USB Cable.\n");
old_isUsbdSetConfiguration = 0;
}
if((isUsbdSetConfiguration != 0) && (old_isUsbdSetConfiguration == 0))
{
Uart_Printf("USB host is connected. Waiting a download.\n");
old_isUsbdSetConfiguration = isUsbdSetConfiguration;
}
// GUI_Exec();
};
if(AfterRcvFirstDataPacket()== 0)
{
downPtIndex += downloadFileSize;
#if 0
ChangeMPllValue(127,2,1);
Calc_Clock(1);
UPDATE_REFRESH(Hclk);
#endif
// MMU_Init();
// Delay(10);
}
else
return FALSE;
// while (downPtIndex == DMABUFFER) {}; // first 64 bytes, get interrupt mode.
{
downPt = (unsigned char*)DMABUFFER;
Uart_Printf("Dump the first packet:downPt=%x\n",downPt);
for(i=0;i<64;i+=8)
{
Uart_Printf("%02X %02X %02X %02X %02X %02X %02X %02X\n",
*(downPt+i),*(downPt+i+1),*(downPt+i+2),*(downPt+i+3),*(downPt+i+4),*(downPt+i+5),*(downPt+i+6),*(downPt+i+7));
}
}
if ( readPtIndex == DMABUFFER )
{
memcpy(pbData, (void*)readPtIndex, cbData);
readPtIndex += cbData;
}
#if 0
rSRCPND = BIT_USBD;
if (rINTPND & BIT_USBD) rINTPND = BIT_USBD;
rINTMSK |= BIT_USBD; // USB Interrupt disable.
// read data with DMA operation.
rSRCPND = BIT_DMA2;
if (rINTPND & BIT_DMA2) rINTPND = BIT_DMA2;
rINTMSK &= ~BIT_DMA2; // DMA Interrupt enable.
rINDEX_REG=3;
ClearEp3OutPktReady();
ConfigEp3DmaMode(downPtIndex,0x80000);
rDIDST2=(downPtIndex+0x80000); //for 1st autoreload.
rDIDSTC2=(1<<2)|(0<<1)|(0<<0);
rDCON2=rDCON2&~(0xfffff)|(0x80000);
while(rEP3_DMA_TTC<0xfffff)
{
rEP3_DMA_TTC_L = 0xff;
rEP3_DMA_TTC_M = 0xff;
rEP3_DMA_TTC_H = 0x0f;
}
#endif
}
else
{
temp = rEP3_DMA_TTC;
for (i = 0; i < 60000; i++ )
{
}
if ( temp == rEP3_DMA_TTC )
{
Uart_Printf("INFO : UbootReadData : downPtIndex(0x%x) - readPtIndex(0x%x) = 0x%x\r\n", downPtIndex, readPtIndex, downPtIndex - readPtIndex);
downPtIndex += ((unsigned int)0xfffff - (unsigned int)rEP3_DMA_TTC);
Uart_Printf("INFO : UbootReadData : rEP3_DMA_TTC = 0x%x\r\n", rEP3_DMA_TTC);
}
goto Loop;
}
return TRUE;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -