📄 main.c
字号:
{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 + -