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

📄 71x_vect_ucos.s

📁 STR71X系列ARM微控制器原理与实践配套光盘
💻 S
📖 第 1 页 / 共 2 页
字号:
@******************** (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
@*******************************************************************************

.equ EIC_base_addr,               0xFFFFF800@ EIC base address.
.equ CICR_off_addr,               0x04      @ Current Interrupt Channel Register.
.equ IVR_off_addr,                0x18      @ Interrupt Vector Register.
.equ IPR_off_addr,                0x40      @ Interrupt Pending Register.

@*******************************************************************************
@              Import  the Reset_Handler address from 71x_init.s
@*******************************************************************************

        .extern  Reset_Handler

@*******************************************************************************
@                      Import exception handlers
@*******************************************************************************

        .extern  Undefined_Handler
        .extern  SWI_Handler
        .extern  Prefetch_Handler
        .extern  Abort_Handler

        .extern  OS_CPU_IRQ_ISR
        .extern  OS_CPU_FIQ_ISR

@*******************************************************************************
@                   Import IRQ handlers from 71x_it.c
@*******************************************************************************

        .extern  T0TIMI_IRQHandler
        .extern  FLASH_IRQHandler
        .extern  RCCU_IRQHandler
        .extern  RTC_IRQHandler
        .extern  WDG_IRQHandler
        .extern  XTI_IRQHandler
        .extern  USBHP_IRQHandler
        .extern  I2C0ITERR_IRQHandler
        .extern  I2C1ITERR_IRQHandler
        .extern  UART0_IRQHandler
        .extern  UART1_IRQHandler
        .extern  UART2_IRQHandler
        .extern  UART3_IRQHandler
        .extern  BSPI0_IRQHandler
        .extern  BSPI1_IRQHandler
        .extern  I2C0_IRQHandler
        .extern  I2C1_IRQHandler
        .extern  CAN_IRQHandler
        .extern  ADC12_IRQHandler
        .extern  T1TIMI_IRQHandler
        .extern  T2TIMI_IRQHandler
        .extern  T3TIMI_IRQHandler
        .extern  HDLC_IRQHandler
        .extern  USBLP_IRQHandler
        .extern  T0TOI_IRQHandler
        .extern  T0OC1_IRQHandler
        .extern  T0OC2_IRQHandler

@*******************************************************************************
@            Export Peripherals IRQ handlers table address
@*******************************************************************************

        .global  T0TIMI_Addr

@*******************************************************************************
@
@*******************************************************************************
        .global  vector_begin
        .global  vector_end

        .text
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:     .long     Reset_Handler
Undefined_Addr: .long     UndefinedHandler
SWI_Addr:       .long     SWIHandler
Prefetch_Addr:  .long     PrefetchAbortHandler
Abort_Addr:     .long     DataAbortHandler
                .long     0               @ Reserved vector
IRQ_Addr:       .long     OS_CPU_IRQ_ISR
FIQ_Addr:       .long     OS_CPU_FIQ_ISR

@*******************************************************************************
@              Peripherals IRQ handlers address table
@*******************************************************************************

T0TIMI_Addr:    .long  T0TIMIIRQHandler
FLASH_Addr:     .long  FLASHIRQHandler
RCCU_Addr:      .long  RCCUIRQHandler
RTC_Addr:       .long  RTCIRQHandler
WDG_Addr:       .long  WDGIRQHandler
XTI_Addr:       .long  XTIIRQHandler
USBHP_Addr:     .long  USBHPIRQHandler
I2C0ITERR_Addr: .long  I2C0ITERRIRQHandler
I2C1ITERR_ADDR: .long  I2C1ITERRIRQHandler
UART0_Addr:     .long  UART0IRQHandler
UART1_Addr:     .long  UART1IRQHandler
UART2_ADDR:     .long  UART2IRQHandler
UART3_ADDR:     .long  UART3IRQHandler
BSPI0_ADDR:     .long  BSPI0IRQHandler
BSPI1_Addr:     .long  BSPI1IRQHandler
I2C0_Addr:      .long  I2C0IRQHandler
I2C1_Addr:      .long  I2C1IRQHandler
CAN_Addr:       .long  CANIRQHandler
ADC12_Addr:     .long  ADC12IRQHandler
T1TIMI_Addr:    .long  T1TIMIIRQHandler
T2TIMI_Addr:    .long  T2TIMIIRQHandler
T3TIMI_Addr:    .long  T3TIMIIRQHandler
                .long  0                  @ reserved
                .long  0                  @ reserved
                .long  0                  @ reserved
HDLC_Addr:      .long  HDLCIRQHandler
USBLP_Addr:     .long  USBLPIRQHandler
                .long  0                  @ reserved
                .long  0                  @ reserved
T0TOI_Addr:     .long  T0TOIIRQHandler
T0OC1_Addr:     .long  T0OC1IRQHandler
T0OC2_Addr:     .long  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.
.endm

@*******************************************************************************
@* 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.
.endm

@*******************************************************************************
@* Function Name  : UndefinedHandler
@* Description    : This function called when undefined instruction
@                   exception is entered.
@* Input          : none
@* Output         : none
@*******************************************************************************

UndefinedHandler:
        SaveContext r0,r11    @ Save the workspace plus the current
                              @ return address lr_ und and spsr_und.
        BL      Undefined_Handler@ Branch to Undefined_Handler.
        RestoreContext r0,r11 @ 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,r11    @ Save the workspace plus the current
                              @ return address lr_ svc and spsr_svc.
        BL       SWI_Handler  @ Branch to SWI_Handler.
        RestoreContext r0,r11 @ 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,r11    @ Save the workspace plus the current
                              @ return address lr_abt and spsr_abt.
        BL     Prefetch_Handler@ Branch to Prefetch_Handler.
        RestoreContext r0,r11 @ 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,r11    @ Save the workspace plus the current
                              @ return address lr_ abt and spsr_abt.
        BL     Abort_Handler  @ Branch to Abort_Handler.
        RestoreContext r0,r11 @ 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.
.endm
@*******************************************************************************
@* 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.
.endm
@*******************************************************************************
@* 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.
@*******************************************************************************
T0TIMIIRQHandler:
        IRQ_to_SYS
        BL     T0TIMI_IRQHandler
        SYS_to_IRQ
@*******************************************************************************
@* Function Name  : FLASHIRQHandler
@* Description    : This function used to switch to SYS mode before entering
@                   the FLASH_IRQHandler function located in 71x_it.c.
@                   Then to return to IRQ mode after the
@                   FLASH_IRQHandler function termination.
@* Input          : none
@* Output         : none
@*******************************************************************************
FLASHIRQHandler:
        IRQ_to_SYS
        BL     FLASH_IRQHandler
        SYS_to_IRQ
@*******************************************************************************
@* Function Name  : RCCUIRQHandler
@* Description    : This function used to switch to SYS mode before entering
@                   the RCCU_IRQHandler function located in 71x_it.c.
@                   Then to return to IRQ mode after the
@                   RCCU_IRQHandler function termination.
@* Input          : none
@* Output         : none
@*******************************************************************************
RCCUIRQHandler:
        IRQ_to_SYS
        BL     RCCU_IRQHandler
        SYS_to_IRQ
@*******************************************************************************
@* Function Name  : RTCIRQHandler
@* Description    : This function used to switch to SYS mode before entering
@                   the RTC_IRQHandler function located in 71x_it.c.
@                   Then to return to IRQ mode after the
@                   RTC_IRQHandler function termination.
@* Input          : none

⌨️ 快捷键说明

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