<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

          8051 與 AndesCoreTM 的軟件差異與移植

          作者: 時(shí)間:2015-07-29 來(lái)源: 收藏

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

          本文引用地址:http://www.ex-cimer.com/article/277992.htm

          3.1.  操作模式

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

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

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

          3.3.  中斷處理

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

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

          AndesCore?包含了 9 個(gè)內(nèi)部異常,中斷向量號(hào)對(duì)應(yīng)于從 0 到 8, 9 之后對(duì)應(yīng)于外部中斷,在 Internal VIC (IVIC)mode 時(shí)可支持 32 個(gè)外部中斷,

          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 時(shí)由外部中斷控制器決定,最多有 64 個(gè)。

          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 來(lái)實(shí)現(xiàn),在 8051中 C 實(shí)現(xiàn)的中斷處理函數(shù)會(huì)有一個(gè)"interrupt"的關(guān)鍵字,如果有寄存器 bank 被使用到,還要加上"using"關(guān)鍵字。如果要將中斷處理函數(shù)固定在特定位置 還需要使用"at"關(guān)鍵字,而 AndesCore?使用的是標(biāo)準(zhǔn)的 C 語(yǔ)法,不需要為中斷處理函數(shù)做這些設(shè)置。

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

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

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

          3.  中斷配置

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

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

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

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

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

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

          ● 設(shè)置 INT_MASK 位

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

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

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

          3.4.  時(shí)序和延遲

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

          3.5.  電源管理

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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




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

          評(píng)論


          相關(guān)推薦

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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();