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

首頁 > 學院 > 開發設計 > 正文

startup_LPC17XX.s 啟動文件分析

2019-11-11 06:26:54
字體:
來源:轉載
供稿:網友

工程中startup_LPC17XX.s是M3的啟動文件,啟動文件由匯編語言寫的,它的作用一般是下面這幾個:

  1)堆和棧的初始化

  2)中斷向量表定義

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

  4)設置系統時鐘頻率

  5)中斷寄存器的初始化

  6)進入C應用程序

  core_cm3.c與core_cm3.h主要是M3外圍驅動源代碼與頭文件,使用時一般不需要修改,直接調用就可以。system_LPC17xx.c與system_LPC17xx.h是關于系統的文件,里面主要提供了系統初始化函數SystemInit(),文件中默認情況下定義的晶振的大小為12M,使用的是外部晶振,還使用了PLL0倍頻,關于倍頻的問題,以后慢慢再總結。芯片LPC1768的初始化主要包括時鐘配置,電源管理,功耗管理等。相比較而言,時鐘配置相對復雜,因為它包括兩個PLL倍頻電路,一個是主PLL0主要是為系統和USB提供時鐘,另一個是PLL1專門為USB提供48M時鐘,但也可以不使用它們。由于時鐘配置比較靈活,所以相以設置這些參數也比較復雜,但是這些在系統文件中已有明確的定義,所以想要變動時只需修改系統文件中相應的宏或函數即可。

程序完成如下內容的工作:

        開辟一塊大小為Stack_Size的棧空間;

        標號__initial_sp指向棧頂位置;

        定義堆空間大小為Heap_Size;

        建立中斷向量表Vectors,cortex-M3規定起始地址必須存放棧頂地址即__initial_sp,緊接著存放復位入口地址,這樣內核復位后就會自動從起始地址的下32位取出復位地址執行復位中斷服務函數。

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

下面對匯編程序中的幾個關鍵字做說明:

        AREA偽指令:用于定義代碼段和數據段,后跟屬性標號。其中“READWRITE”表示可讀寫,“READONLY”只讀屬性。根據LPC1788的數據手冊描述的存儲介質,可知可讀寫段保持在SRAM區,起始地址為0x1000 0000,代碼中的堆棧保存在SRAM空間。只讀段保存在Flash區,起始地址為0x0000 0000,代碼中的中斷向量表保存在Flash空間。 因此可以總結出,在0x0000 0000 存放的是棧頂的地址__initial_sp(即0x1000 0200),在0x0000 0004 存放的是Reset_Handler的地址。

LPCaddresS

圖1:LPC1788 地址映射

memoryLPC

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

0XF9

     DCD指令:開辟內存空間,中斷向量表建立中使用相當于C語言中的函數指針,每個成員都是函數指針,指向各個中斷服務函數。

        自此分析了LPC1788的啟動,主要包括堆棧初始化,和中斷向量表的初始化。LPC1788有內部Flash,所以上電從內部Flash啟動,內部Flash的起始地址為0x0000 0000,存放棧頂的地址0x1000 0200。 0x0000 0004存放復位中斷的入口地址。LPC1788復位后,從0x0000 0004取出復位入口地址,執行中斷復位函數,從而跳轉到SystemInit和main C語言函數執行


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 峨眉山市| 民和| 紫阳县| 周口市| 九龙坡区| 镇平县| 苏尼特左旗| 广丰县| 布尔津县| 武鸣县| 盐山县| 苍南县| 遂溪县| 延川县| 隆子县| 林口县| 铅山县| 塔城市| 基隆市| 莆田市| 金昌市| 诏安县| 阳泉市| 鹤壁市| 大洼县| 苍梧县| 固始县| 报价| 廉江市| 江安县| 大兴区| 花莲市| 霍州市| 大城县| 图片| 高淳县| 昆明市| 壶关县| 大同市| 黑河市| 灵寿县|