⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 44binit.s

📁 启动原代码自己的
💻 S
📖 第 1 页 / 共 2 页
字号:
# *********************************************************
# 文 件 名: 44binit.s
# 作    者: 张人柏
# 说    明: S3c44b0x启动文件
# 技术支持:zhangrenbai@163.com
# 使用说明:必须在别的文件或脚码中定义:只读代码的开始地址   只读区域大小 可读写存储区域起始地址           
# 清零区域起始地址 清零区域大小 C语言入口 详见  外部变量声明
# *********************************************************


#============================================
# 寄存器定义及其位定义
#============================================
	# 中断控制
	.equ 	INTPND,		0x01e00004
	.equ 	INTMOD,		0x01e00008
	.equ 	INTMSK,		0x01e0000c
	.equ 	I_ISPR,		0x01e00020
	.equ 	I_CMST,		0x01e0001c

	# 看门狗控制器
	.equ 	WTCON,		0x01d30000

	# 时钟控制器
	.equ 	PLLCON,		0x01d80000
	.equ 	CLKCON,		0x01d80004
	.equ 	LOCKTIME,	0x01d8000c
	
	# 存储器控制器
	.equ 	REFRESH,	0x01c80024

	# BDMA 目的寄存器
	.equ 	BDIDES0,	0x1f80008
	.equ 	BDIDES1,	0x1f80028

	# 预定义常量
	.equ 	USERMODE,	0x10
	.equ 	FIQMODE,	0x11
	.equ 	IRQMODE,	0x12
	.equ 	SVCMODE,	0x13
	.equ 	ABORTMODE,	0x17
	.equ 	UNDEFMODE,	0x1b
	.equ	MODEMASK,	0x1f
	.equ 	NOINT,		0xc0
	.equ    IRQ_MODE,	0x40       				@ (IRQ)
	.equ    FIQ_MODE,	0x80       				@ (FIQ)

#============================================
# 中断处理宏
#============================================
.macro HANDLER HandleLabel
    sub	    sp, sp, # 4	    					@ 栈空间递减保存跳转地址							
    stmfd   sp!,{r0}	    					@ 保存工作寄存器r0到栈
    ldr	    r0, =\HandleLabel					@ 载入中断入口地址所在位置到r0
    ldr	    r0, [r0]	    					@ 载入中断入口地址到r0
    str	    r0, [sp,# 4]	    				@ 保存中断入口地址到栈
    ldmfd   sp!,{r0,pc}	    					@ 恢复工作寄存器并跳转到中断函数
.endm

#============================================
# 声明外部变量
#============================================
    .extern Image_RO_Base						@ 只读代码的开始地址
    .extern Image_RO_Limit    					@ 只读区域大小
    .extern Image_RW_Base     					@ 可读写存储区域起始地址           
    .extern Image_ZI_Base     					@ 清零区域起始地址            
    .extern Image_ZI_Limit    					@ 清零区域大小      
    .extern Main								@ C语言入口
    
#============================================
# 程序代码
#============================================

 .text
ENTRY:
    b 		ResetHandler						@ 调试及复位用 于       
    b 		HandlerUndef      					@ 自定义                
    b 		HandlerSWI        					@ SWI 中断管理          
    b 		HandlerPabort     					@ handlerPAbort         
    b 		HandlerDabort     					@ handlerDAbort         
    b 		.                 					@ 保留                  
    ldr 	pc, =HandlerIRQ
    b 		HandlerFIQ

VECTOR_BRANCH:
    ldr 	pc, =HandlerEINT0    				@mGA                                 
    ldr 	pc, =HandlerEINT1    				@	                                  	
    ldr 	pc, =HandlerEINT2    				@                                      
    ldr 	pc, =HandlerEINT3    				@                                      
    ldr 	pc, =HandlerEINT4567 				@                                      
    ldr 	pc, =HandlerTICK	 			   	@mGA                                    
    b . 	                     				                                     
    b . 	                     				                                    
    ldr 	pc, =HandlerZDMA0    				@mGB                                   
    ldr 	pc, =HandlerZDMA1    				@                                      
    ldr 	pc, =HandlerBDMA0    				@                                      
    ldr 	pc, =HandlerBDMA1    				@                                      
    ldr 	pc, =HandlerWDT	    				@                                       
    ldr 	pc, =HandlerUERR01   				@mGB                                   
    b . 	                     				                                     
    b . 	                     				                                     
    ldr 	pc, =HandlerTIMER0   				@mGC                                   
    ldr 	pc, =HandlerTIMER1   				@                                      
    ldr 	pc, =HandlerTIMER2   				@                                      
    ldr 	pc, =HandlerTIMER3   				@                                      
    ldr 	pc, =HandlerTIMER4   				@                                      
    ldr 	pc, =HandlerTIMER5   				@mGC                                   
    b . 	                     				                                     
    b . 	                     				                                     
    ldr 	pc, =HandlerURXD0    				@mGD                                   
    ldr 	pc, =HandlerURXD1    				@                                      
    ldr 	pc, =HandlerIIC	    				@                                       
    ldr 	pc, =HandlerSIO	    				@                                       
    ldr 	pc, =HandlerUTXD0   				@                                      
    ldr 	pc, =HandlerUTXD1   				@mGD                                   
    b . 	                                                          
    b . 	                                                          
    ldr 	pc, =HandlerRTC	    				@mGKA                                   
    b .						    				@                     		          
    b .						    				@                     		          
    b .						    				@                     		          
    b .						    				@                     		          
    b .						    				@mGKA                 			      
    b . 	                    				                                     
    b . 	                    				                                     
    ldr 	pc,=HandlerADC	    				@mGKB                                  
    b .						    				@                     		          
    b .						    				@                     		          
    b .						    				@                     		          
    b .						    				@                     		          
    b .						    				@mGKB                 		          
    b . 	                                                         
    b . 	                                                         
    ldr 	pc, =EnterPWDN

	.align
HandlerFIQ:		HANDLER HandleFIQ
HandlerIRQ:		HANDLER HandleIRQ
HandlerUndef:	HANDLER HandleUndef
HandlerSWI:		HANDLER HandleSWI
HandlerDabort:	HANDLER HandleDabort
HandlerPabort:	HANDLER HandlePabort
HandlerADC:		HANDLER HandleADC
HandlerRTC:		HANDLER HandleRTC
HandlerUTXD1:	HANDLER HandleUTXD1
HandlerUTXD0:	HANDLER HandleUTXD0
HandlerSIO:		HANDLER HandleSIO
HandlerIIC:		HANDLER HandleIIC
HandlerURXD1:	HANDLER HandleURXD1
HandlerURXD0:	HANDLER HandleURXD0
HandlerTIMER5:	HANDLER HandleTIMER5
HandlerTIMER4:	HANDLER HandleTIMER4
HandlerTIMER3:	HANDLER HandleTIMER3
HandlerTIMER2:	HANDLER HandleTIMER2
HandlerTIMER1:	HANDLER HandleTIMER1
HandlerTIMER0:	HANDLER HandleTIMER0
HandlerUERR01:	HANDLER HandleUERR01
HandlerWDT:		HANDLER HandleWDT
HandlerBDMA1:	HANDLER HandleBDMA1
HandlerBDMA0:	HANDLER HandleBDMA0
HandlerZDMA1:	HANDLER HandleZDMA1
HandlerZDMA0:	HANDLER HandleZDMA0
HandlerTICK:	HANDLER HandleTICK
HandlerEINT4567:HANDLER HandleEINT4567
HandlerEINT3:	HANDLER HandleEINT3
HandlerEINT2:	HANDLER HandleEINT2
HandlerEINT1:	HANDLER HandleEINT1
HandlerEINT0:	HANDLER HandleEINT0
#============================================
# IRQ中断服务程序入口判别
#============================================
ISR_IRQ:											
    sub	    sp, sp, #4       					@ 为PC保留 
    stmfd   sp!, {r8-r9}   

# 查看中断挂起位,跳到挂起的中断服务程序中去
    ldr	    r9, =I_ISPR
    ldr	    r9, [r9]
	cmp		r9, #0x0							@ 如果没有中断挂起位为1则返回	
	beq		l2
    mov	    r8, #0x0
l0:
    movs    r9, r9, lsr #1
    bcs	    l1
    add	    r8, r8, #4
    b	    l0
l1:
    ldr	    r9, =HandleADC
    add	    r9, r9, r8
    ldr	    r9, [r9]
    str	    r9, [sp,#8]
    ldmfd   sp!, {r8-r9,pc}
l2:
	ldmfd	sp!, {r8-r9}
	add		sp, sp, #4
	subs	pc, lr, #4

# ****************************************************
# *	程序开始执行点	 							
# ****************************************************
ResetHandler:
    ldr	    r0, =WTCON	    					@ 看门狗禁止
    ldr	    r1, =0x0 		
    str	    r1, [r0]

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -