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

📄 main.c

📁 PXA270的EBOOT源代码!可以启动wince内核
💻 C
📖 第 1 页 / 共 5 页
字号:
	{LEX_FILL,				Fill},
	{(ELex) ';',			Comment},
	{LEX_EOF, NULL}
};

static UINT8 sg_u8Lines[MAX_SCROLLBACK][MAX_LINE_LENGTH+1];

static void Debugger(void)
{
	UINT8 u8Command[MAX_LINE_LENGTH];
	EStatus eStatus;
	struct SCommandEntry *psCmd;
	UINT8 u8ScrollbackPointer = 0;
	UINT32 u32Loop;

	EdbgOutputDebugString("\r\neBoot Debugger. Type '?' for a list of commands\r\nDefault data size is DWORD\r\n");
	memset(u8Command, 0, sizeof(u8Command));
	memset(sg_u8Lines, 0, sizeof(sg_u8Lines));

	while (1)
	{
		EdbgOutputDebugString("[debug]: ");

		while (1)
		{
			eStatus = GetLine(u8Command, sizeof(u8Command) - 1);

			if (LINE_EXIT == eStatus)
			{
				return;
			}

			if (LINE_UP == eStatus)
			{
				memcpy(u8Command, sg_u8Lines[u8ScrollbackPointer], sizeof(u8Command));				
				++u8ScrollbackPointer;

				while ('\0' == sg_u8Lines[u8ScrollbackPointer][0])
				{
					++u8ScrollbackPointer;
					if (u8ScrollbackPointer >= MAX_SCROLLBACK)
					{
						u8ScrollbackPointer = 0;
					}
				}
			}

			if (LINE_DOWN == eStatus)
			{
				memcpy(u8Command, sg_u8Lines[u8ScrollbackPointer], sizeof(u8Command));				

				if (0 == u8ScrollbackPointer)
				{
					u8ScrollbackPointer = MAX_SCROLLBACK - 1;
				}
				else
				{
					u8ScrollbackPointer--;
				}

				while ('\0' == sg_u8Lines[u8ScrollbackPointer][0])
				{
					if (0 == u8ScrollbackPointer)
					{
						u8ScrollbackPointer = MAX_SCROLLBACK;
					}

					u8ScrollbackPointer--;
				}
			}

			if (LINE_OK == eStatus)
			{
				break;
			}
		}

		if (LINE_OK == eStatus)
		{
			ELex eToken = 0;

			u8ScrollbackPointer = 0;
			LexBegin(u8Command);

			// If we're non-NULL, put it in the scrollback buffer

			if (u8Command[0])
			{
				u32Loop = MAX_SCROLLBACK - 2;

				do
				{
					memcpy(sg_u8Lines[u32Loop + 1],
						   sg_u8Lines[u32Loop],
						   sizeof(sg_u8Lines[u32Loop]));
				} while (u32Loop--);
				
				memcpy(sg_u8Lines[0],
					   u8Command,
					   sizeof(sg_u8Lines[0]));
			}

			eToken = LexGetNextToken();

			if (eToken != LEX_EOF)
			{
				psCmd = sg_sCommands;

				while (psCmd->eToken != LEX_EOF)
				{
					if (psCmd->eToken == eToken)
					{
						eToken = psCmd->CommandFunction();
						if (LEX_EXIT == eToken)
						{
							return;
						}
						break;
					}
					++psCmd;
				}

				if (LEX_EOF == psCmd->eToken)
				{
					EdbgOutputDebugString("Error - unknown command '%s'. Type ? for a list of valid commands\r\n", sg_u8YYLEX);
				}
			}

			u8Command[0] = '\0';
		}
	}
}
#ifndef DEBUG
void displayStartUpImage(void)
{
	XLLP_LCD_T XllpLCD;
	unsigned long LCDType;
	volatile LCD_FRAME_DESCRIPTOR	*frameDescriptorCh0fd1=NULL;
	volatile LCD_FRAME_DESCRIPTOR	*frameDescriptorCh0fd2=NULL;
	volatile LCD_FRAME_DESCRIPTOR	*frameDescriptorCh1=NULL;
	volatile LCD_FRAME_DESCRIPTOR	*frameDescriptorPalette=NULL;
	volatile LCD_FRAME_DESCRIPTOR	*frameDescriptorTemp=NULL;
	volatile LCD_PALETTE		*v_pPaletteBuffer=NULL;

	frameDescriptorCh0fd1 = (volatile LCD_FRAME_DESCRIPTOR *)(DMA_CHANNEL_0_FRAME_DESCRIPTOR_BASE_VIRTUAL);
	frameDescriptorCh0fd2 = (volatile LCD_FRAME_DESCRIPTOR *)(DMA_CHANNEL_0_ALT_FRAME_DESCRIPTOR_BASE_VIRTUAL);
	frameDescriptorCh1 = (volatile LCD_FRAME_DESCRIPTOR *)(DMA_CHANNEL_1_FRAME_DESCRIPTOR_BASE_VIRTUAL);
	frameDescriptorPalette = (volatile LCD_FRAME_DESCRIPTOR *)(PALETTE_FRAME_DESCRIPTOR_BASE_VIRTUAL);
	v_pPaletteBuffer=(volatile LCD_PALETTE *)(PALETTE_BUFFER_BASE_VIRTUAL);

        XllpLCD.GPIO = (XLLP_VUINT32_T *) ((UINT32)OALPAtoUA(BULVERDE_BASE_REG_PA_PERIPH) + GPIO_OFFSET);
	XllpLCD.CLKMan = (XLLP_VUINT32_T *) ((UINT32)OALPAtoUA(BULVERDE_BASE_REG_PA_PERIPH) + CLKMGR_OFFSET); 
	XllpLCD.LCDC = (XLLP_VUINT32_T *) ((UINT32)OALPAtoUA(BULVERDE_BASE_REG_PA_LCD));

	EdbgOutputDebugString("GPIO = %x\r\n", (UINT32)OALPAtoUA(BULVERDE_BASE_REG_PA_PERIPH) + GPIO_OFFSET);
	EdbgOutputDebugString("CLKMan = %x\r\n", ((UINT32)OALPAtoUA(BULVERDE_BASE_REG_PA_PERIPH) + CLKMGR_OFFSET));
	EdbgOutputDebugString("LCDC = %x\r\n", (UINT32)OALPAtoUA(BULVERDE_BASE_REG_PA_LCD));

//lxp LCD 050926
//	LCDType=SHARP57;
//	LCDType=LQ104V1DG51;
//	LCDType=LQ121S1DG41;
	LCDType=LTM035A776C;
//lxp end
	XllpLCD.DisplayType = LCDType;

	switch(LCDType)
    	{
//		case SHARP57:
//			XllpLCD.FrameBufferWidth = 320;
//			XllpLCD.FrameBufferHeight = 240;
//			break;
//		case LQ104V1DG51:
//			XllpLCD.FrameBufferWidth = 640;
//			XllpLCD.FrameBufferHeight = 480;
//			break;
//		case LQ121S1DG41:
//			XllpLCD.FrameBufferWidth = 800;
//			XllpLCD.FrameBufferHeight = 600;
//			break;
		case LTM035A776C:
			XllpLCD.FrameBufferWidth = 240;
			XllpLCD.FrameBufferHeight = 320;
			break;
    }

    XllpLCD.BPP = BPP_16;
    XllpLCD.PixelDataFormat = PDFOR_00;
    XllpLCD.CurrentPage = 0;
    XllpLCD._FRAME_BUFFER_BASE_PHYSICAL = FRAME_BUFFER_0_BASE_PHYSICAL;
    XllpLCD._PALETTE_BUFFER_BASE_PHYSICAL = PALETTE_BUFFER_BASE_PHYSICAL;
    XllpLCD._DMA_CHANNEL_0_FRAME_DESCRIPTOR_BASE_PHYSICAL = DMA_CHANNEL_0_FRAME_DESCRIPTOR_BASE_PHYSICAL;	
    XllpLCD._DMA_CHANNEL_1_FRAME_DESCRIPTOR_BASE_PHYSICAL = DMA_CHANNEL_1_FRAME_DESCRIPTOR_BASE_PHYSICAL;
    XllpLCD._DMA_CHANNEL_0_ALT_FRAME_DESCRIPTOR_BASE_PHYSICAL = DMA_CHANNEL_0_ALT_FRAME_DESCRIPTOR_BASE_PHYSICAL;
    XllpLCD._PALETTE_FRAME_DESCRIPTOR_BASE_PHYSICAL = PALETTE_FRAME_DESCRIPTOR_BASE_PHYSICAL;
    XllpLCD.frameDescriptorCh0fd1 = frameDescriptorCh0fd1;
    XllpLCD.frameDescriptorCh0fd2 = frameDescriptorCh0fd2;
    XllpLCD.frameDescriptorCh1 = frameDescriptorCh1;
    XllpLCD.frameDescriptorPalette = frameDescriptorPalette;
    XllpLCD.frameDescriptorTemp = frameDescriptorTemp;

    // Initialize the LCD Controller
    XllpLCDInit(&XllpLCD);

	{
		DWORD i;
		unsigned *fbp;
		fbp=(unsigned *)FRAME_BUFFER_0_BASE_VIRTUAL;
		
		switch(LCDType)
    	        {
			case SHARP57:
				XllpLCD.FrameBufferWidth = 320;
				XllpLCD.FrameBufferHeight = 240;
			     	memcpy(fbp, gImage_240x320, 320*240*2);
				break;
			case LTM035A776C:
				XllpLCD.FrameBufferWidth = 240;
				XllpLCD.FrameBufferHeight = 320;
			     	memcpy(fbp, gImage_240x320, 320*240*2);
				break;
		}
		/*
		for(i=0;i<(XllpLCD.FrameBufferWidth*XllpLCD.FrameBufferHeight/16);i++) 
		{
			*fbp++ = (0x001F001F) | (0x001F001F<<5) | (0x001F001F<<10);
		}
		for(i=0;i<(XllpLCD.FrameBufferWidth*XllpLCD.FrameBufferHeight/16);i++) 
		{
			*fbp++ = 0x001F001F<<11;
		}
		for(i=0;i<(XllpLCD.FrameBufferWidth*XllpLCD.FrameBufferHeight/16);i++) 
		{
			*fbp++ = 0x003F003F<<5;
		}
		for(i=0;i<(XllpLCD.FrameBufferWidth*XllpLCD.FrameBufferHeight/16);i++) 
		{
			*fbp++ = 0x001F001F;
		}
		for(i=0;i<(XllpLCD.FrameBufferWidth*XllpLCD.FrameBufferHeight/16);i++) 
		{
			*fbp++ = (0x003F003F<<5) | (0x001F001F<<11);
		}
		for(i=0;i<(XllpLCD.FrameBufferWidth*XllpLCD.FrameBufferHeight/16);i++) 
		{
			*fbp++ = (0x001F001F) | (0x001F001F<<11);
		}
		for(i=0;i<(XllpLCD.FrameBufferWidth*XllpLCD.FrameBufferHeight/16);i++) 
		{
			*fbp++ = (0x001F001F) | (0x003F003F<<5);
		}
		for(i=0;i<(XllpLCD.FrameBufferWidth*XllpLCD.FrameBufferHeight/16);i++) 
		{
			*fbp++ = 0x00000000;
		}
		*/
	}

    // Clear the display
    //ClearFrameBuffer(TRUE);
}
#endif
static void ClearFrameBuffer18(void)
{

	DWORD i;
	UINT32 *fbp;

	fbp=(UINT32 *) FRAME_BUFFER_0_BASE_VIRTUAL;
	for(i=0;i<(640*480);i++) 
	{
		  *fbp++ = PACK18(0,0,0);	// black 565 packed
	}

}

static void ClearFrameBuffer16(void)
{

	DWORD i;
	UINT16 *fbp;

	fbp=(UINT16 *) FRAME_BUFFER_0_BASE_VIRTUAL;
	for(i=0;i<(640*480);i++) 
	{
		  *fbp++ = PACK16(0,0,0);	// black 565 packed
	}

}

static void ColorBars18(void)
{
	UINT32 r,g,b, n, o;
	UINT32 *fbp;
	UINT32 numBars = 6;

	fbp=(UINT32 *) FRAME_BUFFER_0_BASE_VIRTUAL;

	r = g = b = 0;

	// red bars
	for (o = 0; o < 480/numBars; o++)
	{
		r = g = b = 0;
		for (n = 1; n <641; n++)
		{
			*fbp++ = PACK18(r,g,b);
			if ((n % (640/64)) == 0)
			{
				r++;
			}
		}
	}

	// green
	for (o = 0; o < 480/numBars; o++)
	{
		r = g = b = 0;
		for (n = 1; n <641; n++)
		{
			*fbp++ = PACK18(r,g,b);
			if ((n % (640/64)) == 0)
			{
				g++;
			}

		}
	}

	//blue
	for (o = 0; o < 480/numBars; o++)
	{
		r = g = b = 0;
		for (n = 1; n <641; n++)
		{
			*fbp++ = PACK18(r,g,b);
			if ((n % (640/64)) == 0) 
			{
				b++;
			}

		}
	}

	// gray
	for (o = 0; o < 480/numBars; o++)
	{
		r = g = b = 0;
		for (n = 1; n <641; n++)
		{
			*fbp++ = PACK18(r,g,b);
			if ((n % (640/64)) == 0)
			{
				r++;
				b++;
				g++;
			}
		}
		
	}

	// black
	for (o = 0; o < 480/numBars; o++)
	{
		for (n = 0; n <640; n++)
		{
			*fbp++ = PACK18(0,0,0);
		}
	}

	// white
	for (o = 0; o < 480/numBars; o++)
	{
		for (n = 0; n <640; n++)
		{
			*fbp++ = PACK18(255,255,255);
		}
	}
}

static void ColorBars16(void)
{
	UINT32 r,g,b, n, o;
	UINT16 *fbp;
	unsigned int numBars = 6;

	fbp=(UINT16 *) FRAME_BUFFER_0_BASE_VIRTUAL;

	// white
	for (o = 0; o < 480/numBars; o++)
	{
		for (n = 0; n <640; n++)
		{
			*fbp++ = PACK16(255,255,255);
		}
	}

	// black
	for (o = 0; o < 480/numBars; o++)
	{
		for (n = 0; n <640; n++)
		{
			*fbp++ = PACK16(0,0,0);
		}
	}

	// gray
	for (o = 0; o < 480/numBars; o++)
	{
		r = g = b = 0;
		for (n = 1; n <641; n++)
		{
			*fbp++ = PACK16(r,g,b);
			if ((n % (640/32)) == 0)
			{
				r++;
				b++;
			}
			if ((n % (640/64)) == 0)
			{
				g++;
			}
		}
		
	}

	//blue
	for (o = 0; o < 480/numBars; o++)
	{
		r = g = b = 0;
		for (n = 1; n <641; n++)
		{
			*fbp++ = PACK16(r,g,b);
			if ((n % (640/32)) == 0) 
			{
				b++;
			}

		}
	}

	// green
	for (o = 0; o < 480/numBars; o++)
	{
		r = g = b = 0;
		for (n = 1; n <641; n++)
		{
			*fbp++ = PACK16(r,g,b);
			if ((n % (640/64)) == 0)
			{
				g++;
			}

		}
	}

	// red bars
	for (o = 0; o < 480/numBars; o++)
	{
		r = g = b = 0;
		for (n = 1; n <641; n++)
		{
			*fbp++ = PACK16(r,g,b);
			if ((n % (640/32)) == 0)
			{
				r++;
			}
		}
	}
}

static void EighteenBPPCheck(void)
{
	XLLP_LCD_T XllpLCD;
	volatile LCD_FRAME_DESCRIPTOR	*frameDescriptorCh0fd1=NULL;
	volatile LCD_FRAME_DESCRIPTOR	*frameDescriptorCh0fd2=NULL;
	volatile LCD_FRAME_DESCRIPTOR	*frameDescriptorCh1=NULL;
	volatile LCD_FRAME_DESCRIPTOR	*frameDescriptorPalette=NULL;
	volatile LCD_FRAME_DESCRIPTOR	*frameDescriptorTemp=NULL;
	volatile LCD_PALETTE			*v_pPaletteBuffer=NULL;
	volatile UINT32 *pu32Pointer;
	volatile UINT32 * volatile pu32MarathonBase = (UINT32 *) ((UINT32)OALPAtoUA(BERRYDALE_BASE_PA_MARATHON) + MARATHON_REGS_BASE);

	// First, set up the memory controller to get the Marathon alive
	XScaleMMCSetup(CPU_SYSCLOCK);

	// Setup DMA
	frameDescriptorCh0fd1 = (volatile LCD_FRAME_DESCRIPTOR *)(DMA_CHANNEL_0_FRAME_DESCRIPTOR_BASE_VIRTUAL);
	frameDescriptorCh0fd2 = (volatile LCD_FRAME_DESCRIPTOR *)(DMA_CHANNEL_0_ALT_FRAME_DESCRIPTOR_BASE_VIRTUAL);

⌨️ 快捷键说明

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