色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于S3C4510B系統的啟動流程及重映射的實現過程

牽手一起夢 ? 來源:單片機與嵌入式系統應用 ? 作者:曹偉,鐘石磊,孫 ? 2020-10-04 17:13 ? 次閱讀

作者:曹偉,鐘石磊,孫克怡,程凱

近年來,隨著32位芯片制造技術的不斷完善,制造成本不斷降低,國內的32位MCU市場也開始火爆起來。越來越多的工程師開始將開發目光從8位轉移到32位微處理器上,基于32位MCU的產品如雨后春筍般層出不窮,應用領域涵蓋了掌上設備、家用電器、網絡設備、無線通信工業控制等。在32位微控制芯片領域,ARM架構的芯片占了近70%的市場。本文中所用到的處理器正是Samsung公司生產的基于ARM架構的S3C4510B。

1 S3C4510B簡介

S3C4510B是一款基于以太網系統的高性價比、高性能的16/32位RISC微處理器。芯片部集成了8KB的Cache/SRAMEthernet控制器,減少了整個系統的成本。片外可擴展ROM、Flash、SDRAM等存儲芯片,可以移植μClinux等復雜的操作系統。利用操作系統完善的TCP/IP協議棧充分發揮芯片的網絡功能。S3C4510B芯片內部沒有程序存儲器,所有程序都被存儲在片外擴展的ROM和Flash中。開始啟動時,存有啟動代碼的ROM或Flash將被映射為0x00地址,系統從此開始運行。但在實際應用中,為提高系統的實時性,加快代碼的執行速度,系統啟動后程序往往要被搬移到RAM中,因為RAM的存取速度要比ROM快得多,這樣大大提升系統的性能。由于S3C4510B芯片中的異常中斷入口地址被固定在0x00開始的8個字中,系統只能將地址空間重新分配,把RAM映射到0x00地址處,這正是Remap的原因所在。

S3C4510B內部有幾個特殊寄存器,用于實現地址空間和芯片內外存儲介質的映射。這幾個寄存器的簡介如下:

SYSCFG:設置特殊寄存器的起始地址和片內SRAM的起始地址。

EXTDBWTH:設置各Bank寄存器所映射芯片的數據線寬度。

ROMCON0~ROMCON5:設置系統內片擴展ROM和Flash的起始和終止地址。

DRAMCON0~DRAMCON3:設置系統內片外擴展RAM的起始和終止地址。

S3C4510B芯片內特殊寄存器段的物理地址為0x3ff0000,各特殊寄存器的偏移地址詳見S3C4510B的技術手冊。

2 S3C4510B系統中Remap的實現

地址空間的重新分配,與處理器的硬件結構緊密相關。總體來說,32位系統中的地址重映射機制可以分為兩種情況:一類是處理器內部專門的寄存器可以完成Remap,這樣只需將Remap寄存器的相應位置1,由硬件邏輯來完成地址的重新映射,如Atmel AT91xx系列;另一類沒有專門的Remap控制寄存器,需要重新改寫處理器內部用于控制Memory起止地址的Bank寄存器,來實現Remap過程。S3C4510B屬于第二種情況。

2.1 硬件系統結構及地址分配

為例于對地址重映射的過程進行分析,圖1給出了本人用于測試的基本S3C4510B的系統硬件結構。文中給出的所有流程及代碼都經過了測試。

此系統是以Samsung公司給出的測試板為參考建立的,其中ROM的容量為512KB,8位數據總線,Remap前的地址范圍為0x0000000~0x0100000,Remap后的地址范圍為0x1000000~0x1100000;RAM的容量為16MB,32位數據總線,Remap前的地址范圍為0x0100000~0x100000,Remap后的地址范圍為0x0000000~0x1000000;Flash的容量為2MB,16位數據總線,Remap前后地址不變,均為0x1100000~0x1300000。Remap前后的地址映射關系如圖2所示。

2.2 系統啟動過程及Remap實現

系統的地址重映射應該在系統的啟動中完成,以下是S3C4510B的Remap啟動過程。

①系統特殊寄存器的設置。主要是配置如上所述的用于實現地址空間和芯片內外存儲介質映射的寄存器,在本系統中配置如下:

SYSCFG=0x87ffff90

EXTDBWTH=0x3001

ROMCON0=0x01000060

ROMCON1=0x13044060

DRAMCON0=0x11004060

②初始化系統堆棧。在ARM7的體系結構中共有七種工作模式,不同的模式有不販堆棧指針,互不干擾。各模式對應于不販異常中斷,至于哪些模式的堆棧需要初始化取決于用戶使用了哪些中斷,以及系統需要處理些異常類型。一般來說,管理者(SVC)堆棧必須設置,如果使用了IRQ中斷,則IRQ堆棧也必須設置。有一點需要注意的是,為保證Remap后程序運行正常,所有堆棧應設置在RAM的高端地址中。

③初始化I/O口、UART、定時器、中斷控制器以及系統中所用到的其它資源。在初始化異常向量表或修改異常向量表中的入口地址前,要關掉所有中斷。

④異常向量表的初始化。將民常中煌怛處理程序的入口地址寫入RAM中相應的異常向量。必須保證的是,異常向量表絕對不會被從ROM搬移到RAM中的代碼和數據所覆蓋,為此,異常向量表一般被定義在RAM中的高端地址中。

程序代碼及數據的搬移。Remap后,RAM被映射到0x0000的地址空間,ROM則被移到高端地址上。為保證Remap后程序能夠瞠運行,ROM中的代碼和數據必須地址不變地被移到RAM中。這是Remap成功的關鍵。兩種途徑可以實現搬移。

一種是不管實際的代碼空間有多大,直接將ROM地址空間整個搬移到RAM中。當然,這種方法并不適合在真正的啟動代碼中使用,但在做初步的Remap測試時,可以用來檢驗堆棧及異常中斷的設置是否合理。

另一種方法較復雜,它使用了SDT鏈接器ARMLink產生的定位信息,僅把RO風吹草動的有效代碼和數據段到RAM中。ARMLink將編譯后的程序鏈接成ELF文件。映像文件內部共有三種輸出段:RO段、RW段和ZI段。這三種輸出段分別包含了只讀代碼及包含在代碼段中的少量數據、可讀寫的數據、初始化為0的數據,ARMLink同時還產生了這三種輸出段的起始和終止定位信息:Image$$RO$$Base、Image$$RO$$Limit、Image$$RW$$Base、Image$$Limit、Image$$Linit和Image$$ZI$$Limit。可以在程序中使用這些定位信息。將ROM中的代碼和數據搬移到RAM中,其實現代碼如下:

數據定義:

BaseOfROM DCD |Image$$RO$$Base|

TopOfROM DCD |Image$$RO$$Limit|

BaseOfBSS DCD |Image$$RW$$Base|

BaseOfZero DCD |Image$$ZI$$Base|

EndOfBSS DCD |Image$$ZI$$Limit|

源程序:

;將ROM中的程序搬移到RAM中,重映射后的地址不變

adr r0,ResetEntry ;ROM中程序起始地址

mov r3,#(RamBaseAddr《《16) ;RamBaseAddr=0x100

Idr r1,BaseOfROM

Idr r2,TopOfROM

Add r1,r1,r3

Add r2,r2,r3

0

Idmia r0!,{r4-r11}

Stmia r1!,{r4-r11}

Cmp r1,r2

Bcc%B0

;將RW段中預初始化的變量搬移到RAM中

sub r1,r1,r2

sub r0,r0,r1 ;將r0指向RO段的結束,即RW段的開始

ldr r1,BaseOfBSS

Idr r2,BaseOfZero

Add r1,r1,3

Add r2,r2,r3

1 ;基于局部標號的相對跳轉,PC+偏移地址,產生與位置無關的代碼

cmp r1,r2

ldrcc r4,[r0],#4

strcc r4,[r1],#4

bcc %B1

;接著把ZI段搬移到RAM中,并其將初始化為0

mov r0,#0

Idr r2,EndOfBSS

Add r2,r2,r3

2

cmp r1,2

strcc r0,[r1],#4

bcc%B2

⑥地址的重新映射。S3C4510B中的Remap過程其實很簡單,只需重新設置ROMCON0~ROMCON5和DRAMCON0~DRAMCON3。在本系統中只需重新設置ROMCON0和DRAMCON0。

源代碼:

;/*內存控制寄存器重新設置-存儲空間重新映射地址空間*/

EXPORT RemapMemory

RemapMemory

mov r12,r14

adr r0,RemapMem

ldmia r0,{r1-r11}

ldr r0,=ROMCON0 ;ROMCON0為Bank寄存器的起始地址

stmia r0,{r1-r11}

bl ExceptionTalbeInit ;中斷向量表重新初始化

mov pc,r12

RemapMem

DCD %26;amp;11040060 ;/*ROMCON0 0x1000000~0x1100000*/

DCD %26;amp;10000398 ;/*DRACON0 0x0~0x1000000*/

⑦進入C代碼空間,開始主程序的運行。此時代碼應該運行于RAM中。

上面的步驟可以根據實際需要進行適當的添加或刪節。值得注意的是:匯編生成的代碼應該是與位置無關的代碼,即代碼在運行期間可以被映射到不同的地址空間,其中的跳轉指令都是基于PC寄存器的相對跳轉指令?;赑C的標號是位于目標指令前或者程序中數據定義偽操作前的標號,這種符號在匯編時將被處理成PC值加上或減去一個數字常量。

3 異常中斷的處理

在Remap的啟動代碼中,需要特別注意的是異常中斷的處理。在S3C4510B中,異常中斷的入口地址是固定的,按表1次序排列。

地址重新映射之后,入口地址被映射到RAM中,中斷處理代碼也被搬移到RAM地址空是。此時,中斷響應和中斷處理的速度都將大大加快,這將有利于提高整個系統的實時性。異常中斷向量表的設計結構如圖3所示。

下面是各部分的源代碼(以IRQ異常中斷為例)。

異常向量表的定義:(系統初始化時,將異常處理代碼入口地址寫入異常中的向量表)

_RAM_END_ADDR EQU 0x01000000 ;重映射后RAM的終止地址

MAP (_RAM_END_ADDR-0x100)

SYS_RST_VECTOR # 4

UDF_INS_VECTOR # 4

SWI_SVC_VECTOR # 4

INS_ABT_VECTOR # 4

DAT_ABT_VECTOR # 4

RESERVED_VECTOR # 4

IRQ_SVC_VECTOR # 4

FIQ_SVC_VECTOR # 4

異常初始化代碼:

b IRQ_SVC_HANDLER ;0x18

IRQ_SVC_HANDLER

SUB sp,sp,#4 ;滿遞減堆棧

STMFD sp!,{r0}

LDR r0,=IRQ_SVC_VECTOR ;讀取中斷向量,

;IRQ_SVC_VECTOR=SystemrqHandle

LDR r0,[r0]

STR r0,[sp,#4]

LDMFD sp!,{r0,pc};跳轉到異常中斷處理代碼入口

異常處理入口代碼:

SystemIrqHandler

IMPORT ISR_IrqHandler

STMFD sp!,{r0-r12,lr}

BL ISR_IrqHandler ;跳轉到C代碼中異常中斷處理程序ISR_IrqHandler

LDMFD sp!,{r0-r12,lr}

SUBS pc,lr,#4

在如上的結構中,不管系統是否進行了地址的重映射,異常中斷向量都可以在運行時動態改變,大大提高了中斷處理中的靈活性。中斷向量可以在運行時指向不同的異常處理代碼入口。

結語

面對實時性要求越來越高的各種應用,不管應用中有沒有嵌入式操作系統,Remap都已經成為啟動代碼中必不可少的一部分。Remap的實現對于操作系統的移植也有重要的意義。Remap決定了系統啟動的效率,并對整個系統的實時性和穩定性產生很大影響。因而,對Remap過程的理解和設計,對于那些嵌入式系統的開發人員來說是非常重要的,它從一開始就決定了整個開發過程的最終成敗。

責任編輯:gt

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 芯片
    +關注

    關注

    455

    文章

    50719

    瀏覽量

    423164
  • mcu
    mcu
    +關注

    關注

    146

    文章

    17127

    瀏覽量

    350997
  • 控制器
    +關注

    關注

    112

    文章

    16334

    瀏覽量

    177813
收藏 人收藏

    評論

    相關推薦

    μClinux在S3C4510B上的移植

    Linux是一種支持多種體系結構處理器的操作系統.有很強的移植性。描述了將UClinux移植到基于S3C4510B處理器目標板上的方法與過程。首先介紹了S3C4510B處理器和UCli
    發表于 03-28 13:18

    S3C4510B嵌入式系統的應用開發

    利用三星公司生產的S3C4510B32位ARMTDM1單片機構建一個應用系統,利用開發軟件ARM SDT V2.51在開發應用系統實現存儲器的地址
    發表于 03-28 13:39

    ARM 應用系統開發詳解──基于S3C4510B系統設計--ARM嵌入式

    ARM 應用系統開發詳解──基于S3C4510B系統設計--ARM嵌入式
    發表于 04-28 11:16

    應用系統開發詳解_基于S3C4510B系統設計

    應用系統開發詳解_基于S3C4510B系統設計 好資料,與你供享。只供學習!
    發表于 03-25 15:50 ?40次下載

    基于S3C4510B的應用系統設計與調試

    主要介紹基于S3C4510B的硬件系統的詳細設計步驟、實現細節、硬件系統的調試方法等,通過對本章的閱讀,可以使絕大多數的讀者具有根據自身的需求、設計特定應用
    發表于 09-09 14:56 ?0次下載

    s3c4510b pdf datasheet (16/32-

    s3c4510b p
    發表于 10-14 10:43 ?36次下載

    s3c4510b中文手冊,s3c4510b用戶手冊

    s3c4510b中文手冊,s3c4510b用戶手冊:ARM(Advanced RISC Machines),既可以認為是一個公司的名字,也可以認為是對一類微處理器的通稱,還可以認為是一種技術的名字。1991年ARM公司成立
    發表于 10-14 10:54 ?421次下載

    基于uCLinux和S3C4510B的網絡通信設計

    基于uCLinux和S3C4510B的網絡通信設計
    發表于 03-28 09:49 ?17次下載

    μClinux在S3C4510B上的移植

    Linux是一種支持多種體系結構處理器的操作系統.有很強的移植性。描述了將UClinux移植到基于S3C4510B處理器目標板上的方法與過程。首先介紹了S3C4510B處理器和UCli
    發表于 03-28 09:51 ?16次下載

    S3C4510B系統中對觸摸屏控制的研究與實現

    S3C4510B系統中對觸摸屏控制的研究與實現
    發表于 03-28 09:51 ?17次下載

    地址重映射S3C4510B系統中的實現

    介紹基于S3C4510B 系統啟動流程;詳細介紹Remap(重映射)的實現
    發表于 05-15 16:12 ?11次下載

    基于S3C4510B的嵌入式系統調試技術

    基于S3C4510B的嵌入式系統調試技術
    發表于 05-16 13:20 ?17次下載

    基于S3C4510B嵌入式系統CF卡高速存儲技術

    基于S3C4510B嵌入式系統CF卡高速存儲技術
    發表于 08-23 17:16 ?21次下載

    基于S3C4510B系統設計

    基于S3C4510B系統設計   arm開發詳解全集 1991 年ARM 公司成立于英
    發表于 02-09 14:22 ?857次閱讀

    如何設計ARM核處理器S3C4510B啟動代碼詳細資料分析

    研究了ARM核處理器S3C4510B 的中斷異常處理機制和啟動代碼的任務及運行過程。分析了在REMAP(存儲系統重映射) 情況下中斷向量設置
    發表于 10-12 16:44 ?11次下載
    如何設計ARM核處理器<b class='flag-5'>S3C4510B</b>的<b class='flag-5'>啟動</b>代碼詳細資料分析
    主站蜘蛛池模板: 美女搜查官被高难度黑人在线播放| 婷婷综合亚洲爱久久| 91次元黄色观看| 亚洲.日韩.欧美另类| 国产精品亚洲在钱视频| 色窝窝777欧美午夜精品影院| 大迪克黑人异族| 色一情一乱一伦一区二区三区| Y8848高清私人影院软件优势| 欧美精品高清在线观看| Y8848高清私人影院软件优势| 黄色三级网站| 一攻多受h嗯啊巨肉bl巨污| 久久精品人人做人人爽97| 最近的2019中文字幕国语HD| 免费鲁丝片一级在线观看| write as 跳蛋| 午夜免费体验30分| 久久人妻AV一区二区软件| 青青草视频在线ac| 欧美一区二区三区免费播放 | 欧美美女性生活| 2020美女视频黄频大全视频| 免费视频xxx| 成人精品视频网站| 午夜伦理yy44008影院| 精品爽爽久久久久久蜜臀| 51无码人妻精品1国产| 日本中文一区| 精品人妻伦一二三区久久AAA片 | BL低喘贯穿顶弄老师H| 双手绑在床头调教乳尖| 国语对白嫖老妇胖老太| 91综合精品网站久久| 色呦呦导航| 免费人成网站永久| 国产久久亚洲美女久久| 又黄又猛又爽大片免费| 三级黄在线| 嫩草影院永久在线一二三四| 国产精品久久久久婷婷五月色 |