久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: keil下的s3c2440啟動代碼分析(共68頁pdf) [打印本頁]

作者: sunmny    時間: 2018-10-8 16:29
標題: keil下的s3c2440啟動代碼分析(共68頁pdf)
由于片面問題,所以可能會看起來不太美觀,可以看附件中的內容。
        ARM啟動代碼相當于我們電腦的BIOS, 也就是 ARM啟動時對處理器的一些初始化及嵌入式系統硬件的一些初始化。由于它直接面對處理器內核和硬件控制器進行編程,一般都是用匯編語言。一般包括:中斷向量表,初始化存儲器系統,初始化堆棧,初始化有特殊要求的斷口,設備初始化,變量初始化等。這幾天對著 RealView MDK-ARM中自帶的啟動代碼研究了一下,遇到問題又對著數據手冊和指令表看了一下,總算對S3C2440A 的硬件有了一個大致的了解。學習嵌入式系統重在系統,學習ARM只是為學習嵌入式系統鋪路,懶貓比較笨可能在上系統之前要裸奔幾天以強化以下對S3C2440A 內部結構的了解。
       把 MDK 自帶的 S3C2440A.S 文件的注釋發一下,這些是懶貓結合數據手冊與ARM指令表理解了,可能會有錯誤,放在這里只是引導一下像我一樣還沒有入門的兄弟們,希望你們不要害怕ARM害怕嵌入式,老毛他老人家說的對,世上無難事,只怕有心人,ARM指令就那么多,看一遍不會就多看幾遍,還有一定要學習看軟件自帶的幫助文件.
;下面這些參數是與CPSR狀態寄存器有關
;參數的由來:這里各個模式的參數是由寄存器CPSR的模式位設置M[4:0]得來
的,
;比如這里的用戶模式,CPSR的 M[4:0]設置為10000 就是0x10。
;
;Mode_USR  --  用戶模式,正常程序執行模式,用于應用程序
;Mode_FIQ  --  快速中斷模式,用于高速數據傳輸和通道處理。
;Mode_IRQ  --  外部中斷模式,用于通用的中斷處理。
;Mode_SVC  --  管理模式,使用的一種保護模式。
;Mode_ABT  -- 數據訪問中止模式,用于虛擬存儲用存儲保護
;Mode_UND  --  未定義指令中止模式,當未定義指令執行時進入此模式。
;Mode_SYS  --  系統模式,用于特權級的操作系統任務。
;I_Bit      -- 如果 I位被置1,則外部中斷被禁止(IRQ is disabled)
;F_Bit     --  如果 F 位被置 1,則快速中斷被禁止(FIQ is disabled)

;----------------------------------------------------------------------
Mode_USR         EQU      0x10
Mode_FIQ          EQU      0x11
Mode_IRQ          EQU      0x12
Mode_SVC          EQU      0x13
Mode_ABT         EQU      0x17
Mode_UND         EQU      0x1B
Mode_SYS         EQU      0x1F
  
I_Bit            EQU      0x80             ; when I bit is set, IRQ is disabled
F_Bit            EQU      0x40             ; when F bit is set, FIQ is disabled
  
;-----------------------------棧初始化定義-----------------------------------
;下面這些主要是棧配置,系統的棧空間設定
;
;UND_Stack_Size  --  未定義模式的棧大小
;SVC_Stack_Size  --  超級用戶模式的棧大小
;ABT_Stack_Size  -- 數據訪問終止模式的棧大小
;FIQ_Stack_Size  --  快速中斷模式的棧大小
;IRQ_Stack_Size  --  外部中斷模式的棧大小
;USR_Stack_Size  --  用戶模式的棧大小
;ISR_Stack_Size  --  總堆棧的大小,也就是也有模式下堆棧相加
;
;-----------------------------------------------------------------------
  
UND_Stack_Size   EQU      0x00000000
SVC_Stack_Size    EQU      0x00000008
ABT_Stack_Size   EQU      0x00000000
FIQ_Stack_Size    EQU      0x00000000
IRQ_Stack_Size    EQU      0x00000080
USR_Stack_Size   EQU      0x00000400
  ISR_Stack_Size    EQU      (UND_Stack_Size + SVC_Stack_Size + ABT_St
ack_Size +  \
                          FIQ_Stack_Size + IRQ_Stack_Size)
                                                           
;-----------------------------------------------------------------------
;AREA  --  是一個偽指令,用于段定義。ARM的匯編程序由段組成,段是相對
獨立
;        的指令或數據單位,每個段由AREA 偽指令定義,并定義段的屬性。
;         STACK    --  AREA 指令的一個參數,定義段名稱
;         NOINIT  --  AREA 指令的一個參數,指定本數據段僅僅保留了內在單元,而
;        將句初始值寫入內存單元,也即將內存單元值初始化為0
;         READWRITE  -- 指定本段為可讀可寫,數據段默認為READWRITE。

;                      READWRITE(讀寫)、READONLY(只讀)
;ALIGN  --  也是一個偽指令,指定對齊方式。ALIGN n  指令的對齊值有兩種方

;  即 n  或  2^n,這里采用第二種方案即指定后面的指令8 字節對齊。
;
;下面這句話的意思是:
;開辟一個堆棧段,段名字為STACK,定義為可讀可寫,將內存單元初始化為0,
;-----------------------------------------------------------------------
  
                 AREA     STACK, NOINIT, READWRITE, ALIGN=3
                                       
;-----------------------------------------------------------------------
;SPACE  -- 偽指令,用于分配一塊內存單元,并用0 初始化,與%同義
;其指令格式為:
;     {lable}    SPACE    expr
;lable  --  內存起始地址標號    expr  --  所要分配的內存字節數     
;-----------------------------------------------------------------------
Stack_Mem        SPACE     USR_Stack_Size      ;堆棧內存起始地址標號
__initial_sp     SPACE     ISR_Stack_Size      ;匯編代碼的地址標號
  
Stack_Top     ;堆棧段內容結束, 在這里放個標號,用來獲得堆棧頂部地址
  
Heap_Size        EQU      0x00000000     ;定義堆大小設置   
                 ;開辟一個名字為HEAP 可讀可寫,不初始化內存單的內存單元。
                 AREA     HEAP, NOINIT, READWRITE, ALIGN=3
__heap_base      ;堆的基址
Heap_Mem         SPACE     Heap_Size     ;堆內存起始地址標號
__heap_limit     ;堆結束
  
;----------------------------內存初始化定義-----------------------------
;在一些應用系統中除了擴展Flash,RAM掛接在外部存儲器接口上外,可能還有
其它
;的外設掛接在外部存儲器接口上,不同外設的操作時序什么的都是不一樣的,
所以
;在使用這些外設之前必須初始化連接這些外設存儲器接口。這里因為沒擴展,
所以 ;只定義一個片上內存基地址。
;-----------------------------------------------------------------------
  
IRAM_BASE        EQU      0x40000000     ;片上 SRAM的基地址,即內存基地

  
;-------------------------看門狗初始化定義------------------------------
;看門狗在防止程序跑飛,進入無限死循環時起著重要作用。有些應用可能用不

;看門狗功能,也可能有些應用會用到外部看門狗。在這個時候內部看門狗必須

;止,所以有時候會在初始化時將內部看門狗禁止,當以后應用用到時再開啟它。  
;看門狗定時器包括三個寄存器:
;WTCON  --  看門狗控制寄存器,設定看門狗定時器模式
;WTDAT  --  看門狗數據寄存器,用于設定超時寬度
;WTCNT  --  看門狗計數寄存器,里面存放的是看門狗定時器當前值
;
;WT_BASE    --  看門狗定時器基地址
;WTCON_OFS  -- 看門狗控制寄存器偏移地址,相對于基址
;WTDAT_OFS  --  看門狗數據寄存器偏移地址,相對于基址
;WTCNT_OFS  --  看門狗計數寄存器偏移地址,相對于基址
;WT_SETUP    --  看門狗設置
;WTCON_Val  --  看門狗控制寄存器設置,關閉看門狗
;WTDAT_Val  --  看門狗數據寄存器設置,初始值即為0x8000
;-----------------------------------------------------------------------
  
WT_BASE          EQU      0x53000000       ; Watchdog Timer Base Address
WTCON_OFS      EQU      0x00      ; Watchdog Timer Control Register Offse
t
WTDAT_OFS      EQU       0x04       ; Watchdog Timer Data Register     Offs
et
WTCNT_OFS       EQU      0x08       ; Watchdog Timer Count Register    Offs
et
  
WT_SETUP          EQU      0
WTCON_Val         EQU      0x00000000
WTDAT_Val        EQU      0x00008000
  

完整的pdf格式文檔51黑下載地址(共68頁):
keil下的s3c2440啟動代碼分析.pdf (1.08 MB, 下載次數: 39)







歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 欧美精品日韩少妇 | 99re在线观看视频 | 在线播放成人 | 中文字幕第7页 | www黄色| 干少妇视频 | 欧美在线免费观看视频 | 免费看黄色小视频 | 欧美激情小视频 | 成人特级毛片 | 日韩精品视频在线免费观看 | 欧美国产日韩在线 | 一级片黄色片 | 中文在线字幕免费观看 | 欧美日韩国产在线播放 | 中文字幕伊人 | 国产成人免费在线视频 | 日日干av | 中文字幕永久免费 | 亚洲 欧美 另类 综合 偷拍 | 欧美日本精品 | 成人在线不卡 | 不卡av在线播放 | 日本一级片在线观看 | 欧美久久一区二区 | 国产精品成人一区二区 | 福利视频午夜 | 中文字幕日韩视频 | 国产精品手机在线观看 | 中文字幕久久精品 | 日韩免费小视频 | 色综合天天综合网天天狠天天 | 中文字幕在线观看日韩 | 国产在线第一页 | 国产av一级毛片 | 久久在线免费观看 | 天天干夜夜操 | 波多野结衣一区二区三区 | av福利在线| 性久久久久久 | 色综合久久久久 |