• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 牛人業話 > 牛人工程師與PIC32一個月發生的研發故事

    牛人工程師與PIC32一個月發生的研發故事

    作者: 時間:2014-06-25 來源:網絡 收藏

      那是始于2009年7月所發生的一個我和的故事。就在我的有關如何對16位微控制器進行編程一書剛剛出版不久,我聽說公司一款新的32位微控制器已經出爐。該產品使用的是MIPS內核,同時還聲稱與16位的引腳以及系列產品外圍兼容。對我來說這簡直是太重要了!我立即起身去要到一個樣片并刷新基于GNU的MPLAB C32 C編譯器的beta拷貝。

    本文引用地址:http://www.czjhyjcfj.com/article/248807.htm

      

     

      我只是必須看一下這款新產品像什么。它仍然像是PIC MCU?它能不能在同樣的演示版上工作?畢竟,我已經用C語言為寫完了15章頗有價值的16位代碼和例程。長話短說,在隨后的不到一個月的時間里,我不僅完成了代碼移植,而且已經開始利用所掌握的的經驗書寫一本新書了!

      下面就是對一個月里所發生的事情的簡要敘述。我喜歡從我遵守最好的設計準則并從閱讀數據頁開始講述,如果說我從頭到尾全面閱讀了數據頁,那是撒謊!實際上我所做的與你做的完全一樣。打開裝有以前PIC24項目的MPLAB集成開發環境,點擊F10鍵立即創建。

      二進制數字

      一長串的錯誤列表出現在輸出窗口中。令我驚奇的是,所報道的所有錯誤都明顯地只與我的二進制注釋(0b00000000),即C語言的一個非標準擴展有關。我試圖編譯我關于16位控制器一書前三章中的第一個代碼例程。這是一段非常簡單的代碼,用C來說明I/O,精確定時以及流控制(用于循環)命令。我立刻決定將所有二進制文字轉換成標準十六進制的注釋(0x00)并觀看結果,瞧!編譯器和鏈接器馬上解析出代碼沒有任何錯誤。

      感覺很幸運,我決定繼續“前進”,并在一些實際的硬件——即Explorer 16演示板上運行代碼。我獲取了一個PIC32插件式模塊(PIM),并取代我的16位器件一書中普遍所用的PIC24 PIM。加電后我抱著非常懷疑的態度觀察了幾秒鐘,竟然沒有“冒煙”!然后我取了一塊MPLAB Real ICE調試器和編程器連接到板子上。MPLAB IDE竟然很快識別出該工具并報告已發現PIC32連接到板子上。

      在快速和自動的固件升級后,我便立即按下編程鍵,隨后便是運行命令…。但卻不工作!

      我意識到板子上明顯有什么問題,但一點也不像我所期望的那樣。這里需要解釋一下。在我的16位器件一書的前三章中,我利用C語言向讀者提供了如何生成 “Hello World”這類例子。其中,我講到傳統的實現方法是,向終端發送一個字符串,但這在嵌入式控制應用中是不現實或者不合適的。而是采用一個“有趣的”方案,即制作一排8個LED,當把板子拿在手上并揮動時,燈將有節奏地閃爍。它將顯示出有用的信息,這要歸功于眼睛的自然成像持久性。實際上對此進行編碼要比描述更容易。

      不同時鐘

      事實上是,PIC32得到的I/O引腳和定時全部都是錯誤的。

      對于這一點,通常我只需要噼里啪啦地翻開數據頁并按我自己的工作方式來查找問題的根源。出現的問題是,PIC32時鐘產生模塊比16位器件一書中所用的 PIC24F要更加復雜一些。實際上,PIC32模塊更像16位MCU系列中最新的PIC24F上的振蕩器模塊。同樣,在PIC32結構中,絕大多數外設模塊被連接到工作頻率不同的彼此分離的外設總線上,這些頻率低于系統時鐘,這有助于功率管理,當然也有助于解決EMI問題。

      我耐心找出如何使外設總線工作在與同一項目(16MHz外設總線)中PIC24F所用相同的頻率。我還找出了可以執行的相同指令數,而執行頻率僅為PIC24F所要求系統頻率的一半,這是因為PIC32內核每個時鐘周期上可以執行一個指令。

      JTAG默認值設置為on

      在解決了時鐘問題之后,我快速地瀏覽了一下時鐘模塊。有5個時鐘模塊。看上去絕對與PIC24F完全一樣,進一步回溯PIC MCU的歷史,一直回溯到PIC16C74(大約1994)都是兼容的。我繼續驗證I/O端口:同樣的結構,同樣的引腳數,同樣反映“歷史”的寄存器名稱,發現一個兼容型的軌跡也許可以一直延伸到最初的PIC16C54(大約1991年)。

      最后我對A/D轉換模塊進行了一次快速檢查,對于絕大多數PIC MCU初學者來說這是一個最難理解的外設。其輸入連接到I/O口的上端(絕大多數16位PIC器件的PORTB),并且先加電,故除非你的配置正確,否則它不會使你的數字輸入工作。顯然它與PIC24兼容,因此我仍然無法解釋LED行為異常的原因。

      更靠近看,我發現有4個LED,要么從來不亮,要么就恒亮。于是,我又再一次翻開數據頁來檢查引腳圖,最后終于發現了“元兇”:JTAG端口。

      四線(E)JTAG接口被稱為在線串行編程接口,是一個非正式的行業標準,它不僅允許邊界掃描,而且還支持器件完全編程和調試控制。當然,這在引腳數很多的 32位芯片中是所期望的,PIC32在加電時通過默認的方式將這兩個接口都激活了。如果為了利用一些PORTA I/O而不需要這些JTAG接口,則依賴應用程序來將其關閉。

      自從我注意了JTAG接口后,我的第一個PIC32項目開始按期望工作,并發送出它的首個“Hello”,如圖1所示。

      

     

      圖1:用PIC32產生字符串。

      至此所學到的簡單經驗(振蕩器配置和JTAG接口)迅速地證明了它們與我16位器件一書中前面各章節中絕大多數項目兼容性的關鍵,在隨后幾天的開發中移植都比較順利。我利用UART與PC通信,用SPI接口與串行EEPROM通信,而利用Parallel Master Port與LCD模塊通信。我利用A/D先讀取電位器,然后讀取溫度傳感器,演示了PIC32如何與模擬應用接口。除了模塊的一些擴展功能以外,所有這些模塊的工作都與我所預期的完全一致。我發現我的16位代碼完全可以照用,幾乎不需要任何的改變。

    c語言相關文章:c語言教程



    上一頁 1 2 下一頁

    關鍵詞: Microchip PIC32 PIC24

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 台中县| 邳州市| 喜德县| 志丹县| 邻水| 宜黄县| 通城县| 高台县| 垣曲县| 乡城县| 铜梁县| 民权县| 莱阳市| 苗栗县| 佛学| 邵阳市| 南召县| 西和县| 东阿县| 台山市| 保亭| 乌审旗| 伊金霍洛旗| 攀枝花市| 钟山县| 塔城市| 三门峡市| 铁岭县| 延吉市| 吴堡县| 增城市| 湘潭市| 峡江县| 剑川县| 清河县| 平乐县| 巩义市| 山丹县| 滕州市| 德化县| 文水县|