📄 71x_vect_ucos.s
字号:
;******************** (C) COPYRIGHT 2003 STMicroelectronics ********************
;* File Name : 71x_vect.s
;* Author : MCD Application Team
;* Date First Issued : 16/05/2003
;* Description : This file used to initialize the exception and IRQ
;* vectors, and to enter/return to/from exceptions handlers.
;*******************************************************************************
;* History:
;* 01/01/2004 : V1.2
;* 14/07/2004 : V1.3
;*******************************************************************************
PRESERVE8
; EXPORT Vectors
AREA RESET, CODE, READONLY
ARM
EIC_base_addr EQU 0xFFFFF800; EIC base address.
CICR_off_addr EQU 0x04 ; Current Interrupt Channel Register.
IVR_off_addr EQU 0x18 ; Interrupt Vector Register.
IPR_off_addr EQU 0x40 ; Interrupt Pending Register.
;*******************************************************************************
; Import the Reset_Handler address from 71x_init.s
;*******************************************************************************
IMPORT Reset_Handler
;*******************************************************************************
; Import exception handlers
;*******************************************************************************
IMPORT Undefined_Handler
IMPORT SWI_Handler
IMPORT Prefetch_Handler
IMPORT Abort_Handler
IMPORT OS_CPU_IRQ_ISR
IMPORT OS_CPU_FIQ_ISR
;*******************************************************************************
; Import IRQ handlers from 71x_it.c
;*******************************************************************************
IMPORT T0TIMIIRQHandler
IMPORT FLASHIRQHandler
IMPORT RCCUIRQHandler
IMPORT RTCIRQHandler
IMPORT WDGIRQHandler
IMPORT XTIIRQHandler
IMPORT USBHPIRQHandler
IMPORT I2C0ITERRIRQHandler
IMPORT I2C1ITERRIRQHandler
IMPORT UART0IRQHandler
IMPORT UART1IRQHandler
IMPORT UART2IRQHandler
IMPORT UART3IRQHandler
IMPORT BSPI0IRQHandler
IMPORT BSPI1IRQHandler
IMPORT I2C0IRQHandler
IMPORT I2C1IRQHandler
IMPORT CANIRQHandler
IMPORT ADC12IRQHandler
IMPORT T1TIMIIRQHandler
IMPORT T2TIMIIRQHandler
IMPORT T3TIMIIRQHandler
IMPORT HDLCIRQHandler
IMPORT USBLPIRQHandler
IMPORT T0TOIIRQHandler
IMPORT T0OC1IRQHandler
IMPORT T0OC2IRQHandler
;*******************************************************************************
; Export Peripherals IRQ handlers table address
;*******************************************************************************
EXPORT T0TIMI_Addr
;*******************************************************************************
;
;*******************************************************************************
EXPORT vector_begin
EXPORT vector_end
; ENTRY
vector_begin
;*******************************************************************************
; Exception vectors
;*******************************************************************************
LDR PC, Reset_Addr
LDR PC, Undefined_Addr
LDR PC, SWI_Addr
LDR PC, Prefetch_Addr
LDR PC, Abort_Addr
NOP ; Reserved vector
LDR PC, IRQ_Addr
LDR PC, FIQ_Addr
;*******************************************************************************
; Exception handlers address table
;*******************************************************************************
Reset_Addr DCD Reset_Handler
Undefined_Addr DCD UndefinedHandler
SWI_Addr DCD SWIHandler
Prefetch_Addr DCD PrefetchAbortHandler
Abort_Addr DCD DataAbortHandler
DCD 0 ; Reserved vector
IRQ_Addr DCD OS_CPU_IRQ_ISR
FIQ_Addr DCD OS_CPU_FIQ_ISR
;*******************************************************************************
; Peripherals IRQ handlers address table
;*******************************************************************************
T0TIMI_Addr DCD T0TIMIIRQHandler
FLASH_Addr DCD FLASHIRQHandler
RCCU_Addr DCD RCCUIRQHandler
RTC_Addr DCD RTCIRQHandler
WDG_Addr DCD WDGIRQHandler
XTI_Addr DCD XTIIRQHandler
USBHP_Addr DCD USBHPIRQHandler
I2C0ITERR_Addr DCD I2C0ITERRIRQHandler
I2C1ITERR_ADDR DCD I2C1ITERRIRQHandler
UART0_Addr DCD UART0IRQHandler
UART1_Addr DCD UART1IRQHandler
UART2_ADDR DCD UART2IRQHandler
UART3_ADDR DCD UART3IRQHandler
BSPI0_ADDR DCD BSPI0IRQHandler
BSPI1_Addr DCD BSPI1IRQHandler
I2C0_Addr DCD I2C0IRQHandler
I2C1_Addr DCD I2C1IRQHandler
CAN_Addr DCD CANIRQHandler
ADC12_Addr DCD ADC12IRQHandler
T1TIMI_Addr DCD T1TIMIIRQHandler
T2TIMI_Addr DCD T2TIMIIRQHandler
T3TIMI_Addr DCD T3TIMIIRQHandler
DCD 0 ; reserved
DCD 0 ; reserved
DCD 0 ; reserved
HDLC_Addr DCD HDLCIRQHandler
USBLP_Addr DCD USBLPIRQHandler
DCD 0 ; reserved
DCD 0 ; reserved
T0TOI_Addr DCD T0TOIIRQHandler
T0OC1_Addr DCD T0OC1IRQHandler
T0OC2_Addr DCD T0OC2IRQHandler
vector_end
;*******************************************************************************
; Exception Handlers
;*******************************************************************************
;*******************************************************************************
;* Macro Name : SaveContext
;* Description : This macro used to save the context before entering
; an exception handler.
;* Input : The range of registers to store.
;* Output : none
;*******************************************************************************
MACRO
SaveContext $reg1,$reg2
STMFD sp!,{$reg1-$reg2,lr} ; Save The workspace plus the current return
; address lr_ mode into the stack.
MRS r1,spsr ; Save the spsr_mode into r1.
STMFD sp!,{r1} ; Save spsr.
MEND
;*******************************************************************************
;* Macro Name : RestoreContext
;* Description : This macro used to restore the context to return from
; an exception handler and continue the program execution.
;* Input : The range of registers to restore.
;* Output : none
;*******************************************************************************
MACRO
RestoreContext $reg1,$reg2
LDMFD sp!,{r1} ; Restore the saved spsr_mode into r1.
MSR spsr_cxsf,r1 ; Restore spsr_mode.
LDMFD sp!,{$reg1-$reg2,pc}^; Return to the instruction following...
; ...the exception interrupt.
MEND
;*******************************************************************************
;* Function Name : UndefinedHandler
;* Description : This function called when undefined instruction
; exception is entered.
;* Input : none
;* Output : none
;*******************************************************************************
UndefinedHandler
SaveContext r0,r12 ; Save the workspace plus the current
; return address lr_ und and spsr_und.
BL Undefined_Handler; Branch to Undefined_Handler.
RestoreContext r0,r12 ; Return to the instruction following...
; ...the undefined instruction.
;*******************************************************************************
;* Function Name : SWIHandler
;* Description : This function called when SWI instruction executed.
;* Input : none
;* Output : none
;*******************************************************************************
SWIHandler
SaveContext r0,r12 ; Save the workspace plus the current
; return address lr_ svc and spsr_svc.
BL SWI_Handler ; Branch to SWI_Handler.
RestoreContext r0,r12 ; Return to the instruction following...
; ...the SWI instruction.
;*******************************************************************************
;* Function Name : PrefetchAbortHandler
;* Description : This function called when Prefetch Abort
; exception is entered.
;* Input : none
;* Output : none
;*******************************************************************************
PrefetchAbortHandler
SUB lr,lr,#4 ; Update the link register.
SaveContext r0,r12 ; Save the workspace plus the current
; return address lr_abt and spsr_abt.
BL Prefetch_Handler; Branch to Prefetch_Handler.
RestoreContext r0,r12 ; Return to the instruction following that...
; ...has generated the prefetch abort exception.
;*******************************************************************************
;* Function Name : DataAbortHandler
;* Description : This function is called when Data Abort
; exception is entered.
;* Input : none
;* Output : none
;*******************************************************************************
DataAbortHandler
SUB lr,lr,#8 ; Update the link register.
SaveContext r0,r12 ; Save the workspace plus the current
; return address lr_ abt and spsr_abt.
BL Abort_Handler ; Branch to Abort_Handler.
RestoreContext r0,r12 ; Return to the instruction following that...
; ...has generated the data abort exception.
;*******************************************************************************
;* Macro Name : IRQ_to_SYS
;* Description : This macro used to switch form IRQ mode to SYS mode
;* Input : none.
;* Output : none
;*******************************************************************************
MACRO
IRQ_to_SYS
MSR cpsr_c,#0x1F ; Switch to SYS mode
STMFD sp!,{lr} ; Save the link register.
MEND
;*******************************************************************************
;* Macro Name : SYS_to_IRQ
;* Description : This macro used to switch from SYS mode to IRQ mode
; then to return to IRQHnadler routine.
;* Input : none.
;* Output : none.
;*******************************************************************************
MACRO
SYS_to_IRQ
LDMFD sp!,{lr} ; Restore the link register.
MSR cpsr_c,#0xD2 ; Switch to IRQ mode.
;MOV pc,lr ; Return to IRQHandler routine to clear the
; pending bit.
bx lr
MEND
;*******************************************************************************
;* Function Name : T0TIMIIRQHandler
;* Description : This function used to switch to SYS mode before entering
; the T0TIMI_IRQHandler function located in 71x_it.c.
; Then to return to IRQ mode after the
; T0TIMI_IRQHandler function termination.
;* Input : none.
;* Output : none.
;*******************************************************************************
LTORG
END
;******************* (C) COPYRIGHT 2003 STMicroelectronics *****END OF FILE****
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -