?? 44binit.s
字號:
;/*
;************************************************************************************************************
;* 北京知天行科技有限公司
;* 研 發 部
;*
;* http://www.zt-training.com
;*
;*--------------------------------------------- 文件信息 ----------------------------------------------------
;*
;* 文件名稱 : 44binit.s
;* 文件功能 : 該文件為ARM7硬件平臺的C語言啟動代碼,用于分配中斷向量表,初始化ISR地址,初始化堆棧空間,
;* 初始化應用程序執行環境,配置存儲器系統,設定時鐘周期,呼叫主應用程序。
;* 補充說明 : 基于S3C44B0的ARM7硬件平臺的啟動代碼
;*-------------------------------------------- 最新版本信息 -------------------------------------------------
;* 修改作者 : ARM開發小組
;* 修改日期 : 2004/04/25
;* 版本聲明 : V1.0.1
;*-------------------------------------------- 歷史版本信息 -------------------------------------------------
;* 文件作者 : ARM開發小組
;* 創建日期 : 2004/04/20
;* 版本聲明 : v1.0.0
;*-----------------------------------------------------------------------------------------------------------
;*-----------------------------------------------------------------------------------------------------------
;************************************************************************************************************
;*/
GET ..\inc\option.inc
GET ..\inc\memcfg.inc
IMPORT |Image$$RO$$Limit| ;// 聲明輸入ROM區中的RW地址(即:存儲RO代碼最后地址的下一地址)
IMPORT |Image$$RW$$Base| ;// 聲明輸入RAM區的開始地址
IMPORT |Image$$ZI$$Base| ;// 聲明輸入零初始化區的開始地址
IMPORT |Image$$ZI$$Limit| ;// 聲明輸入零初始化區的末地址的下一地址
IMPORT Main ;// 聲明輸入主程序入口地址
AREA Init,CODE,READONLY
ENTRY
b ResetHandler ;//調試用的程序入口地址
b HandlerUndef ;//從未定義向量地址跳到一個地址,該地址存放進入未定義服務子程序的地址
b HandlerSWI ;//從軟中斷向量地址跳到一個地址,該地址存放進入軟中斷服務子程序的地址
b HandlerPabort ;//從指令預取指終止向量地址跳到一個地址,該地址存放進入指令預取指終止服務子程序的地址
b HandlerDabort ;//從數據終止向量地址跳到一個地址,該地址存放進入數據終止服務子程序的地址
b . ;//系統保留
subs pc,lr,#4 ;//使用向量中斷方式
b HandlerFIQ ;//從FIQ向量地址跳到一個地址,該地址存放進入FIQ服務子程序的地址
;/*********************************************** 注意! ******************************************************/
;// 如果向量中斷模式使能, 上面兩條指令應按下面給出的相應改變
;// b HandlerIRQ -> subs pc,lr,#4
;// b HandlerFIQ -> subs pc,lr,#4
;/******************************* S3C44B0X中斷控制器的向量中斷的向量地址表 ***********************************/
VECTOR_BRANCH
ldr pc,=HandlerEINT0 ;//0x00000020
ldr pc,=HandlerEINT1 ;//0x00000024
ldr pc,=HandlerEINT2 ;//0x00000028
ldr pc,=HandlerEINT3 ;//0x0000002C
ldr pc,=HandlerEINT4567 ;//0x00000030
ldr pc,=HandlerTICK ;//0x00000034
ldr pc,=HandlerDef ;//0x00000038
ldr pc,=HandlerDef ;//0x0000003C
ldr pc,=HandlerZDMA0 ;//0x00000040
ldr pc,=HandlerZDMA1 ;//0x00000044
ldr pc,=HandlerBDMA0 ;//0x00000048
ldr pc,=HandlerBDMA1 ;//0x0000004C
ldr pc,=HandlerWDT ;//0x00000050
ldr pc,=HandlerUERR01 ;//0x00000054
ldr pc,=HandlerDef ;//0x00000058
ldr pc,=HandlerDef ;//0x0000005C
ldr pc,=HandlerTIMER0 ;//0x00000060
ldr pc,=HandlerTIMER1 ;//0x00000064
ldr pc,=HandlerTIMER2 ;//0x00000068
ldr pc,=HandlerTIMER3 ;//0x0000006C
ldr pc,=HandlerTIMER4 ;//0x00000070
ldr pc,=HandlerTIMER5 ;//0x00000074
ldr pc,=HandlerDef ;//0x00000078
ldr pc,=HandlerDef ;//0x0000007C
ldr pc,=HandlerURXD0 ;//0x00000080
ldr pc,=HandlerURXD1 ;//0x00000084
ldr pc,=HandlerIIC ;//0x00000088
ldr pc,=HandlerSIO ;//0x0000008C
ldr pc,=HandlerUTXD0 ;//0x00000090
ldr pc,=HandlerUTXD1 ;//0x00000094
ldr pc,=HandlerDef ;//0x00000098
ldr pc,=HandlerDef ;//0x0000009C
ldr pc,=HandlerRTC ;//0x000000A0
ldr pc,=HandlerDef ;//0x000000A4
ldr pc,=HandlerDef ;//0x000000A8
ldr pc,=HandlerDef ;//0x000000AC
ldr pc,=HandlerDef ;//0x000000B0
ldr pc,=HandlerDef ;//0x000000B4
ldr pc,=HandlerDef ;//0x000000B8
ldr pc,=HandlerDef ;//0x000000BC
ldr pc,=HandlerADC ;//0x000000C0
ldr pc,=HandlerDef ;//0x000000C4
ldr pc,=HandlerDef ;//0x000000C8
ldr pc,=HandlerDef ;//0x000000CC
ldr pc,=HandlerDef ;//0x000000D0
ldr pc,=HandlerDef ;//0x000000D4
ldr pc,=HandlerDef ;//0x000000D8
ldr pc,=HandlerDef ;//0x000000DC
ldr pc,=EnterPWDN ;//0x000000E0 = EnterPWDN
LTORG
HandlerFIQ HANDLER HandleFIQ
HandlerIRQ HANDLER HandleIRQ ;//沒有使用!
HandlerUndef HANDLER HandleUndef
HandlerSWI HANDLER HandleSWI
HandlerDabort HANDLER HandleDabort
HandlerPabort HANDLER HandlePabort
HandlerADC VHANDLER HandleADC
HandlerRTC VHANDLER HandleRTC
HandlerUTXD1 VHANDLER HandleUTXD1
HandlerUTXD0 VHANDLER HandleUTXD0
HandlerSIO VHANDLER HandleSIO
HandlerIIC VHANDLER HandleIIC
HandlerURXD1 VHANDLER HandleURXD1
HandlerURXD0 VHANDLER HandleURXD0
HandlerTIMER5 VHANDLER HandleTIMER5
HandlerTIMER4 VHANDLER HandleTIMER4
HandlerTIMER3 VHANDLER HandleTIMER3
HandlerTIMER2 VHANDLER HandleTIMER2
HandlerTIMER1 VHANDLER HandleTIMER1
HandlerTIMER0 VHANDLER HandleTIMER0
HandlerUERR01 VHANDLER HandleUERR01
HandlerWDT VHANDLER HandleWDT
HandlerBDMA1 VHANDLER HandleBDMA1
HandlerBDMA0 VHANDLER HandleBDMA0
HandlerZDMA1 VHANDLER HandleZDMA1
HandlerZDMA0 VHANDLER HandleZDMA0
HandlerTICK VHANDLER HandleTICK
HandlerEINT4567 VHANDLER HandleEINT4567
HandlerEINT3 VHANDLER HandleEINT3
HandlerEINT2 VHANDLER HandleEINT2
HandlerEINT1 VHANDLER HandleEINT1
HandlerEINT0 VHANDLER HandleEINT0
HandlerDef
stmfd sp!,{r0,r1} ;//r0,r1入棧
ldr r0,=I_PMST ;//把中斷主從優先級分配器地址放入r0
ldr r1,[r0] ;//把其里面的內容放入r1
str r1,[r0] ;//把寄存器r1的內容放入中斷主從優先級分配器地址
ldmfd sp!,{r0,r1} ;//原r0,r1工作寄存器內容出棧
subs pc,lr,#4 ;//跳回到原執行地址
;/*
;************************************************************************************************************
;** 程序開始 **
;************************************************************************************************************
;*/
ResetHandler
ldr r0,=WTCON ;//把看門狗定時器地址給r0
mov r1,#0x00 ;//賦初值
str r1,[r0] ;//關閉看門狗定時器
ldr r0,=INTMSK ;//把屏蔽中斷寄存器地址給r0
mov r1,#0x07ffffff ;//賦初值
str r1,[r0] ;//關閉所有中斷
;/*
;************************************************************************************************************
;** 時鐘控制器配置 **
;************************************************************************************************************
;*/
ldr r0,=LOCKTIME ;//把上鎖時間定時器地址給r0
ldr r1,=0x8fc; ;//賦初值count = t_lock * Fin = 230us * 10MHz = 2300
str r1,[r0] ;//寫入上鎖時間定時器,PLL穩定時間為230 us
[ PLLONSTART
ldr r0,=PLLCON ;//PLL控制寄存器地址給r0
ldr r1,=((M_DIV<<12) + (P_DIV<<4) + S_DIV) ;//設定鎖相環 Fin=10MHz,Fout=40MHz
str r1,[r0] ;//寫入PLL控制寄存器
]
ldr r0,=CLKCON ;//把時鐘控制器地址給r0
ldr r1,=0x7ff8 ;//給所有外設單元的時鐘打開賦值
str r1,[r0] ;//寫入時鐘控制器
;/*
;************************************************************************************************************
;** DMA寄存器配置 **
;************************************************************************************************************
;*/
ldr r0,=BDIDES0
ldr r1,=0x40000000 ;//BDIDES0 復位值為 0x40000000
str r1,[r0]
ldr r0,=BDIDES1
ldr r1,=0x40000000 ;//BDIDES1 復位值為 0x40000000
str r1,[r0]
;/*
;************************************************************************************************************
;** 存儲器寄存器配置 **
;************************************************************************************************************
;*/
ldr r0,=SMRDATA ;//把配置數據的存放地址送入
ldmia r0!,{r1-r13} ;//存入寄存器
mov r0,#0x01c80000 ;//加載總線控制器地址
stmia r0!,{r1-r13} ;//送入控制字到總線控制器
;/*
;************************************************************************************************************
;** 初始化堆棧 **
;************************************************************************************************************
;*/
bl InitStacks
;/*
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -