新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 一種基于ARM920T的現場總線控制系統

        一種基于ARM920T的現場總線控制系統

        作者: 時間:2014-01-17 來源:網絡 收藏

          getc函數:unsigned char (*getc)(can_bus *priv)該函數從設備接口讀取一個字符,它只用于非中斷方式,通過查詢設備是否處于準備(ready)狀態來等待一個字符。

          set_config函數:bool (*set_config)(can_bus *priv,cyg_can_info_t *config)該函數用于對指定的端口配置。如果對硬件配置成功,則返回true;如果端口不支持給定的配置參數,則返回false。

          start_xmit函數:void (*start_xmit)can_bus *priv)在中斷方式下,該函數使能發送端,允許發送中斷的產生。

          stop_xmit函數:void (*stop_xmit)(can_bus *priv)在中斷方式下,當數據發送結束后,該函數進制發送端,進制發送中斷產生。

          start_recv函數:void (*stop_xmit)(can_bus *priv)

          stop_recv函數:void (*stop_xmit)(can_bus *priv)

          4.3 發送中斷處理函數

          CAN總線在中斷方式下的負責對中斷進行處理函數是中斷服務程序ISR和中斷滯后服務程序DSR。對中斷的處理主要有三種模式,第一種模式是在中斷服務程序ISR內完成所有設備處理工作,第二種是在中斷滯后服務程序DSR內實現,第三中是將對設備的處理推遲到中斷線程內進行。在驅動程序的設計中采用的是第二種模式。

          在這種模式中,中斷處理程序ISR只是簡單的通過對設備進行編程或者直接調用cyg_drv_interrupt_mask()函數防止新中斷的產生,然后將調用DSR作進一步的處理。DSR完成大部分的硬件處理工作,并有可能對某個條件變量產生一個信號來喚醒新的中斷。最后,DSR調用cyg_drv_interrupt_unmask(),重新使能中斷。中斷處理過程如圖所示:

          44.jpg

          4.4 綁定設備中斷

          設備驅動程序的初始化函數在系統初始化過程或者設備初始使用時被調用,初始化函數不僅要設置設備的參數,還要為設備分配相應的數據結構:例如輸入輸出緩沖區等,最后還將設備中斷進行綁定。

          每一個設備在初始化時會產生一個對應的中斷對象,所有的中斷對象存儲在系統的中斷向量鏈表中。當某個中斷發生時,系統根據中斷碼到中斷向量鏈表中尋找相應的中斷對象,再跳轉到中斷對象記錄的中斷處理程序的位置執行。

          宏cyg_drv_interrupt_create(vector,priority,data,isr,dsr,handle,intr)用于產生設備的中斷對象。其中,vector是中斷向量,priority中斷優先級,data是數據指針,isr是中斷處理程序ISR的地址,dsr是中斷滯后處理程序DSR的地址,handle是返回句柄,intr是中斷對象存放的位置。

          宏cyg_drv_interrupt_attach(interrupt)用于將中斷向量加入到中斷向量鏈表。參數interrupt是將要連接的中斷的句柄。

          設備中斷綁定后,當設備產生中斷時系統會找到相應的中斷向量,然后把控制權交給中斷處理程序,進行中斷的處理。

          5、兩種擴展方式比較

          對于兩種不同的CAN與ARM9連接方式,IO口連接直觀簡單;而利用數據信號線連接能節省IO口,給CPU更多開發空間。兩者在驅動程序上差異不大,主要體現在底層數據讀寫時序實現上。前者簡單易于編寫和理解,后者只是在對時序的理解上略有難度,并不會使代碼更加冗長。

          6、結束語

          本文通過在上擴展CAN總線模塊,詳細講解了如何在ARM9上擴展CAN總線模塊,給出了全IO口擴展和利用數據信號線擴展兩種方式;并詳細說明如何在高實時性操作系統eCos上開發CAN驅動程序;最后對兩種擴展方式做了簡單的比較。該在國家十一五某國防項目中得到了很好的應用。同時也為大中型國有企業自動化生產線的建設和改造,電力系統自動化的實現提供很好的借鑒。

        陀螺儀相關文章:陀螺儀原理



        上一頁 1 2 3 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 大理市| 香格里拉县| 安丘市| 衡阳县| 安溪县| 靖州| 临朐县| 大邑县| 鲁山县| 连南| 辽阳县| 霞浦县| 东源县| 金阳县| 红河县| 普兰县| 娱乐| 西盟| 三原县| 永福县| 庆阳市| 陆河县| 武陟县| 永春县| 南京市| 博湖县| 蒲江县| 太仓市| 临沧市| 修武县| 甘德县| 扶沟县| 门源| 宁海县| 迁西县| 长泰县| 长武县| 杭锦旗| 潢川县| 陇南市| 南皮县|