现象:
芯片驱动正常,功能应用单独实现也没有任何问题。但是将其移植到主程序中出现了时钟显示停止、触屏失效、参数显示出现问题的现象。
原因:
在芯片驱动程序的开发中,忽略了一个问题。那就是该芯片引脚占用的IO资源在初始化的时候不应该改变其他引脚的正常功能工作。初始化芯片时人为的改变了其余功能引脚的作用。将其功能复用功能人为了改成了输出引脚。只关注了该芯片正常工作时的IO引脚,忽略了其余各IO口的复用状态。后逐条分析查看原主程序中 IO的初始化操作,逐口比对发现了该问题。
解决方案:
重新对接口进行初始化,保留其余引脚的功能复用作用。
总结:
工作要细致,不要犯想当然的毛病。出现问题后要冷静,咬人是不对的,呵呵。。。
一、关于延时
芯片时序要求非常严格,最基本的时间单位一定要非常精确,精确到微秒级。这是进行后续工作的基础。因为C语言来编程,不是很好控制延时的长短。故采用测试的方法进行,为了最大可能的 减小误差,采用延长测试时间的方式进行。其基本思想是延时一定时间后,将其时间在屏幕上打印出来,并分析各两次时间的间隔和具体延时参数之间的关系。例如:当延时参数为60000000时,各两次时间间隔是否小于1分钟。【备注:60000000us=1min】
二、对芯片的读写操作验证
进行芯片自我验证,向芯片暂存器的固定字节写入数据,然后一个字节一个字节读出来,比对写入和读出的数据是否一样。
三、非易失操作的必要性
RAM数据暂存器用于内部计算和数据的存取,数据在掉电后丢失。为长期保存需要保存的数据信息,需要将相关数据信息由暂存器拷贝到EEPROM中。
上电复位后,芯片自动将EEPROM中相关字节拷贝到RAM中。
四、非必需操作的必要性
芯片读取操作,首先读取数据的低8位,再读取数据的高8位。无论是低8位还是高8位,都是从最低位一位一位的读。即使低位是不需要的字节也要读出来,这叫规则。