s3c6410 winCE6.0 IIC驱动BUG 再续

来源:互联网 发布:淘宝描述图片宽度 编辑:程序博客网 时间:2024/05/19 13:28
 
读过程中最后一个字节不要给ACK到器件,则器件不会继续发送数据,否则,器件自动发送下一个地址的字节数据! 之前的修改(http://blog.csdn.net/knock/archive/2009/11/02/4758818.aspx)有误。
 case Master_receive:
          。。。。。
           if (g_uIIC_PT==g_uIIC_DATALEN)
            {
                g_pIICReg->IICCON &= ~(1<<7);   //注释掉会导致器件继续发数据,多次进入中断
            }
          。。。。。
总的来说,在原版的基础上,修改的有两个问题:
1.修改为驱动内自己的buffer接收IIC总线上的数据,然后copy到应用程序的buffer
2.修改中断服务里IIC_IST()判断一个读或写完成的条件
        if (bDone)
        {
            RETAILMSG(ZONE_INFO, (TEXT("SetEvent DONE/r/n")));
            bDone = FALSE;     //添加这行
            SetEvent(g_hTransferDone);
        }
这样修改过后,我的调试助手读写再也没出错,秀一下,呵呵~~
IIC-DEBUG tool
打开camera的应用程序,写完camera模块寄存器后,不会再出现类似错误
Exception 'Data Abort' (4): Thread-Id=01840006(pth=85aa48d4), Proc-Id=00400002(pprc=82699308) 'NK.EXE', VM-active=04ec0006(pprc=849cda50) 'explorer.exe' 
PC=c0b721cc(s3c6410_iic.dll+0x000021cc) RA=c0b721b8(s3c6410_iic.dll+0x000021b8) SP=d283fe64, BVA=0004f2cd 
但用示波器抓发现camera应用程序打开后,读寄存器,前三个字节都正常,有ACK,读到的第四字节全是0x00,而关闭camera应用程序后,示波器抓到又是有数据的。
这个问题先放放,等闲下来再仔细找原因。
原创粉丝点击