硬件初始化代码。
{
HKEY hkDisplay = NULL;
AT91PS_PIO pPIOB;
AT91PS_EBI pEBI;
pPIOB = (AT91PS_PIO) AT91C_VA_BASE_PIOB;
pEBI = (AT91PS_EBI) AT91C_VA_BASE_EBI;
//* Setup MEMC to support CS2=OLED
// pEBI->EBI_CSA |= AT91C_EBI_CS1A;
pEBI->EBI_CFGR = 0; //(AT91C_EBI_DBPUC & 0x00) | (AT91C_EBI_EBSEN & 0x00);
pEBI-> EBI_SMC2_CSR[2] =0x2184; //EBI_SMC2_CSR[2]=10 0001 1000 0100 b
pPIOB->PIO_PER = AT91C_PIO_PB23 |AT91C_PIO_PB24;
pPIOB->PIO_OER = AT91C_PIO_PB23 | AT91C_PIO_PB24;
gdwLCDVirtualFrameBase = VA_GDC_BASE; //VA_GDC_BASE=0x30000000
// map frame buffer into process space memory
m_VirtualFrameBuffer = (DWORD)VirtualAlloc(0, (0x100000), MEM_RESERVE, PAGE_NOACCESS);
if (m_VirtualFrameBuffer == NULL)
{
RETAILMSG(1,(TEXT("m_VirtualFrameBuffer is not allocated\n\r")));
return;
}
else if (!VirtualCopy((PVOID)m_VirtualFrameBuffer, (PVOID)gdwLCDVirtualFrameBase, (0x100000), PAGE_READWRITE | PAGE_NOCACHE))
{
RETAILMSG(1, (TEXT("m_VirtualFrameBuffer is not mapped\n\r")));
VirtualFree((PVOID)m_VirtualFrameBuffer, 0, MEM_RELEASE);
return;
}
RETAILMSG(1, (TEXT("VirtualFrameBuffer is mapped at %x(VirtualFrameBase : %x)\r\n"), m_VirtualFrameBuffer, gdwLCDVirtualFrameBase));
pPIOB->PIO_SODR = AT91C_PIO_PB23; //打开OLED显示屏
}