国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

startup_LPC17XX.s 啟動(dòng)文件分析

2019-11-11 07:48:39
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

工程中startup_LPC17XX.s是M3的啟動(dòng)文件,啟動(dòng)文件由匯編語(yǔ)言寫(xiě)的,它的作用一般是下面這幾個(gè):

  1)堆和棧的初始化

  2)中斷向量表定義

  3)地址重映射及中斷向量表的轉(zhuǎn)移

  4)設(shè)置系統(tǒng)時(shí)鐘頻率

  5)中斷寄存器的初始化

  6)進(jìn)入C應(yīng)用程序

  core_cm3.c與core_cm3.h主要是M3外圍驅(qū)動(dòng)源代碼與頭文件,使用時(shí)一般不需要修改,直接調(diào)用就可以。system_LPC17xx.c與system_LPC17xx.h是關(guān)于系統(tǒng)的文件,里面主要提供了系統(tǒng)初始化函數(shù)SystemInit(),文件中默認(rèn)情況下定義的晶振的大小為12M,使用的是外部晶振,還使用了PLL0倍頻,關(guān)于倍頻的問(wèn)題,以后慢慢再總結(jié)。芯片LPC1768的初始化主要包括時(shí)鐘配置,電源管理,功耗管理等。相比較而言,時(shí)鐘配置相對(duì)復(fù)雜,因?yàn)樗▋蓚€(gè)PLL倍頻電路,一個(gè)是主PLL0主要是為系統(tǒng)和USB提供時(shí)鐘,另一個(gè)是PLL1專門為USB提供48M時(shí)鐘,但也可以不使用它們。由于時(shí)鐘配置比較靈活,所以相以設(shè)置這些參數(shù)也比較復(fù)雜,但是這些在系統(tǒng)文件中已有明確的定義,所以想要變動(dòng)時(shí)只需修改系統(tǒng)文件中相應(yīng)的宏或函數(shù)即可。

程序完成如下內(nèi)容的工作:

        開(kāi)辟一塊大小為Stack_Size的棧空間;

        標(biāo)號(hào)__initial_sp指向棧頂位置;

        定義堆空間大小為Heap_Size;

        建立中斷向量表Vectors,cortex-M3規(guī)定起始地址必須存放棧頂?shù)刂芳確_initial_sp,緊接著存放復(fù)位入口地址,這樣內(nèi)核復(fù)位后就會(huì)自動(dòng)從起始地址的下32位取出復(fù)位地址執(zhí)行復(fù)位中斷服務(wù)函數(shù)。

        Reset_Handler復(fù)位中斷函數(shù)中先EXPORT聲明Reset_Handler的全局性,然后分別執(zhí)行外部的函數(shù)SystemInit和__main。

下面對(duì)匯編程序中的幾個(gè)關(guān)鍵字做說(shuō)明:

        AREA偽指令:用于定義代碼段和數(shù)據(jù)段,后跟屬性標(biāo)號(hào)。其中“READWRITE”表示可讀寫(xiě),“READONLY”只讀屬性。根據(jù)LPC1788的數(shù)據(jù)手冊(cè)描述的存儲(chǔ)介質(zhì),可知可讀寫(xiě)段保持在SRAM區(qū),起始地址為0x1000 0000,代碼中的堆棧保存在SRAM空間。只讀段保存在Flash區(qū),起始地址為0x0000 0000,代碼中的中斷向量表保存在Flash空間。 因此可以總結(jié)出,在0x0000 0000 存放的是棧頂?shù)牡刂穇_initial_sp(即0x1000 0200),在0x0000 0004 存放的是Reset_Handler的地址。

LPCaddresS

圖1:LPC1788 地址映射

memoryLPC

圖2: debug中 0地址的值0x1000 0200 即棧頂?shù)刂罚?0x0000 0004 地址值為0x0000 00F9(看反匯編可知該值 即Reset_Handler的入口如下圖)

0XF9

     DCD指令:開(kāi)辟內(nèi)存空間,中斷向量表建立中使用相當(dāng)于C語(yǔ)言中的函數(shù)指針,每個(gè)成員都是函數(shù)指針,指向各個(gè)中斷服務(wù)函數(shù)。

        自此分析了LPC1788的啟動(dòng),主要包括堆棧初始化,和中斷向量表的初始化。LPC1788有內(nèi)部Flash,所以上電從內(nèi)部Flash啟動(dòng),內(nèi)部Flash的起始地址為0x0000 0000,存放棧頂?shù)牡刂?x1000 0200。 0x0000 0004存放復(fù)位中斷的入口地址。LPC1788復(fù)位后,從0x0000 0004取出復(fù)位入口地址,執(zhí)行中斷復(fù)位函數(shù),從而跳轉(zhuǎn)到SystemInit和main C語(yǔ)言函數(shù)執(zhí)行


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 阿勒泰市| 若尔盖县| 竹溪县| 景德镇市| 镇远县| 濉溪县| 宜兰市| 西畴县| 木里| 南城县| 武冈市| 罗城| 罗甸县| 杭州市| 华容县| 江陵县| 芷江| 合山市| 建德市| 永定县| 军事| 清丰县| 馆陶县| 团风县| 前郭尔| 台北县| 界首市| 德昌县| 丘北县| 平果县| 灵川县| 涟源市| 资阳市| 台北市| 巩义市| 淮滨县| 峨眉山市| 呼伦贝尔市| 黎平县| 泉州市| 曲沃县|