關 閉

        新聞中心

        EEPW首頁 > 工控自動化 > 設計應用 > 基于FPGA的CAN總線控制器SJA1000軟核的設計

        基于FPGA的CAN總線控制器SJA1000軟核的設計

        作者: 時間:2011-04-15 來源:網絡 收藏

        2 接口控制邏輯模塊
        接口控制邏輯是本系統的核心模塊,它與4個功能模塊、讀寫模塊相連接,由一個狀態機組成,即系統的主狀態機。在狀態機的不同狀態中,控制讀寫狀態機與對應的功能模塊相連接,3個模塊互相配合完成一項功能。QuartuslI生成的模塊圖如6所示。

        本文引用地址:http://www.104case.com/article/162166.htm

        e.JPG


        每一個功能模塊都有對應的接口信號,而data_in_infer、addr_out_infer、data_in_infer、w_ok_in、r_ok_in是讀寫模塊的信號接口。
        需要注意的是,本系統中使用了主從狀態機,即狀態機的嵌套。在主狀態進入初始化狀態機后,立即給出一個enable信號,啟動從狀態機,并設置一個從狀態機的完成信號finish(高電平有效),且初始值為低,然后在主狀態機不停的檢測finish信號,如果finish為高,則進入下一個狀態,查詢狀態。而在從狀態機中,則不停地檢測enable信號,如果為高,則開始工作,當完成從狀態機后,將finish信號置高。如此就完成了主從狀態機的互動。接口控制邏輯模塊中的start、end信號即為系統主從狀態機互動信號。

        3 初始化模塊
        初始化模塊的功能是完成的初始化。2.0B規范允許工作在兩種模式,即Basic模式和Peli模式,上電默認為BasicCAN模式。在兩種模式下都需要對的模式寄存器CR、驗收碼寄存器ACR、驗收屏蔽寄存器AMR、定時寄存器BTR0、BTR1和輸出控制寄存器OCR寫入控制命令。
        在本中,借用ROM的思想,將需要讀寫的寄存器地址和數據統一編碼,固化存儲起來,對SJA1000進行讀寫時,只需要按照一定的順序讀出數據和地址,輸出到即可。

        4 位查詢模塊
        位查詢模塊主要功能是在SJA1000轉入工作模式后能夠讀取存在接受緩沖區RXFIFO的幀信息,在本中讀取幀信息采用了查詢方式,即不停地查詢SJA1000狀態寄存器SR的RBS位,如果查詢到RBS位為“1”,即表明接收緩沖區滿,RXFIFO中有可用信息,此時將轉入數據處理模塊,由數據處理模塊進行數據讀入,并進行處理。在查詢過程中,對SJA1000的狀態寄存器進行了讀操作。

        5 數據處理模塊
        數據處理模塊功能是從SJA1000的緩沖區讀入數據,并作處理。在讀入數據時,只需將輸出的地址定位到SJA1000接收緩沖區的數據場依次將數據從緩沖區讀入即可。在CAN的通信中,發送的為幀信息,其數據幀結構如圖7所示。

        f.JPG


        在對數據進行處理時,前16位為ID,有用的數據是在幀中的數據場(Data Field)中,因此只需略過前16位,對后面最多8個字節的數據進行處理,分配到步進電機的引腳上即可。

        6 緩沖區釋放模塊與雙端口模塊
        在緩沖區的數據被讀入后,需要對緩沖區的數據清零,為后續的數據讀入做準備。本質上仍是對SJA1000的命令寄存器(CMR)寫操作。在狀態寄存器與接收緩沖區相關的位為RRB,置1即可釋放緩沖區,這樣就會導致接收緩沖區內的另一條信息立即有效,從而進入下一幀數據的數據查詢、處理過程。
        在本中,輸出的數據引腳為雙向引腳,設計成三態輸出,這是因為雙向端口在完成輸入功能時,必須使端口處于高阻態,否則外部數據不能正確讀入。
        其設計關鍵在于,實體部分必須對端口屬性進行申明,端口屬性必須為inout類型,在構造體對輸出信號進行有條件的高阻控制。

        結語
        CAN接口由VHDL語言描述,易于修改和移植,可以將幾個集成到一個芯片上去,具有單片機所沒有的優勢,在汽車領域具有良好的應用前景。


        上一頁 1 2 3 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 禹城市| 义马市| 金堂县| 桐城市| 阿荣旗| 界首市| 瓮安县| 景德镇市| 得荣县| 宁南县| 横峰县| 辽宁省| 礼泉县| 龙口市| 宣威市| 乐平市| 富宁县| 如皋市| 克拉玛依市| 凤庆县| 宁蒗| 弋阳县| 育儿| 呼伦贝尔市| 青川县| 库尔勒市| 天镇县| 五大连池市| 息烽县| 宜州市| 金川县| 马山县| 合山市| 胶南市| 休宁县| 尚义县| 施甸县| 濮阳县| 襄汾县| 太白县| 芜湖县|