1.前言
通常了解一款芯片,我們最開(kāi)始從它的電特性描述出發(fā),隨后看其外設(shè)、存儲(chǔ)、時(shí)鐘等系統(tǒng)基本框架。我相信大家拿到一款芯片之后第一件事就是去查閱其數(shù)據(jù)手冊(cè),對(duì)芯片特性有個(gè)初步了解。
很多芯片開(kāi)發(fā)者在了解芯片特性之后,會(huì)直接拷貝官方提供的例程進(jìn)行調(diào)試,之后慢慢熟悉芯片,變成開(kāi)發(fā)者模式。在這過(guò)程中,很多開(kāi)發(fā)者往往忽略了一個(gè)重要的步驟,那就是熟悉芯片啟動(dòng)原理,所以我們今天將DSP28335這款芯片的啟動(dòng)原理與大家分享。
2.上電復(fù)位
顛覆我們感性認(rèn)識(shí)的是,芯片上電過(guò)程不是一個(gè)瞬時(shí)過(guò)程,而是 爬坡過(guò)程 ,也就是說(shuō)芯片上電也是需要時(shí)間的。
在了解芯片基本特性之后,我們清晰的知道一般芯片都有上電復(fù)位模塊(POR),也可以稱(chēng)為上電延時(shí)復(fù)位,其作用是通過(guò)延時(shí)器件在上電電壓爬坡過(guò)程中把芯片鎖定在復(fù)位狀態(tài),保證芯片模擬模塊和數(shù)字模塊初始化至已知狀態(tài)再啟動(dòng)芯片。
當(dāng)電壓逐漸增大,直到達(dá)到閾值電壓時(shí),上電復(fù)位電路會(huì)釋放內(nèi)部復(fù)位信號(hào)。在其他必要條件充足的情況下,芯片開(kāi)始啟動(dòng)。
3.BOOT ROM
BOOT ROM是芯片內(nèi)部存儲(chǔ)器中固化好的一塊只讀存儲(chǔ)區(qū),用來(lái)存放引導(dǎo)程序。
BOOT ROM在芯片內(nèi)部存儲(chǔ)器中地址0x3FE000-x3FFFFF如上圖所示。
上圖是BOOT ROM中按功能分類(lèi)的段地址存儲(chǔ)區(qū)。
CPU Vector Table,此功能區(qū)在VMAP = 1 ,ENPIE = 0的情況下使用。
再完成芯片引導(dǎo)程序后,此功能區(qū)其他部分被用來(lái)存放中斷向量表。
4.啟動(dòng)過(guò)程
芯片上電完成后,開(kāi)始運(yùn)行程序。首先PC指針指向CPU Vector Table中的RESET(地址:0xFFFC0)。
通過(guò)觀察CMD文件中的RESET地址,我們發(fā)現(xiàn)此地址存放著.reset,通過(guò)訪問(wèn)存儲(chǔ)區(qū)中翻譯成匯編語(yǔ)言的代碼,這里存放著一條跳轉(zhuǎn)指令。芯片復(fù)位后第二步,跳轉(zhuǎn)到InitBoot函數(shù)入口地址,執(zhí)行InitBoot函數(shù)。
在InitBoot函數(shù)中,對(duì)器件模式、地址進(jìn)行選擇,還對(duì)某些功能進(jìn)行初始化。最關(guān)鍵的是調(diào)用了SelectBootMode這個(gè)函數(shù),這個(gè)函數(shù)通過(guò)BOOT引腳狀態(tài)來(lái)決定通過(guò)哪種方式引導(dǎo)程序,接下來(lái)我們一起走進(jìn)SelectBootMode。
DSP28335InitBoot中的SelectBootMode是通過(guò)讀取4個(gè)IO引腳的狀態(tài)決定程序引導(dǎo)方式。
如上圖所示定義16種狀態(tài)。
在引導(dǎo)方式上可以分為兩大類(lèi),一類(lèi)是進(jìn)行ADC校準(zhǔn),一類(lèi)是不進(jìn)行ADC校準(zhǔn)。
SelectBootMode首先依據(jù)讀取到的引腳狀態(tài)判斷是否是不進(jìn)行ADC校準(zhǔn),不校準(zhǔn)直接跳過(guò)后續(xù)程序,將讀取到的引導(dǎo)模式的引導(dǎo)函數(shù)入口地址返回。
若需要ADC校準(zhǔn),則往下執(zhí)行ADC校準(zhǔn)。
校準(zhǔn)后再判斷以哪種方式引導(dǎo),并將引導(dǎo)函數(shù)入口地址返回。
返回后在InitBoot中將引導(dǎo)函數(shù)入口地址存入ACC,再將ACC賦予PC退出InitBoot,開(kāi)始運(yùn)行用戶程序。
一般我們將程序引導(dǎo)至FLASH(地址:0x33FFF6)。
通過(guò)工程下的CMD文件可發(fā)現(xiàn)0x33FFF6中存放著codestart函數(shù),所以緊接著運(yùn)行codestart函數(shù)。
codestart函數(shù)中禁止看門(mén)狗,再調(diào)用RTS中的c_int00函數(shù)。
c_int00函數(shù)中為C語(yǔ)言的運(yùn)行搭建運(yùn)行環(huán)境,然后跳轉(zhuǎn)至main函數(shù),來(lái)到C語(yǔ)言的世界。
5.總結(jié)
以上是DSP28335芯片上電到運(yùn)行至main函數(shù)的基本過(guò)程,其基本流程可查閱芯片技術(shù)參考手冊(cè)第二章,流程圖如下圖所示。
以上是本期全部?jī)?nèi)容,那么現(xiàn)在芯片就可以正常運(yùn)行、萬(wàn)事大吉了嗎?
當(dāng)然不是,芯片啟動(dòng)后還需對(duì)芯片進(jìn)行一系列初始化配置,那么這又是怎樣一個(gè)過(guò)程呢?
-
芯片
+關(guān)注
關(guān)注
454文章
50430瀏覽量
421866 -
存儲(chǔ)器
+關(guān)注
關(guān)注
38文章
7453瀏覽量
163608 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4307瀏覽量
62433 -
Boot
+關(guān)注
關(guān)注
0文章
149瀏覽量
35784 -
DSP28335
+關(guān)注
關(guān)注
22文章
58瀏覽量
40591
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論