主题 : 关于2009-08-23版本驱动代码的疑问 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 3564
精华: 0
发帖: 7
金钱: 65 两
威望: 38 点
贡献值: 0 点
综合积分: 14 分
注册时间: 2009-01-19
最后登录: 2011-08-14
楼主  发表于: 2009-11-05 22:51

 关于2009-08-23版本驱动代码的疑问

分析2009-08-23版本驱动代码,发觉其中针对GPG定义存在冲突的地方,
在mini2440\Src\Drivers\Userkey\userkey.cpp中将GPG0/GPG3/GPG5/GPG6/GPG7/GPG11管脚定义为中断工作方式
    s2440IOP->rGPGCON  = (s2440IOP->rGPGCON  & ~(0x3 << 0x0)) | (0x2 << 0x0);  // GPG0 == EINT8
    s2440IOP->rGPGCON  = (s2440IOP->rGPGCON  & ~(0x3 << 6)) | (0x2 << 6);       // GPG3 == EINT11
    s2440IOP->rGPGCON  = (s2440IOP->rGPGCON  & ~(0x3 << 10)) | (0x2 << 10);       // GPG5 == EINT13
    s2440IOP->rGPGCON  = (s2440IOP->rGPGCON  & ~(0x3 << 12)) | (0x2 << 12);       // GPG6 == EINT14
    s2440IOP->rGPGCON  = (s2440IOP->rGPGCON  & ~(0x3 << 14)) | (0x2 << 14);       // GPG7 == EINT15
    s2440IOP->rGPGCON  = (s2440IOP->rGPGCON  & ~(0x3 << 22)) | (0x2 << 22);       // GPG11 == EINT19    

在mini2440\Src\Drivers\Wavedev\AC97目录下hwctxt.cpp hwctxt_8_1.cpp hwctxt_kingfish2.cpp中将GPG0定义为中断方式
        v_pIOPregs->GPGCON = ( v_pIOPregs->GPGCON & ~(0x3)) | 0x2;                        //GPG0

在mini2440\Src\Drivers\AtapiRomi\atapiRomi.cpp中将 GPG3 定义为OUTPUT方式
    m_vpIOPRegs->GPGCON = (m_vpIOPRegs->GPGCON&~(0x3<<6))|(1<<6); // GPG3 output

在mini2440\Src\Drivers\Pccard\pdsocket.cpp中将 GPG0 定义为中断方式
      m_vpIOPRegs->GPGCON = (m_vpIOPRegs->GPGCON & ~(0x3<<0)) | (0x2<<0);                 //GPG0

在mini2440\Src\Drivers\Keybd\Kbdcommon\S3C2440KBD.cpp中将GPG5/GPG6/GPG7分别定义为SPIMISO1/SPIMOSI1/SPICLK1工作方式
      v_pIOPregs->GPGCON &= ~((0x3 << 10) | (0x3 << 12) | (0x3 << 14));   // Clear GPG5,6,7
      v_pIOPregs->GPGCON |= ((0x3 << 10) | (0x3 << 12) | (0x3 << 14));

从以上的代码可以看出GPG3/GPG5/GPG6/GPG7的定义存在冲突状态,这也就是六个按键中k3、k4、k5实效的缘故,因为经过测试
发觉 KBD驱动的初始化比userkey驱动的初始化要晚,KBD驱动将GPG5/GPG6/GPG7的定义由中断方式更改为SPIMISO1/SPIMOSI1/SPICLK1
工作方式导致的。

     另外在此前我基于64M版本做过一个扩展板,利用34PIN的GPIO口进行控制,自己写了一个简单的IO驱动,将
    GPF0/GPF1/GPF2/GPF3/GPF4/GPF5/GPF6/GPG0 定义为INPUT
        GPB5/GPB6/GPB7/GPB8/GPH9/GPH10/GPG3/GPG5/GPG6定义为OUTPUT
     屏蔽掉userkey驱动,工作一直正常,
     现在需要使用128M版本,基于2009-08-23版本做,除了屏蔽掉userkey驱动之外,是否也需要修改
    mini2440\Src\Drivers\Wavedev\AC97目录下hwctxt.cpp hwctxt_8_1.cpp hwctxt_kingfish2.cpp
    mini2440\Src\Drivers\Pccard\pdsocket.cpp
    mini2440\Src\Drivers\Keybd\Kbdcommon\S3C2440KBD.cpp
     其中的冲突部分?
   敬请板主解答,谢谢!