<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統 > 設計應用 > 基于I2C總線數據寫入器的設計

          基于I2C總線數據寫入器的設計

          作者: 時間:2012-02-03 來源:網絡 收藏

          (1) PC方的線程

          流程見圖3。在線程被創(chuàng)建后,它將向MCU發(fā)送寫命令CMD_WRITE,然后等待MCU的回應RSP_WRITEREADY。成功收到該回應后,寫線程將以CMD_WRITE為命令向MCU發(fā)送,每發(fā)送一組,寫線程都會等待MCU回應RSP_WRITTEN,成功收到這個回應后,寫線程繼續(xù)發(fā)送后面的。完成時,寫線程發(fā)送寫入結束命令CMD_OVER,并等待MCU回應RSP_FIN以確認完成了寫操作。成功收到此回應后,將彈出提示。

          20.jpg


          寫入線程與界面線程的通信通過向界面線程發(fā)消息來實現。寫入線程可發(fā)如下的消息:WM_ _WRITEOVER,WM_ _BLOCKFINISH,WM_ _COMMFAILED。
          WM_ _WRITEOVER消息提示界面線程寫入已經結束。這時界面線程啟用校驗和讀出按鈕,禁用寫入按鈕,向消息框里加入一條寫入完成的消息。
          WM_ _BLOCKFINISH提示界面線程一個塊 操作已經完成,界面線程在接收到這條消息后設置進度條,以顯示當前的進度。
          WM_ _COMMFAILED提示界面線程通信失敗,讀出按鈕可用,寫入不可用。

          (2) PC方的讀出線程

          流程見圖4。在讀出線程被創(chuàng)建后,它將向MCU發(fā)送寫命令CMD_READ,然后等待MCU的回應RSP_READREADY。成功收到回應后,讀線程將發(fā)送CMD_READ命令到MCU,并接收MCU返回的數據。成功收到數據后,讀線程檢查第一個字節(jié)是否為RSP_READ。若是,則保存收到數據,然后再次發(fā)出CMD_READ命令。如此反復,直到512字節(jié)(32個塊)全部完成。

          21.jpg

          讀出線程與界面線程的通信也是通過向界面線程發(fā)消息來實現的。讀出線程可發(fā)如下的消息:WM__REA DOVER,WM__BLOCKFINISH,WM_ _COMMFAILED。其中后兩個消息的意義和寫線程所發(fā)的消息意義一樣,所做的工作也是一樣的。WM_ _READOVER提示界面線程讀出已經完成,界面線程收到這條消息后,將在讀出開始時被禁用的讀出按鈕設為可用,清除進度條并在消息框里加入一條讀出完成的消息。

          6 結束語

          以上介紹了從PC向的EEPROM寫入數據的基本方法,它既可以經擴充后自成一個系統,比如文本閱讀器,也可以作為模塊用在其他系統中。對于時序的模擬代碼則可以當成通用程序使用。

          參考文獻
          [1] 李群芳. 單片微型計算機與接口技術(第2版). 北京:電子工業(yè)出版社,2005
          [2] Jim Beveridge. Multithreading Applications in Win32 Pearson Education


          上一頁 1 2 下一頁

          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();