新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 8051 與 AndesCoreTM 的軟件差異與移植

8051 與 AndesCoreTM 的軟件差異與移植

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

3. 系統(tǒng)相關(guān)事項(xiàng)說明

本文引用地址:http://butianyuan.cn/article/277992.htm

3.1.  操作模式

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

3.2.  系統(tǒng)的啟動

和 AndesCore?的系統(tǒng)啟動過程類似,通常在 0 地址存放中斷向量表, 第一個向量表是 reset,當(dāng)系統(tǒng)上電或者是 reset 后,經(jīng)過該向量會跳轉(zhuǎn)到一個 啟動函數(shù)中,該啟動函數(shù)會完成系統(tǒng)啟動所必要的步驟,比如設(shè)置 CPU,初始 化 SoC,清理內(nèi)存,初始化 C 運(yùn)行環(huán)境等, 最后完成所有的準(zhǔn)備后跳轉(zhuǎn)到 main 函數(shù)。

3.3.  中斷處理

8051 有 5 個中斷源,通常中斷向量表只是一個跳轉(zhuǎn),會跳到真正的中斷處理 函數(shù),8051 只能設(shè)置成兩級的中斷優(yōu)先級。

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

AndesCore?包含了 9 個內(nèi)部異常,中斷向量號對應(yīng)于從 0 到 8, 9 之后對應(yīng)于外部中斷,在 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

當(dāng) 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.  實(shí)現(xiàn)中斷處理函數(shù)

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

2.  中斷向量表的產(chǎn)生

8051 中斷向量表擺放在 0 開始的位置,在 AndesCore?中硬件可以設(shè) 定啟動地址,通常設(shè)為 0 地址,也可以是非 0 地址,中斷向量表存放在對應(yīng) 系統(tǒng)啟動地址處。在程序編寫過程中可以通過標(biāo)準(zhǔn)的 gnu 語法再加上 link

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

3.  中斷配置

在 8051 中,需要做以下設(shè)置

●  IE 寄存器中 Individual Interrupt Enable 位設(shè) 1

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

●  當(dāng)是外部中斷時,配置相關(guān)的 pin 為輸入,并設(shè)置對應(yīng)的觸發(fā)屬性為edge 或 level 觸發(fā)。

而在 AndesCore?中需要做以下設(shè)置:

● 設(shè)置 CPU IVIC 或者 EVIC mode

● 設(shè)置 INT_MASK 位

● 設(shè)置中斷的優(yōu)先級

4.  關(guān)于異常處理差異

在 8051 中沒有異常處理向量,所以在 8051 中并沒有這部分的處理函數(shù), 在 AndesCore?中有一些系統(tǒng)的 exception 中斷向量,比如 Machine Error,GeneralException, 建議在 AndesCore?上實(shí)現(xiàn)對應(yīng)的處理函數(shù),當(dāng)發(fā)生這類異常時做一些基本的處理。

3.4.  時序和延遲

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

3.5.  電源管理

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

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

4. 從 8051 移植到 AndesCoreTM 上注意事項(xiàng)

一個 8051 工程,當(dāng)移植到 AndesCore?上時有以下注意事項(xiàng):

1.  內(nèi)存映射,代碼和數(shù)據(jù)擺放位置相關(guān)的設(shè)置。

2.  可以不 必考 慮變 量數(shù) 目,或 者是 函數(shù) 的  overlay,  因?yàn)樵? 32bit  的AndesCore?上開發(fā)時內(nèi)存空間通常不會像 8051 那樣小。

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

4.  在 8051 上用于表示內(nèi)存區(qū)域?qū)傩缘臉?biāo)志如(idata, xdata, bdata, pdata 等)在 AndesCore?上可以移除。

5.  在 8051 上不需要設(shè)置內(nèi)存區(qū)塊模式,比如:small, compact, large 等。

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

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

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

9.  如果有 8051 匯編部分移植到 AndesCore?,需要重新實(shí)現(xiàn),盡可能的用c 來實(shí)現(xiàn),便于維護(hù)和調(diào)試。

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

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

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

存儲器相關(guān)文章:存儲器原理




關(guān)鍵詞: andes andescore 8051 MCU

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉