分析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
其中的冲突部分?
敬请板主解答,谢谢!