收获和教训的一天---配置ds1401
今天移植了一个gpio驱动ds1401,一个单总线芯片,从今天下午开始,开始不知道使用的是那个gpio,因为任务上说的是
gpio3,可是我看powerpc8377的手册,上面只有gpio1,gpio2,始终没有发现有gpio3,又不敢问经理(因为如果你问了,
可能会得到“这么简单的东西还来问我,连这都不会,还怎么做开发呢?”,因为经理前天已经给我说过了,但是我因为
不停的喊令峰,让他给我看我的问题,因此当时经理就说,你是一个开发人员,不是测试人员,问题要自己解决,不能一
直依赖别人。
最后我问了经理,他给我说是gpio1-3,我才知道,可是这时已经下午3:30了,后来我就试着改写,因为我心里没谱,毕
竟这是自己第一次做对powerpc底层控制的一个小项目,要对powerpc的gpio来操作了。
最后改写了原来代码的那段gpio控制的底层程序,一直出问题,但是发出去的信号,ds1401一直没有回应,就这样调到了
下午的6:00,后来经理说了句对复用管脚配置了没,我才发现SICRH(实际上是SICRL)没有配置,配了一下,但是用
printf来打印,却始终没有发现引脚上有信号数据,就这样一直到了下午的7:00。
最后拿来示波器测试,但是while(1)中确没有设置正确,吾把SET_PIN_DIR和SET_PIN_DAT当成了设置1和0的功能了,测试
结果gpio没有反应,最后,导致了经理的介入,后果很严重,总之,程序中确实有非常多的不妥,但是最终我发现的原因
却是使用printf输出的问题,我把printf全部去掉,就可以了
printf确实把我害苦了。。
这次程序的移植是我的最大失败,经理说了很多,我的书写格式有很大问题,马虎,我太马虎了。
记录如下:
1.把设置某一个位弄成了设置一个字(就是本来应该使用读取数据,然后把读出来的数和想要设置某位的数 或/非,弄成
了直接赋给了寄存器一个数,从而把reg的其他位也给设了)
2.宏定义名称和数据不对,本来要设置
#define SICRL_OFFSET 0x114
确弄成了这样
#define SICRH_OFFSET 0x114
3.就是那个while(1)的马虎,可看如下代码:
while(1){
SET_PIN_DIR(1);
US_DELAY(tF);
SET_PIN_DAT(0);
}
而正确的是这个:
while(1){
SET_PIN_DIR(1);
US_DELAY(tF);
SET_PIN_DAT(0);
US_DELAY(tF);
SET_PIN_DAT(1);
}