現象:
芯片驅動正常,功能應用單獨實現也沒有任何問題。但是將其移植到主程序中出現了時鐘顯示停止、觸屏失效、參數顯示出現問題的現象。
原因:
在芯片驅動程序的開發中,忽略了一個問題。那就是該芯片引腳占用的IO資源在初始化的時候不應該改變其他引腳的正常功能工作。初始化芯片時人為的改變了其余功能引腳的作用。將其功能復用功能人為了改成了輸出引腳。只關注了該芯片正常工作時的IO引腳,忽略了其余各IO口的復用狀態。后逐條分析查看原主程序中 IO的初始化操作,逐口比對發現了該問題。
解決方案:
重新對接口進行初始化,保留其余引腳的功能復用作用。
總結:
工作要細致,不要犯想當然的毛病。出現問題后要冷靜,咬人是不對的,呵呵。。。
一、關于延時
芯片時序要求非常嚴格,最基本的時間單位一定要非常精確,精確到微秒級。這是進行后續工作的基礎。因為C語言來編程,不是很好控制延時的長短。故采用測試的方法進行,為了最大可能的 減小誤差,采用延長測試時間的方式進行。其基本思想是延時一定時間后,將其時間在屏幕上打印出來,并分析各兩次時間的間隔和具體延時參數之間的關系。例如:當延時參數為60000000時,各兩次時間間隔是否小于1分鐘。【備注:60000000us=1min】
二、對芯片的讀寫操作驗證
進行芯片自我驗證,向芯片暫存器的固定字節寫入數據,然后一個字節一個字節讀出來,比對寫入和讀出的數據是否一樣。
三、非易失操作的必要性
RAM數據暫存器用于內部計算和數據的存取,數據在掉電后丟失。為長期保存需要保存的數據信息,需要將相關數據信息由暫存器拷貝到EEPROM中。
上電復位后,芯片自動將EEPROM中相關字節拷貝到RAM中。
四、非必需操作的必要性
芯片讀取操作,首先讀取數據的低8位,再讀取數據的高8位。無論是低8位還是高8位,都是從最低位一位一位的讀。即使低位是不需要的字節也要讀出來,這叫規則。
============================================
我們曾在田野里歌唱 在冬季盼望 卻沒能等到這陽光下 秋天的景象 就讓曾經的誓言飛舞吧 隨西風飄蕩 就像你柔軟的長發 曾芬芳我夢鄉.... ...