过了一个星期,今天又拿出来调了下
BOOL CReg2440Uart::Init()
{
if (m_pReg) { // Set Value to default.
Write_ULCON(0);
Write_UCON(0);
Write_UFCON(0);
Write_UMCON(0);
return TRUE;
}
即到这里首次写寄存器 就死了。。
m_pReg 是在 MapHardware()函数里面实现虚地址映射的
if (TranslateBusAddr(m_hParent,(INTERFACE_TYPE)dwi.dwInterfaceType,dwi.dwBusNumber, ioPhysicalBase,&inIoSpace,&ioPhysicalBase)) {
// Map it if it is Memeory Mapped IO.
m_pRegVirtualAddr = MmMapIoSpace(ioPhysicalBase, dwi.memWindows[0].dwLen,FALSE);
RETAILMSG(1, (TEXT("dwi.memWindows[0].dwBase TranslateBusAddr successfully.m_pRegVirtualAddr: %X !\n"), m_pRegVirtualAddr));
}
复制代码.
dwi.memWindows[0].dwBase 打印出来 为50000000 即UART 控制寄存器的首地址。
m_pRegVirtualAddr 为D0500000,也是m_pReg的值,感觉是不是这里 地址映射出错了???