;/* ; * File : context_iar.S ; * This file is part of RT-Thread RTOS ; * COPYRIGHT (C) 2009 - 2011, RT-Thread Development Team ; * ; * The license and distribution terms for this file may be ; * found in the file LICENSE in this distribution or at ; * http://www.rt-thread.org/license/LICENSE ; * ; * Change Logs: ; * Date Author Notes ; * 2009-01-17 Bernard first version ; * 2009-09-27 Bernard add protect when contex switch occurs ; */ #include "rtconfig.h" MODULE ?cstartup ;; ICODE is the same segment as cstartup. By placing __low_level_init ;; in the same segment, we make sure it can be reached with BL. */ SECTION CSTACK:DATA:NOROOT(3) SECTION .icode:CODE:NOROOT(2) IMPORT rt_hw_hard_fault IMPORT rt_hw_pend_sv IMPORT rt_hw_timer_handler #ifdef RT_USING_UART2 IMPORT MFS2RX_IRQHandler #endif PUBLIC __low_level_init PUBWEAK SystemInit_ExtMemCtl SECTION .text:CODE:REORDER(2) THUMB SystemInit_ExtMemCtl BX LR __low_level_init: ;; Initialize hardware. LDR R0, = SystemInit_ExtMemCtl ; initialize external memory controller MOV R11, LR BLX R0 LDR R1, =sfe(CSTACK) ; restore original stack pointer MSR MSP, R1 MOV R0,#1 ;; Return with BX to be independent of mode of caller BX R11 ;; Forward declaration of sections. SECTION .intvec:CODE:NOROOT(2) EXTERN __iar_program_start PUBLIC __vector_table DATA __vector_table DCD sfe(CSTACK) DCD __iar_program_start DCD NMI_Handler ; NMI Handler DCD rt_hw_hard_fault ; Hard Fault Handler DCD MemManage_Handler ; MPU Fault Handler DCD BusFault_Handler ; Bus Fault Handler DCD UsageFault_Handler ; Usage Fault Handler DCD 0 ; Reserved DCD 0 ; Reserved DCD 0 ; Reserved DCD 0 ; Reserved DCD SVC_Handler ; SVCall Handler DCD DebugMon_Handler ; Debug Monitor Handler DCD 0 ; Reserved DCD rt_hw_pend_sv ; PendSV Handler DCD rt_hw_timer_handler ; SysTick Handler ; External Interrupts DCD CSV_IRQHandler ; Clock Super Visor DCD SWDT_IRQHandler ; Software Watchdog Timer DCD LVD_IRQHandler ; Low Voltage Detector DCD WFG_IRQHandler ; Wave Form Generator DCD EXINT0_7_IRQHandler ; External Interrupt Request ch.0 to ch.7 DCD EXINT8_15_IRQHandler ; External Interrupt Request ch.8 to ch.15 DCD DTIM_QDU_IRQHandler ; Dual Timer / Quad Decoder DCD MFS0RX_IRQHandler ; MultiFunction Serial ch.0 DCD MFS0TX_IRQHandler ; MultiFunction Serial ch.0 DCD MFS1RX_IRQHandler ; MultiFunction Serial ch.1 DCD MFS1TX_IRQHandler ; MultiFunction Serial ch.1 #ifdef RT_USING_UART2 DCD MFS2RX_IRQHandler ; MultiFunction Serial ch.2 #else DCD NULL_IRQHandler ; MultiFunction Serial ch.2 #endif DCD MFS2TX_IRQHandler ; MultiFunction Serial ch.2 DCD MFS3RX_IRQHandler ; MultiFunction Serial ch.3 DCD MFS3TX_IRQHandler ; MultiFunction Serial ch.3 DCD MFS4RX_IRQHandler ; MultiFunction Serial ch.4 DCD MFS4TX_IRQHandler ; MultiFunction Serial ch.4 DCD MFS5RX_IRQHandler ; MultiFunction Serial ch.5 DCD MFS5TX_IRQHandler ; MultiFunction Serial ch.5 DCD MFS6RX_IRQHandler ; MultiFunction Serial ch.6 DCD MFS6TX_IRQHandler ; MultiFunction Serial ch.6 DCD MFS7RX_IRQHandler ; MultiFunction Serial ch.7 DCD MFS7TX_IRQHandler ; MultiFunction Serial ch.7 DCD PPG_IRQHandler ; PPG DCD OSC_PLL_WC_IRQHandler ; OSC / PLL / Watch Counter DCD ADC0_IRQHandler ; ADC0 DCD ADC1_IRQHandler ; ADC1 DCD ADC2_IRQHandler ; ADC2 DCD FRTIM_IRQHandler ; Free-run Timer DCD INCAP_IRQHandler ; Input Capture DCD OUTCOMP_IRQHandler ; Output Compare DCD BTIM_IRQHandler ; Base Timer ch.0 to ch.7 DCD CAN0_IRQHandler ; CAN ch.0 DCD CAN1_IRQHandler ; CAN ch.1 DCD USBF_IRQHandler ; USB Function DCD USBF_USBH_IRQHandler ; USB Function / USB HOST DCD RESERVED_1_IRQHandler ; Reserved_1 DCD RESERVED_2_IRQHandler ; Reserved_2 DCD DMAC0_IRQHandler ; DMAC ch.0 DCD DMAC1_IRQHandler ; DMAC ch.1 DCD DMAC2_IRQHandler ; DMAC ch.2 DCD DMAC3_IRQHandler ; DMAC ch.3 DCD DMAC4_IRQHandler ; DMAC ch.4 DCD DMAC5_IRQHandler ; DMAC ch.5 DCD DMAC6_IRQHandler ; DMAC ch.6 DCD DMAC7_IRQHandler ; DMAC ch.7 DCD RESERVED_3_IRQHandler ; Reserved_3 DCD RESERVED_4_IRQHandler ; Reserved_4 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;; Default interrupt handlers. ;; THUMB PUBWEAK NMI_Handler SECTION .text:CODE:REORDER(1) NMI_Handler B NMI_Handler PUBWEAK MemManage_Handler SECTION .text:CODE:REORDER(1) MemManage_Handler B MemManage_Handler PUBWEAK BusFault_Handler SECTION .text:CODE:REORDER(1) BusFault_Handler B BusFault_Handler PUBWEAK UsageFault_Handler SECTION .text:CODE:REORDER(1) UsageFault_Handler B UsageFault_Handler PUBWEAK SVC_Handler SECTION .text:CODE:REORDER(1) SVC_Handler B SVC_Handler PUBWEAK DebugMon_Handler SECTION .text:CODE:REORDER(1) DebugMon_Handler B DebugMon_Handler PUBWEAK CSV_IRQHandler SECTION .text:CODE:REORDER(1) CSV_IRQHandler B CSV_IRQHandler PUBWEAK SWDT_IRQHandler SECTION .text:CODE:REORDER(1) SWDT_IRQHandler B SWDT_IRQHandler PUBWEAK LVD_IRQHandler SECTION .text:CODE:REORDER(1) LVD_IRQHandler B LVD_IRQHandler PUBWEAK WFG_IRQHandler SECTION .text:CODE:REORDER(1) WFG_IRQHandler B WFG_IRQHandler PUBWEAK EXINT0_7_IRQHandler SECTION .text:CODE:REORDER(1) EXINT0_7_IRQHandler B EXINT0_7_IRQHandler PUBWEAK EXINT8_15_IRQHandler SECTION .text:CODE:REORDER(1) EXINT8_15_IRQHandler B EXINT8_15_IRQHandler PUBWEAK DTIM_QDU_IRQHandler SECTION .text:CODE:REORDER(1) DTIM_QDU_IRQHandler B DTIM_QDU_IRQHandler PUBWEAK MFS0RX_IRQHandler SECTION .text:CODE:REORDER(1) MFS0RX_IRQHandler B MFS0RX_IRQHandler PUBWEAK MFS0TX_IRQHandler SECTION .text:CODE:REORDER(1) MFS0TX_IRQHandler B MFS0TX_IRQHandler PUBWEAK MFS1RX_IRQHandler SECTION .text:CODE:REORDER(1) MFS1RX_IRQHandler B MFS1RX_IRQHandler PUBWEAK MFS1TX_IRQHandler SECTION .text:CODE:REORDER(1) MFS1TX_IRQHandler B MFS1TX_IRQHandler PUBWEAK NULL_IRQHandler SECTION .text:CODE:REORDER(1) NULL_IRQHandler B NULL_IRQHandler PUBWEAK MFS2TX_IRQHandler SECTION .text:CODE:REORDER(1) MFS2TX_IRQHandler B MFS2TX_IRQHandler PUBWEAK MFS3RX_IRQHandler SECTION .text:CODE:REORDER(1) MFS3RX_IRQHandler B MFS3RX_IRQHandler PUBWEAK MFS3TX_IRQHandler SECTION .text:CODE:REORDER(1) MFS3TX_IRQHandler B MFS3TX_IRQHandler PUBWEAK MFS4RX_IRQHandler SECTION .text:CODE:REORDER(1) MFS4RX_IRQHandler B MFS4RX_IRQHandler PUBWEAK MFS4TX_IRQHandler SECTION .text:CODE:REORDER(1) MFS4TX_IRQHandler B MFS4TX_IRQHandler PUBWEAK MFS5RX_IRQHandler SECTION .text:CODE:REORDER(1) MFS5RX_IRQHandler B MFS5RX_IRQHandler PUBWEAK MFS5TX_IRQHandler SECTION .text:CODE:REORDER(1) MFS5TX_IRQHandler B MFS5TX_IRQHandler PUBWEAK MFS6RX_IRQHandler SECTION .text:CODE:REORDER(1) MFS6RX_IRQHandler B MFS6RX_IRQHandler PUBWEAK MFS6TX_IRQHandler SECTION .text:CODE:REORDER(1) MFS6TX_IRQHandler B MFS6TX_IRQHandler PUBWEAK MFS7RX_IRQHandler SECTION .text:CODE:REORDER(1) MFS7RX_IRQHandler B MFS7RX_IRQHandler PUBWEAK MFS7TX_IRQHandler SECTION .text:CODE:REORDER(1) MFS7TX_IRQHandler B MFS7TX_IRQHandler PUBWEAK PPG_IRQHandler SECTION .text:CODE:REORDER(1) PPG_IRQHandler B PPG_IRQHandler PUBWEAK OSC_PLL_WC_IRQHandler SECTION .text:CODE:REORDER(1) OSC_PLL_WC_IRQHandler B OSC_PLL_WC_IRQHandler PUBWEAK ADC0_IRQHandler SECTION .text:CODE:REORDER(1) ADC0_IRQHandler B ADC0_IRQHandler PUBWEAK ADC1_IRQHandler SECTION .text:CODE:REORDER(1) ADC1_IRQHandler B ADC1_IRQHandler PUBWEAK ADC2_IRQHandler SECTION .text:CODE:REORDER(1) ADC2_IRQHandler B ADC2_IRQHandler PUBWEAK FRTIM_IRQHandler SECTION .text:CODE:REORDER(1) FRTIM_IRQHandler B FRTIM_IRQHandler PUBWEAK INCAP_IRQHandler SECTION .text:CODE:REORDER(1) INCAP_IRQHandler B INCAP_IRQHandler PUBWEAK OUTCOMP_IRQHandler SECTION .text:CODE:REORDER(1) OUTCOMP_IRQHandler B OUTCOMP_IRQHandler PUBWEAK BTIM_IRQHandler SECTION .text:CODE:REORDER(1) BTIM_IRQHandler B BTIM_IRQHandler PUBWEAK CAN0_IRQHandler SECTION .text:CODE:REORDER(1) CAN0_IRQHandler B CAN0_IRQHandler PUBWEAK CAN1_IRQHandler SECTION .text:CODE:REORDER(1) CAN1_IRQHandler B CAN1_IRQHandler PUBWEAK USBF_IRQHandler SECTION .text:CODE:REORDER(1) USBF_IRQHandler B USBF_IRQHandler PUBWEAK USBF_USBH_IRQHandler SECTION .text:CODE:REORDER(1) USBF_USBH_IRQHandler B USBF_USBH_IRQHandler PUBWEAK RESERVED_1_IRQHandler SECTION .text:CODE:REORDER(1) RESERVED_1_IRQHandler B RESERVED_1_IRQHandler PUBWEAK RESERVED_2_IRQHandler SECTION .text:CODE:REORDER(1) RESERVED_2_IRQHandler B RESERVED_2_IRQHandler PUBWEAK DMAC0_IRQHandler SECTION .text:CODE:REORDER(1) DMAC0_IRQHandler B DMAC0_IRQHandler PUBWEAK DMAC1_IRQHandler SECTION .text:CODE:REORDER(1) DMAC1_IRQHandler B DMAC1_IRQHandler PUBWEAK DMAC2_IRQHandler SECTION .text:CODE:REORDER(1) DMAC2_IRQHandler B DMAC2_IRQHandler PUBWEAK DMAC3_IRQHandler SECTION .text:CODE:REORDER(1) DMAC3_IRQHandler B DMAC3_IRQHandler PUBWEAK DMAC4_IRQHandler SECTION .text:CODE:REORDER(1) DMAC4_IRQHandler B DMAC4_IRQHandler PUBWEAK DMAC5_IRQHandler SECTION .text:CODE:REORDER(1) DMAC5_IRQHandler B DMAC5_IRQHandler PUBWEAK DMAC6_IRQHandler SECTION .text:CODE:REORDER(1) DMAC6_IRQHandler B DMAC6_IRQHandler PUBWEAK DMAC7_IRQHandler SECTION .text:CODE:REORDER(1) DMAC7_IRQHandler B DMAC7_IRQHandler PUBWEAK RESERVED_3_IRQHandler SECTION .text:CODE:REORDER(1) RESERVED_3_IRQHandler B RESERVED_3_IRQHandler PUBWEAK RESERVED_4_IRQHandler SECTION .text:CODE:REORDER(1) RESERVED_4_IRQHandler B RESERVED_4_IRQHandler END