wince5.0 2440背光问题

amsung_gs   2009-7-10 11:04 楼主
背光代码
volatile S3C2440A_IOPORT_REG * v_pIOPregs= NULL;

BOOL
BacklightInitialize()
{
    BOOL    bRet = TRUE;
    BL_PowerOn(TRUE);
      
            // key backlight
                           v_pIOPregs->GPBCON = v_pIOPregs->GPBCON & (~(0x3<<4)) | (0x2<<4);

                // lcd backlight
                        v_pIOPregs->GPBCON = v_pIOPregs->GPBCON & (~(0x3<<6)) | (0x2<<6);       
                        v_pIOPregs->GPBUP &= (1<<2) | (1<<3);
                        RETAILMSG(1, (TEXT("BAK: IO init \r\n")));
    return bRet;
}

系统起来后,背光驱动加载不上

提示
Data Abort: Thread=83b812c0 Proc=81226360 'device.exe'
AKY=00000005 PC=03251aec(backlight.dll+0x00001aec) RA=03251c74(backlight.dll+0x00001c74) BVA=06000014 FSR=00000007
RaiseException: Thread=83b812c0 Proc=81226360 'device.exe'
AKY=00000005 PC=03f8de68(coredll.dll+0x0001de68) RA=8022cd40(NK.EXE+0x0002cd40) BVA=00000001 FSR=00000001

在程序中吧IO定义和初始化屏蔽后,背光驱动可以加载,是不是定义有问题啊。

回复评论 (6)

我遇到这个问题都是虚拟地址和物理地址映射有问题,你查这个地方的代码估计可以找到问题的所在。
点赞  2009-7-10 14:02
PC=03251aec(backlight.dll+0x00001aec)
——找到驱动名.map文件定位即可。
点赞  2009-7-10 14:54
就是虚拟地址和物理地址映射问题,我加了这个函数后问题还是一样啊
BOOL InitializeAddresses(VOID)
{
        BOOL        RetValue = TRUE;
       
        /* IO Register Allocation */
        v_pIOPregs = (volatile S3C2440A_IOPORT_REG *)VirtualAlloc(0, sizeof(S3C2440A_IOPORT_REG), MEM_RESERVE, PAGE_NOACCESS);
        if (v_pIOPregs == NULL)
        {
                ERRORMSG(1,(TEXT("For IOPregs : VirtualAlloc failed!\r\n")));
                RetValue = FALSE;
        }
        else
        {
                if (!VirtualCopy((PVOID)v_pIOPregs, (PVOID)(S3C2440A_BASE_REG_PA_IOPORT >> 8), sizeof(S3C2440A_IOPORT_REG), PAGE_PHYSICAL | PAGE_READWRITE | PAGE_NOCACHE))
                {
                        ERRORMSG(1,(TEXT("For IOPregs: VirtualCopy failed!\r\n")));
                        RetValue = FALSE;
                }
        }
        if (!RetValue)
        {
                if (v_pIOPregs)
                {
                        VirtualFree((PVOID) v_pIOPregs, 0, MEM_RELEASE);
                }

                v_pIOPregs = NULL;
        }

        return(RetValue);
}
点赞  2009-7-13 10:27
估计还是 MMU 映射问题。
点赞  2009-7-13 13:53
谢谢各位提示,问题解决了!!
点赞  2009-7-13 15:58
引用: 引用 5 楼 ffeige1984 的回复:
谢谢各位提示,问题解决了!!


怎么解决了,说一说呵,造福你我他!
点赞  2009-7-14 08:41
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复