EBOOT中,遇到一个特别奇怪的问题:
GPG11是一个控制脚位,控制一个三极管,来控制电源。
volatile S3C2440A_IOPORT_REG *s2440IOP = (S3C2440A_IOPORT_REG *)OALPAtoVA(S3C2440A_BASE_REG_PA_IOPORT, FALSE);
s2440IOP->GPGCON = ((s2440IOP->GPGCON & ~(0x3 << 22)) | (0x1 << 22)); //
s2440IOP->GPGDAT |= (0x1 << 11);
EdbgOutputDebugString("s2440IOP->GPGCON[%x] s2440IOP->GPGDAT: 0x%x\r\n", s2440IOP->GPGCON, s2440IOP->GPGDAT);
如果我不加EdbgOutputDebugString,s2440IOP->GPGDAT |= (0x1 << 11);就无效,读出也是为0,如果加了这一行,就有效,读出
也是为1
这个现象很奇怪,代码上没看出什么问题,循环语句中的内容吗?
EdbgOutputDebugString("s2440IOP->GPGCON[%x] s2440IOP->GPGDAT: 0x%x\r\n", s2440IOP->GPGCON, s2440IOP->GPGDAT);
EdbgOutputDebugString("s2440IOP->GPGCON[%x] s2440IOP->GPGDAT: 0x%x\r\n", s2440IOP->GPGCON, s2440IOP->GPGDAT);
第一次读出的是0,第二次读出的是1
外接负载太重。呵呵,后面有个大电容,搞死我也,那时候。我以前遇到情况如此,不知道楼主如何了。