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

📄 bootloader.s

📁 这是一个ucos下看门狗的驱动程序
💻 S
📖 第 1 页 / 共 2 页
字号:
;/****************************************Copyright (c)**************************************************
;**                                      
;**                                          
;**                               杭州央海软件科技有限公司
;**
;**                                 http://www.armgcc.com
;**
;**--------------文件信息--------------------------------------------------------------------------------
;** 文 件 名: Bootloader.s
;** 创建日期: 2006年5月18日
;** 描    述: STR710启动代码
;**
;**---------- 版本信息-----------------------------------------------------------------------------------
;** 修 改 人: 罗辉联 			
;** 版    本: V1.1
;** 日   期: 2006年6月10日
;** 描   述: 修改堆栈分配方式
;**
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/

	PRESERVE8
			

;处理器各种模式标志定义
SVC_MODE        EQU     0x13                ;//管理模式  
USR_MODE        EQU     0x10                ;//用户模式
SYS_MODE        EQU     0x1F                ;//系统模式
IRQ_MODE        EQU     0x12                ;//中断模式
FIQ_MODE        EQU     0x11                ;//快速中断模式
ABT_MODE    	EQU    	0x17		        ;//中止异常模式
UNF_MODE    	EQU    	0x1B		        ;//未定义指令异常模式
MODE_MASK       EQU	    0x1F                ;//屏蔽任何模式
I_BIT			EQU		0x80			    ;//禁止IRQ中断
F_BIT			EQU     0x40			    ;//禁止FIQ中断
NO_INT          EQU     0xC0             	;//中断锁定配置

;各种模式堆栈大小定义,注意:SIZE的大小必须是4的倍数
SVC_STACK_SIZE  EQU     256                 ;//定义系统堆栈大小 
SYS_STACK_SIZE  EQU     1024                ;//定义系统堆栈大小 
IRQ_STACK_SIZE  EQU     512                                                     
FIQ_STACK_SIZE  EQU     256                 ;//FIQ堆栈所占字节数.                                      
ABT_STACK_SIZE  EQU     (1*4)               ;//1个字
UNF_STACK_SIZE  EQU     (1*4)               ;//1个字

IRQ_FIQ_SYS_STACK_SIZE	EQU	  IRQ_STACK_SIZE + FIQ_STACK_SIZE + SYS_STACK_SIZE		
ABT_UND_SVC_STACK_SIZE  EQU	  ABT_STACK_SIZE + UNF_STACK_SIZE + SVC_STACK_SIZE		

;重映射逻辑变量定义
;	GBLL  	REMAP

;引入的外部标号或函数
	IMPORT  Undefined_Handler
	IMPORT  SWI_Handler
	IMPORT  PrefetchAbort_Handler
	IMPORT	DataAbort_Handler

	IMPORT  IRQ_Handler     					;//通用中断处理函数
	IMPORT  FIQ_Handler       					;//快速中断异常处理程序
	
	IMPORT	ChipResetInit						;//STR710复位初始化
	IMPORT	__main								;//C语言入口函数
	
;给外部使用的标号或者函数
	EXPORT	INT_Initialize      
    EXPORT __rt_div0
    EXPORT __user_initial_stackheap				;//库函数初始化堆和栈	
    
 
;系统启动部分代码段

	CODE32
    AREA    start,CODE,READONLY
    
    ENTRY						  				;//程序入口点
;//******************************************************************************************************    
;                          异常向量表
;//******************************************************************************************************
	EXPORT  InitVectors    
InitVectors    
        LDR     PC, Reset_Addr
        LDR     PC, Undefined_Addr
        LDR     PC, SWI_Addr
        LDR     PC, Prefetch_Addr
        LDR     PC, Abort_Addr
        NOP                             		;//保留向量
        LDR     PC, IRQ_Addr
        LDR     PC, FIQ_Addr  
         
        
Reset_Addr      DCD     INT_Initialize
Undefined_Addr  DCD     Undefined_Exception
SWI_Addr        DCD     SWI_Exception
Prefetch_Addr   DCD     PrefetchAbort_Exception
Abort_Addr      DCD     DataAbort_Exception
                DCD     0                     	;//保留向量
IRQ_Addr        DCD     IRQ_Exception
FIQ_Addr        DCD     FIQ_Exception

;/********************************************************************************************************   
;**   
;**                            			异常处理实例 
;**
;**   		根据ATPCS的规则: R0-R3通常用来传递参数和保存结果
;**                   		 R4-R11通常用来保存局部变量
;**                    		 R12 通常用作子程序内部调用的scratch寄存器
;**                    		 所以当异常出现时R0-R12,LR等寄存器均需要入栈进行保护  
;**   		异常Handler说明: 各个异常相对应的实例定义在irq.c中,实际处理程序在其中添加  
;**   		IRQ中断嵌套说明: 在本例子中IRQ中断允许嵌套,但缺省状态未为中断嵌套进行处
;**         
;********************************************************************************************************/
;未定义指令
Undefined_Exception    
		STMFD   SP!, {R0-R11, LR}
		MRS     R1, SPSR           
        STMFD   SP!,{R1}  
        BL      Undefined_Handler		;//来自Inth.c文件
        MSR     SPSR_cxsf,R1         	;//恢复中断前的CPSR 
        LDMFD   SP!,{R0-R11,PC}^     	;//从未定义指令异常返回
        
;软件中断
SWI_Exception
		STMFD   SP!, {R0-R11, LR}
		MRS     R1, SPSR           
        STMFD   SP!,{R1}  
        BL      SWI_Handler				;//来自Inth.c文件
        MSR     SPSR_cxsf,R1         	;//恢复中断前的CPSR 
        LDMFD   SP!,{R0-R11,PC}^     	;//从软件中断异常返回
        
;取指令中止
PrefetchAbort_Exception
		SUB     LR,LR,#4   
		STMFD   SP!, {R0-R11, LR}
		MRS     R1, SPSR           
        STMFD   SP!,{R1}  
        BL      PrefetchAbort_Handler	;//来自Inth.c文件
        MSR     SPSR_cxsf,R1         	;//恢复中断前的CPSR 
        LDMFD   SP!,{R0-R11,PC}^     	;//从取指令中止异常返回
          
;取数据中止
DataAbort_Exception
		SUB     LR,LR,#8   
		STMFD   SP!, {R0-R11, LR}
		MRS     R1, SPSR           
        STMFD   SP!,{R1}  
        BL      DataAbort_Handler		;//来自Inth.c文件
        LDMFD   SP!,{R1}        
        MSR     SPSR_cxsf,R1         	;//恢复中断前的CPSR 
        LDMFD   SP!,{R0-R11,PC}^     	;//从取数据中止异常返回
        
;/******************************************************************************************************** 
;** 函数名称: FIQ_Handler
;** 功能描述: 快速中断入口,即FIQ异常处理实例
;** 
;** 参    数: None
;**
;** 返 回 值: None
;**         
;** 作   者: 罗辉联
;** 日   期: 2006年5月18日
;**-------------------------------------------------------------------------------------------------------
;** 修 改 人: 
;** 日   期: 
;**-------------------------------------------------------------------------------------------------------
;*********************************************************************************************************/ 
FIQ_Exception
		SUB     LR,LR,#4             	;//保存实际的返回地址
        STMFD   SP!,{R0-R7, LR}	     	;//保存 R0-R7 和 LR 到 FIQ 堆栈,R8~R14 FIQ模式为专用积存器不用保存到堆栈
        MRS     R1, SPSR           
        STMFD   SP!,{R1}             	;//保存FIQ出现前CPSR的值到堆栈
        
        BL      FIQ_Handler          	;//响应FIQ异常,来自Inth.c文件
        
        LDMFD   SP!,{R1}        
        MSR     SPSR_cxsf,R1         	;//恢复中断前的CPSR 
        LDMFD   SP!,{R0-R7,PC}^      	;//从IRQ返回
        
;/*********************************************************************************************************
;** 函数名称: IRQ_Handler
;** 功能描述: IRQ中断入口,即IRQ异常处理实例
;** 
;** 参    数: None
;**
;** 返 回 值: None
;**         
;** 作   者: 罗辉联
;** 日   期: 2006年5月18日
;**-------------------------------------------------------------------------------------------------------
;** 修 改 人: 
;** 日   期: 
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/ 
IRQ_Exception

⌨️ 快捷键说明

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