新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 8051 與 AndesCoreTM 的軟件差異與移植

        8051 與 AndesCoreTM 的軟件差異與移植

        作者: 時間:2015-07-29 來源: 收藏

        3. 系統相關事項說明

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

        3.1.  操作模式

        只有一種 mode,AndesCore?有兩種 mode,分別是 superuser mode 和 user mode,當系統上電啟動時是在 superuser mode,或者當系統進入到中 斷或者異常時也進入到 superuser mode,當從中斷或者是異常返回后,會返回到 user mode。由于 沒有 mode 切換的問題,所以在移植的時候只需要理 解 AndesCore?在 mode 方面的機制就可以。

        3.2.  系統的啟動

        和 AndesCore?的系統啟動過程類似,通常在 0 地址存放中斷向量表, 第一個向量表是 reset,當系統上電或者是 reset 后,經過該向量會跳轉到一個 啟動函數中,該啟動函數會完成系統啟動所必要的步驟,比如設置 CPU,初始 化 SoC,清理內存,初始化 C 運行環境等, 最后完成所有的準備后跳轉到 main 函數。

        3.3.  中斷處理

        8051 有 5 個中斷源,通常中斷向量表只是一個跳轉,會跳到真正的中斷處理 函數,8051 只能設置成兩級的中斷優先級。

        中斷源中斷向量
        上電復位0000H
        外部中斷 00003H
        定時器 0 溢出000BH
        外部中斷 10013H
        定時器 1 溢出001BH
        串行口中斷0023H

        AndesCore?包含了 9 個內部異常,中斷向量號對應于從 0 到 8, 9 之后對應于外部中斷,在 Internal VIC (IVIC)mode 時可支持 32 個外部中斷,

        Entry  numberEntry point
        0Reset/NMI
        1TLB fill
        2PTE not present
        3TLB misc
        4TLB VLPT miss
        5Machine Error
        6Debug related
        7General exception
        8Syscall
        9HW0
        10HW1
        11HW2
        12HW3
        40HW31

        當 External VIC(EVIC) mode 時由外部中斷控制器決定,最多有 64 個。

        Entry  numberEntry point
        0Reset/NMI
        1TLB fill
        2PTE not present
        3TLB misc
        4TLB VLPT miss
        5Machine Error
        6Debug related
        7General exception
        8Syscall
        9-72VEP 0-63

        中斷的處理由以下幾部分組成:

        1.  實現中斷處理函數

        可以用匯編實現 8051 的中斷處理函數,也可以用 C 來實現,在 8051中 C 實現的中斷處理函數會有一個"interrupt"的關鍵字,如果有寄存器 bank 被使用到,還要加上"using"關鍵字。如果要將中斷處理函數固定在特定位置 還需要使用"at"關鍵字,而 AndesCore?使用的是標準的 C 語法,不需要為中斷處理函數做這些設置。

        2.  中斷向量表的產生

        8051 中斷向量表擺放在 0 開始的位置,在 AndesCore?中硬件可以設 定啟動地址,通常設為 0 地址,也可以是非 0 地址,中斷向量表存放在對應 系統啟動地址處。在程序編寫過程中可以通過標準的 gnu 語法再加上 link

        script 的 sag 工具,以使產生的中斷向量表在鏈接的時候存放于特定的位置。

        3.  中斷配置

        在 8051 中,需要做以下設置

        ●  IE 寄存器中 Individual Interrupt Enable 位設 1

        ●  IE 寄存器中 EA(Enable All)位設 1

        ●  當是外部中斷時,配置相關的 pin 為輸入,并設置對應的觸發屬性為edge 或 level 觸發。

        而在 AndesCore?中需要做以下設置:

        ● 設置 CPU IVIC 或者 EVIC mode

        ● 設置 INT_MASK 位

        ● 設置中斷的優先級

        4.  關于異常處理差異

        在 8051 中沒有異常處理向量,所以在 8051 中并沒有這部分的處理函數, 在 AndesCore?中有一些系統的 exception 中斷向量,比如 Machine Error,GeneralException, 建議在 AndesCore?上實現對應的處理函數,當發生這類異常時做一些基本的處理。

        3.4.  時序和延遲

        在 8051 中可以采用 NOP 指令來延遲,在 AndesCore?中也有 NOP 指令來 達到類似目的。

        3.5.  電源管理

        8051 單片機中有兩種省電方式,分別是空閑方式和掉電模式,單片機處于空 閑工作方式時,CPU 處于睡眠狀態,它的片內其它部件還是會繼續工作,片內 RAM 的內容和所有專用寄存器的內容在空閑方式期間都被保存下來了, 可以通 過中斷或者硬件復位來終止空閑工作方式。單片機處于掉電工作方式時,片內的 振蕩器停止了工作,因此它的一切都被迫停止了。但片內 RAM 的內容和專用寄 存器的內容一直保持到掉電方式結束為止。掉電方式的喚醒方式只有一種,就是 硬件復位。

        在 AndesCore?上,可以通過軟件 standby 指令使 CPU 進入到低功耗模式,通常標準 c 代碼并不能直接控制硬件,Andes 的 compiler 提供了 intrinsic 函數來做到這點。分別是:nds32_standby_no_wake_grant(), nds32_standby_wake_grant(), nds32_standby_wait_done().指定系統進入低功耗模式時被喚醒的方式,分別是外部中斷中斷喚醒,電源管理模塊喚醒,和 中斷配合電源管理模塊喚醒,可以根據系統需要分別設計。

        4. 從 8051 移植到 AndesCoreTM 上注意事項

        一個 8051 工程,當移植到 AndesCore?上時有以下注意事項:

        1.  內存映射,代碼和數據擺放位置相關的設置。

        2.  可以不 必考 慮變 量數 目,或 者是 函數 的  overlay,  因為在  32bit  的AndesCore?上開發時內存空間通常不會像 8051 那樣小。

        3.  如果空間允許,在 AndesCore?上盡量使用 32bit 的數據類型,這樣效率 會更高。

        4.  在 8051 上用于表示內存區域屬性的標志如(idata, xdata, bdata, pdata 等)在 AndesCore?上可以移除。

        5.  在 8051 上不需要設置內存區塊模式,比如:small, compact, large 等。

        6.  在  8051  上用于表 示對像遠近的屬性 "near" 和 "far", 都可以移 除, AndesCore?上的指針的訪問可以達到所有地址空間。

        7.  在中斷處理函數中不需要像 8051 那樣指定哪塊寄存器塊會被用到的關鍵 字"using"。

        8.  在 8051 上中斷處理函數就和普通的函數一樣,中不需要設置其它的關鍵 字,如 interrupt。

        9.  如果有 8051 匯編部分移植到 AndesCore?,需要重新實現,盡可能的用c 來實現,便于維護和調試。

        10. 在 8051 中使用到的#progma 相關部分需要刪除。

        11. 在 AndesCore?中函數不需要聲明為"reentrant"屬性。

        12. 如果使用了數學運算,在 8051 中默認是使用 32bit 單精度浮點,如果要 保持和 8051 中相同的精度,需要將函數名做一些調整,如將 sin()改成sinf()。

        存儲器相關文章:存儲器原理




        關鍵詞: andes andescore 8051 MCU

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 甘南县| 泸水县| 宜良县| 宝鸡市| 云浮市| 肇庆市| 夏津县| 康平县| 东山县| 碌曲县| 江安县| 红桥区| 宜兰市| 新蔡县| 文化| 马尔康县| 三门县| 南江县| 怀远县| 阳西县| 疏勒县| 密山市| 林州市| 庆阳市| 曲周县| 黄浦区| 永兴县| 宜君县| 江安县| 吉隆县| 柯坪县| 喜德县| 蒙山县| 商城县| 南通市| 额济纳旗| 西宁市| 泸定县| 淳安县| 手游| 仁化县|