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

📄 71x_vect.s79

📁 STR71x平台下实现ADC(数模转换)编程
💻 S79
字号:
;-----------------------------------------------------------------------------
; ?RESET
; 复位向量。通常INTVEC段被连接到0地址,为程序调试方便,也可以将其放在其它地址。
;-----------------------------------------------------------------------------
		MODULE	?RESET
		COMMON	INTVEC:CODE:NOROOT(2)
		EXTERN	__program_start	
		CODE32	

EIC_base_addr        DEFINE    0xFFFFF800; EIC 基地址
CICR_off_addr        DEFINE    0x04      ; 当前中断通道寄存器
IVR_off_addr         DEFINE    0x18      ; 中断向量寄存器
IPR_off_addr         DEFINE    0x40      ; 中断悬挂寄存器

;*******************************************************************************
;                           导入异常句柄
;*******************************************************************************
        IMPORT  Undefined_Handler
        IMPORT  SWI_Handler
        IMPORT  Prefetch_Handler
        IMPORT  Abort_Handler
        IMPORT  FIQ_Handler

;*******************************************************************************
;                   从71x_it.c文件导入IRQ异常句柄
;*******************************************************************************
        IMPORT  T0TIMI_IRQHandler  ;Timer0 IRQ中断句柄
                                   ;需要时可以在此加入其它IRQ中断句柄
;*******************************************************************************
;                        导出外设IRQ句柄表地址
;*******************************************************************************
        EXPORT  T0TIMI_Addr
        EXPORT  IRQHandler

;*******************************************************************************
;                                 异常向量
;*******************************************************************************
        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     __program_start
Undefined_Addr  DCD     UndefinedHandler
SWI_Addr        DCD     SWIHandler
Prefetch_Addr   DCD     PrefetchAbortHandler
Abort_Addr      DCD     DataAbortHandler
                DCD     0               ;保留向量
IRQ_Addr        DCD     IRQHandler
FIQ_Addr        DCD     FIQHandler

;*******************************************************************************
;                             外设IRQ句柄地址表
;*******************************************************************************

T0TIMI_Addr     DCD  T0TIMIIRQHandler
;需要时可以在此定义其它外设IRQ句柄地址,如:FLASH_Addr      DCD  FLASHIRQHandler


;*******************************************************************************
;                                  异常句柄
;*******************************************************************************

;*******************************************************************************
;说明:SaveContext宏,用于进入异常句柄之前保存上下文(context)
;入口:需要保存的寄存器范围
;出口:无
;*******************************************************************************
SaveContext MACRO reg1,reg2
        STMFD  sp!,{reg1-reg2,lr} ;将当前工作区和返回地址进栈保存
        MRS    r1,spsr            ;将spsr_mode保存到r1
        STMFD  sp!,{r1}           ;保存spsr
        ENDM

;*******************************************************************************
;说明:RestoreContext宏,用于恢复异常句柄上下文,使程序继续运行
;入口:需要恢复的寄存器范围
;出口:无
;*******************************************************************************
RestoreContext MACRO reg1,reg2
        LDMFD   sp!,{r1}            ;将保存的spsr_mode恢复到r1
        MSR     spsr_cxsf,r1        ;恢复spsr_mode.
        LDMFD   sp!,{reg1-reg2,pc}^ ;返回
        ENDM

;*******************************************************************************
;说明:UndefinedHandler函数,该函数在发生未定义指令异常时调用
;入口:无
;出口:无
;*******************************************************************************
UndefinedHandler
        SaveContext r0,r12          ;保存工作区和当前返回地址lr_und及spsr_und
        BL      Undefined_Handler   ;跳转到Undefined_Handler
        RestoreContext r0,r12       ;恢复上下文,返回

;*******************************************************************************
;说明:SWIHandler函数,该函数在执行SWI指令时调用
;入口:无
;出口:无
;*******************************************************************************
SWIHandler
        SaveContext r0,r12          ;保存工作区和当前返回地址lr_svc及spsr_svc
        BL       SWI_Handler        ;跳转到SWI_Handler.
        RestoreContext r0,r12       ;恢复上下文,返回

;*******************************************************************************
;说明:IRQHandler函数,该函数在进入IRQ异常时调用
;入口:无
;出口:无
;*******************************************************************************
IRQHandler
        SUB    lr,lr,#4             ;更新链接寄存器
        SaveContext r0,r12          ;保存工作区和当前返回地址lr_irq及spsr_irq
        LDR    lr, =ReturnAddress   ;读取返回地址
        LDR    r0, =EIC_base_addr
        LDR    r1, =IVR_off_addr
        ADD    pc,r0,r1             ;跳转到IRQ handler
ReturnAddress:
                                    ;清除EIC中的未决位(使用合适的IPRx)
        LDR    r0, =EIC_base_addr
        LDR    r2, [r0, #CICR_off_addr] ;获得IRQ通道号
        MOV    r3,#1
        MOV    r3,r3,LSL r2
        STR    r3,[r0, #IPR_off_addr]   ;清除相应的IPR位
        RestoreContext r0,r12           ;恢复上下文,返回

;*******************************************************************************
;说明:PrefetchAbortHandler函数,该函数在进入预取中止异常时调用
;入口:无
;出口:无
;*******************************************************************************
PrefetchAbortHandler
        SUB    lr,lr,#4              ;更新链接寄存器
        SaveContext r0,r12           ;保存工作区和当前返回地址lr_abt及spsr_abt
        BL     Prefetch_Handler      ;跳转到Prefetch_Handler.
        RestoreContext r0,r12        ;恢复上下文,返回

;*******************************************************************************
;说明:DataAbortHandler函数,该函数在进入数据中止异常时调用
;入口:无
;出口:无
;*******************************************************************************
DataAbortHandler
        SUB    lr,lr,#8              ;更新链接寄存器
        SaveContext r0,r12           ;保存工作区和当前返回地址lr_abt及spsr_abt
        BL     Abort_Handler         ;跳转到Abort_Handler.
        RestoreContext r0,r12        ;恢复上下文,返回

;*******************************************************************************
;说明:FIQHandler,该函数在进入FIQ异常时调用
;入口:无
;出口:无
;*******************************************************************************
FIQHandler
        SUB    lr,lr,#4              ;更新链接寄存器
        SaveContext r0,r7            ;保存工作区和当前返回地址lr_ fiq及spsr_fiq
        BL      FIQ_Handler          ;跳转到FIQ_Handler
        RestoreContext r0,r7         ;恢复上下文,返回

;*******************************************************************************
;说明:IRQ_to_SYS宏,用于从IRQ模式切换到SYS模式
;入口:无
;出口:无
;*******************************************************************************
IRQ_to_SYS MACRO
        MSR    cpsr_c,#0x1F          ;切换到SYS模式
        STMFD  sp!,{lr}              ;保存链接寄存器
       ENDM

;*******************************************************************************
;说明:SYS_to_IRQ宏,用于从SYS模式切换到IRQ模式,然后返回到IRQ句柄
;入口:无
;出口:无
;*******************************************************************************
SYS_to_IRQ MACRO
        LDMFD  sp!,{lr}             ;恢复链接寄存器
        MSR    cpsr_c,#0xD2         ;切换到IRQ模式
        MOV    pc,lr                ;返回到IRQHandler,清除未决位
       ENDM

;*******************************************************************************
;说明:T0TIMIIRQHandler函数,用于在进入由71x_it.c文件定义的T0TIMI_IRQHandler
;      函数之前切换到SYS模式,当T0TIMI_IRQHandler结束时再返回到IRQ模式
;入口:无
;出口:无
;*******************************************************************************
T0TIMIIRQHandler
        IRQ_to_SYS
        BL     T0TIMI_IRQHandler
        SYS_to_IRQ


;*******************************************************************************
;                       需要时在此定义其它函数
;*******************************************************************************
		
		LTORG
                ENDMOD
  END

⌨️ 快捷键说明

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