STR71x_vect.s
上传用户:yyyd609
上传日期:2022-07-18
资源大小:183k
文件大小:29k
源码类别:

微处理器开发

开发平台:

C/C++

  1. ;/*****************************************************************************/
  2. ;/* IRQ.S: IRQ Handler                                                        */
  3. ;/*****************************************************************************/
  4. ;/* This file is part of the uVision/ARM development tools.                   */
  5. ;/* Copyright (c) 2005-2006 Keil Software. All rights reserved.               */
  6. ;/* This software may only be used under the terms of a valid, current,       */
  7. ;/* end user licence from KEIL for a compatible version of KEIL software      */
  8. ;/* development tools. Nothing else gives you the right to use this software. */
  9. ;/*****************************************************************************/
  10. ; Enhanced Interrupt Controller (EIC) definitions
  11. EIC_BASE        EQU     0xFFFFF800      ; EIC Base Address
  12. CICR_OFS        EQU     0x04            ; Curr. Int. Channel R. Offset
  13. IVR_OFS         EQU     0x18            ; Interrupt Vector Reg. Offset
  14. IPR_OFS         EQU     0x40            ; Interrupt Pending Reg. Offset
  15.         AREA IRQ, CODE, READONLY 
  16.         ARM
  17.         PRESERVE8
  18.         ALIGN
  19.         EXPORT  IRQHandler
  20. IMPORT  Undefined_Handler
  21.         EXPORT  UndefHandler
  22. IMPORT  Prefetch_Handler
  23.         EXPORT  PAbtHandler
  24. IMPORT  Abort_Handler
  25.         EXPORT  DAbtHandler
  26. IMPORT  SWI_Handler
  27.         EXPORT  SWIHandler
  28. IMPORT  FIQ_Handler
  29.         EXPORT  FIQHandler
  30. IRQHandler
  31.         SUB     LR, LR, #4              ; Update Link Register
  32.         STMFD   SP!, {R0-R12, LR}       ; Save Workspace & LR to Stack
  33.         MRS     R0, SPSR                ; Copy SPSR to R0
  34.         STMFD   SP!, {R0, R1}           ; Save SPSR to Stack (8-byte)
  35.         LDR     LR, =ReturnAddress      ; Read Return Address
  36.         LDR     R0, =EIC_BASE
  37.         LDR     R1, =IVR_OFS
  38.         ADD     PC, R0, R1              ; Branch to IRQ Handler
  39. ReturnAddress
  40.         ; Clear pending bit in EIC (using the proper IPRx)
  41.         LDR     R0, =EIC_BASE
  42.         LDR     R2, [R0, #CICR_OFS]     ; Get the IRQ Channel Number
  43.         MOV     R3, #1
  44.         MOV     R3, R3, LSL R2
  45.         STR     R3, [R0, #IPR_OFS]      ; Clear corresponding IPR bit
  46.         LDMFD   SP!, {R0, R1}           ; Restore SPSR to R0
  47.         MSR     SPSR_cxsf, R0           ; Restore SPSR
  48.         LDMFD   SP!, {R0-R12, PC}^      ; Return to program
  49.          
  50. ;*******************************************************************************
  51. ;                   Import IRQ handlers from 71x_it.c
  52. ;*******************************************************************************
  53.         IMPORT  T0TIMI_IRQHandler
  54.         IMPORT  FLASH_IRQHandler
  55.         IMPORT  RCCU_IRQHandler
  56.         IMPORT  RTC_IRQHandler
  57.         IMPORT  WDG_IRQHandler
  58.         IMPORT  XTI_IRQHandler
  59.         IMPORT  USBHP_IRQHandler
  60.         IMPORT  I2C0ITERR_IRQHandler
  61.         IMPORT  I2C1ITERR_IRQHandler
  62.         IMPORT  UART0_IRQHandler
  63.         IMPORT  UART1_IRQHandler
  64.         IMPORT  UART2_IRQHandler
  65.         IMPORT  UART3_IRQHandler
  66.         IMPORT  BSPI0_IRQHandler
  67.         IMPORT  BSPI1_IRQHandler
  68.         IMPORT  I2C0_IRQHandler
  69.         IMPORT  I2C1_IRQHandler
  70.         IMPORT  CAN_IRQHandler
  71.         IMPORT  ADC12_IRQHandler
  72.         IMPORT  T1TIMI_IRQHandler
  73.         IMPORT  T2TIMI_IRQHandler
  74.         IMPORT  T3TIMI_IRQHandler
  75.         IMPORT  HDLC_IRQHandler
  76.         IMPORT  USBLP_IRQHandler
  77.         IMPORT  T0TOI_IRQHandler
  78.         IMPORT  T0OC1_IRQHandler
  79.         IMPORT  T0OC2_IRQHandler
  80. ;*******************************************************************************
  81. ;* Macro Name     : IRQ_to_SYS
  82. ;* Description    : This macro used to switch form IRQ mode to SYS mode
  83. ;* Input          : none.
  84. ;* Output         : none
  85. ;*******************************************************************************
  86.         MACRO
  87.                 IRQ_to_SYS
  88.                 MSR     CPSR_c, #0x1F   ; Switch to SYS Mode
  89.                 STMFD   SP!, {R0,LR}    ; Save Link Register (8-byte Stack)
  90.         MEND
  91. ;*******************************************************************************
  92. ;* Macro Name     : SYS_to_IRQ
  93. ;* Description    : This macro used to switch from SYS mode to IRQ mode
  94. ;                   then to return to IRQHnadler routine.
  95. ;* Input          : none.
  96. ;* Output         : none.
  97. ;*******************************************************************************
  98.         MACRO
  99.                 SYS_to_IRQ
  100.                 LDMFD   SP!, {R0,LR}    ; Restore Link Register (8-byte Stack)
  101.                 MSR     CPSR_c, #0xD2   ; Switch to IRQ Mode
  102.                 BX      LR              ; Return to IRQHandler routine to
  103.                                         ; clear the pending bit
  104.         MEND
  105. ;*******************************************************************************
  106. ;*******************************************************************************
  107. ;* Function Name  : T0TIMIIRQHandler
  108. ;* Description    : This function used to switch to SYS mode before entering
  109. ;                   the T0TIMI_IRQHandler function located in 71x_it.c.
  110. ;                   Then to return to IRQ mode after the
  111. ;                   T0TIMI_IRQHandler function termination.
  112. ;* Input          : none.
  113. ;* Output         : none.
  114. ;*******************************************************************************
  115.         EXPORT  T0TIMIIRQHandler
  116. T0TIMIIRQHandler
  117.                 IRQ_to_SYS
  118.                 BL  T0TIMI_IRQHandler
  119.                 SYS_to_IRQ
  120. ;*******************************************************************************
  121. ;* Function Name  : FLASHIRQHandler
  122. ;* Description    : This function used to switch to SYS mode before entering
  123. ;                   the FLASH_IRQHandler function located in 71x_it.c.
  124. ;                   Then to return to IRQ mode after the
  125. ;                   FLASH_IRQHandler function termination.
  126. ;* Input          : none
  127. ;* Output         : none
  128. ;*******************************************************************************
  129.         EXPORT  FLASHIRQHandler
  130. FLASHIRQHandler
  131.                 IRQ_to_SYS
  132.                 BL  FLASH_IRQHandler
  133.                 SYS_to_IRQ
  134. ;*******************************************************************************
  135. ;* Function Name  : RCCUIRQHandler
  136. ;* Description    : This function used to switch to SYS mode before entering
  137. ;                   the RCCU_IRQHandler function located in 71x_it.c.
  138. ;                   Then to return to IRQ mode after the
  139. ;                   RCCU_IRQHandler function termination.
  140. ;* Input          : none
  141. ;* Output         : none
  142. ;*******************************************************************************
  143.         EXPORT  RCCUIRQHandler
  144. RCCUIRQHandler
  145.                 IRQ_to_SYS
  146.                 BL  RCCU_IRQHandler
  147.                 SYS_to_IRQ
  148. ;*******************************************************************************
  149. ;* Function Name  : RTCIRQHandler
  150. ;* Description    : This function used to switch to SYS mode before entering
  151. ;                   the RTC_IRQHandler function located in 71x_it.c.
  152. ;                   Then to return to IRQ mode after the
  153. ;                   RTC_IRQHandler function termination.
  154. ;* Input          : none
  155. ;* Output         : none
  156. ;*******************************************************************************
  157.         EXPORT  RTCIRQHandler
  158. RTCIRQHandler
  159.                 IRQ_to_SYS
  160.                 BL  RTC_IRQHandler
  161.                 SYS_to_IRQ
  162. ;*******************************************************************************
  163. ;* Function Name  : WDGIRQHandler
  164. ;* Description    : This function used to switch to SYS mode before entering
  165. ;                   the WDG_IRQHandler function located in 71x_it.c.
  166. ;                   Then to return to IRQ mode after the
  167. ;                   WDG_IRQHandler function termination.
  168. ;* Input          : none
  169. ;* Output         : none
  170. ;*******************************************************************************
  171.         EXPORT  WDGIRQHandler
  172. WDGIRQHandler
  173.                 IRQ_to_SYS
  174.                 BL  WDG_IRQHandler
  175.                 SYS_to_IRQ
  176. ;*******************************************************************************
  177. ;* Function Name  : XTIIRQHandler
  178. ;* Description    : This function used to switch to SYS mode before entering
  179. ;                   the XTI_IRQHandler function located in 71x_it.c.
  180. ;                   Then to return to IRQ mode after the
  181. ;                   XTI_IRQHandler function termination.
  182. ;* Input          : none
  183. ;* Output         : none
  184. ;*******************************************************************************
  185.         EXPORT  XTIIRQHandler
  186. XTIIRQHandler
  187.                 IRQ_to_SYS
  188.                 BL  XTI_IRQHandler
  189.                 SYS_to_IRQ
  190. ;*******************************************************************************
  191. ;* Function Name  : USBHPIRQHandler
  192. ;* Description    : This function used to switch to SYS mode before entering
  193. ;                   the USBHP_IRQHandler function located in 71x_it.c.
  194. ;                   Then to return to IRQ mode after the
  195. ;                   USBHP_IRQHandler function termination.
  196. ;* Input          : none
  197. ;* Output         : none
  198. ;*******************************************************************************
  199.         EXPORT  USBHPIRQHandler
  200. USBHPIRQHandler
  201.                 IRQ_to_SYS
  202.                 BL  USBHP_IRQHandler
  203.                 SYS_to_IRQ
  204. ;*******************************************************************************
  205. ;* Function Name  : I2C0ITERRIRQHandler
  206. ;* Description    : This function used to switch to SYS mode before entering
  207. ;                   the I2C0ITERR_IRQHandler function located in 71x_it.c.
  208. ;                   Then to return to IRQ mode after the
  209. ;                   I2C0ITERR_IRQHandler function termination.
  210. ;* Input          : none
  211. ;* Output         : none
  212. ;*******************************************************************************
  213.         EXPORT  I2C0ITERRIRQHandler
  214. I2C0ITERRIRQHandler
  215.                 IRQ_to_SYS
  216.                 BL  I2C0ITERR_IRQHandler
  217.                 SYS_to_IRQ
  218. ;*******************************************************************************
  219. ;* Function Name  : I2C1ITERRIRQHandler
  220. ;* Description    : This function used to switch to SYS mode before entering
  221. ;                   the I2C1ITERR_IRQHandler function located in 71x_it.c.
  222. ;                   Then to return to IRQ mode after the
  223. ;                   I2C1ITERR_IRQHandler function termination.
  224. ;* Input          : none
  225. ;* Output         : none
  226. ;*******************************************************************************
  227.         EXPORT  I2C1ITERRIRQHandler
  228. I2C1ITERRIRQHandler
  229.                 IRQ_to_SYS
  230.                 BL  I2C1ITERR_IRQHandler
  231.                 SYS_to_IRQ
  232. ;*******************************************************************************
  233. ;* Function Name  : UART0IRQHandler
  234. ;* Description    : This function used to switch to SYS mode before entering
  235. ;                   the UART0_IRQHandler function located in 71x_it.c.
  236. ;                   Then to return to IRQ mode after the
  237. ;                   UART0_IRQHandler function termination.
  238. ;* Input          : none
  239. ;* Output         : none
  240. ;*******************************************************************************
  241.         EXPORT  UART0IRQHandler
  242. UART0IRQHandler
  243.                 IRQ_to_SYS
  244.                 BL  UART0_IRQHandler
  245.                 SYS_to_IRQ
  246. ;*******************************************************************************
  247. ;* Function Name  : UART1IRQHandler
  248. ;* Description    : This function used to switch to SYS mode before entering
  249. ;                   the UART1_IRQHandler function located in 71x_it.c.
  250. ;                   Then to return to IRQ mode after the
  251. ;                   UART1_IRQHandler function termination.
  252. ;* Input          : none
  253. ;* Output         : none
  254. ;*******************************************************************************
  255.         EXPORT  UART1IRQHandler
  256. UART1IRQHandler
  257.                 IRQ_to_SYS
  258.                 BL  UART1_IRQHandler
  259.                 SYS_to_IRQ
  260. ;*******************************************************************************
  261. ;* Function Name  : UART2IRQHandler
  262. ;* Description    : This function used to switch to SYS mode before entering
  263. ;                   the UART2_IRQHandler function located in 71x_it.c.
  264. ;                   Then to return to IRQ mode after the
  265. ;                   UART2_IRQHandler function termination.
  266. ;* Input          : none
  267. ;* Output         : none
  268. ;*******************************************************************************
  269.         EXPORT  UART2IRQHandler
  270. UART2IRQHandler
  271.                 IRQ_to_SYS
  272.                 BL  UART2_IRQHandler
  273.                 SYS_to_IRQ
  274. ;*******************************************************************************
  275. ;* Function Name  : UART3IRQHandler
  276. ;* Description    : This function used to switch to SYS mode before entering
  277. ;                   the UART3_IRQHandler function located in 71x_it.c.
  278. ;                   Then to return to IRQ mode after the
  279. ;                   UART3_IRQHandler function termination.
  280. ;* Input          : none
  281. ;* Output         : none
  282. ;*******************************************************************************
  283.         EXPORT  UART3IRQHandler
  284. UART3IRQHandler
  285.                 IRQ_to_SYS
  286.                 BL  UART3_IRQHandler
  287.                 SYS_to_IRQ
  288. ;*******************************************************************************
  289. ;* Function Name  : BSPI0IRQHandler
  290. ;* Description    : This function used to switch to SYS mode before entering
  291. ;                   the BSPI0_IRQHandler function located in 71x_it.c.
  292. ;                   Then to return to IRQ mode after the
  293. ;                   BSPI0_IRQHandler function termination.
  294. ;* Input          : none
  295. ;* Output         : none
  296. ;*******************************************************************************
  297.         EXPORT  BSPI0IRQHandler
  298. BSPI0IRQHandler
  299.                 IRQ_to_SYS
  300.                 BL  BSPI0_IRQHandler
  301.                 SYS_to_IRQ
  302. ;*******************************************************************************
  303. ;* Function Name  : BSPI1IRQHandler
  304. ;* Description    : This function used to switch to SYS mode before entering
  305. ;                   the BSPI1_IRQHandler function located in 71x_it.c.
  306. ;                   Then to return to IRQ mode after the
  307. ;                   BSPI1_IRQHandler function termination.
  308. ;* Input          : none
  309. ;* Output         : none
  310. ;*******************************************************************************
  311.         EXPORT  BSPI1IRQHandler
  312. BSPI1IRQHandler
  313.                 IRQ_to_SYS
  314.                 BL  BSPI1_IRQHandler
  315.                 SYS_to_IRQ
  316. ;*******************************************************************************
  317. ;* Function Name  : I2C0IRQHandler
  318. ;* Description    : This function used to switch to SYS mode before entering
  319. ;                   the I2C0_IRQHandler function located in 71x_it.c.
  320. ;                   Then to return to IRQ mode after the
  321. ;                   I2C0_IRQHandler function termination.
  322. ;* Input          : none
  323. ;* Output         : none
  324. ;*******************************************************************************
  325.         EXPORT  I2C0IRQHandler
  326. I2C0IRQHandler
  327.                 IRQ_to_SYS
  328.                 BL  I2C0_IRQHandler
  329.                 SYS_to_IRQ
  330. ;*******************************************************************************
  331. ;* Function Name  : I2C1IRQHandler
  332. ;* Description    : This function used to switch to SYS mode before entering
  333. ;                   the I2C1_IRQHandler function located in 71x_it.c.
  334. ;                   Then to return to IRQ mode after the
  335. ;                   I2C1_IRQHandler function termination.
  336. ;* Input          : none
  337. ;* Output         : none
  338. ;*******************************************************************************
  339.         EXPORT  I2C1IRQHandler
  340. I2C1IRQHandler
  341.                 IRQ_to_SYS
  342.                 BL  I2C1_IRQHandler
  343.                 SYS_to_IRQ
  344. ;*******************************************************************************
  345. ;* Function Name  : CANIRQHandler
  346. ;* Description    : This function used to switch to SYS mode before entering
  347. ;                   the CAN_IRQHandler function located in 71x_it.c.
  348. ;                   Then to return to IRQ mode after the
  349. ;                   CAN_IRQHandler function termination.
  350. ;* Input          : none
  351. ;* Output         : none
  352. ;*******************************************************************************
  353.         EXPORT  CANIRQHandler
  354. CANIRQHandler
  355.                 IRQ_to_SYS
  356.                 BL  CAN_IRQHandler
  357.                 SYS_to_IRQ
  358. ;*******************************************************************************
  359. ;* Function Name  : ADC12IRQHandler
  360. ;* Description    : This function used to switch to SYS mode before entering
  361. ;                   the ADC12_IRQHandler function located in 71x_it.c.
  362. ;                   Then to return to IRQ mode after the
  363. ;                   ADC12_IRQHandler function termination.
  364. ;* Input          : none
  365. ;* Output         : none
  366. ;*******************************************************************************
  367.         EXPORT  ADC12IRQHandler
  368. ADC12IRQHandler
  369.                 IRQ_to_SYS
  370.                 BL  ADC12_IRQHandler
  371.                 SYS_to_IRQ
  372. ;*******************************************************************************
  373. ;* Function Name  : T1TIMIIRQHandler
  374. ;* Description    : This function used to switch to SYS mode before entering
  375. ;                   the T1TIMI_IRQHandler function located in 71x_it.c.
  376. ;                   Then to return to IRQ mode after the
  377. ;                   T1TIMI_IRQHandler function termination.
  378. ;* Input          : none
  379. ;* Output         : none
  380. ;*******************************************************************************
  381.         EXPORT  T1TIMIIRQHandler
  382. T1TIMIIRQHandler
  383.                 IRQ_to_SYS
  384.                 BL  T1TIMI_IRQHandler
  385.                 SYS_to_IRQ
  386. ;*******************************************************************************
  387. ;* Function Name  : T2TIMIIRQHandler
  388. ;* Description    : This function used to switch to SYS mode before entering
  389. ;                   the T2TIMI_IRQHandler function located in 71x_it.c.
  390. ;                   Then to return to IRQ mode after the
  391. ;                   T2TIMI_IRQHandler function termination.
  392. ;* Input          : none
  393. ;* Output         : none
  394. ;*******************************************************************************
  395.         EXPORT  T2TIMIIRQHandler
  396. T2TIMIIRQHandler
  397.                 IRQ_to_SYS
  398.                 BL  T2TIMI_IRQHandler
  399.                 SYS_to_IRQ
  400. ;*******************************************************************************
  401. ;* Function Name  : T3TIMIIRQHandler
  402. ;* Description    : This function used to switch to SYS mode before entering
  403. ;                   the T3TIMI_IRQHandler function located in 71x_it.c.
  404. ;                   Then to return to IRQ mode after the
  405. ;                   T3TIMI_IRQHandler function termination.
  406. ;* Input          : none
  407. ;* Output         : none
  408. ;*******************************************************************************
  409.         EXPORT  T3TIMIIRQHandler
  410. T3TIMIIRQHandler
  411.                 IRQ_to_SYS
  412.                 BL  T3TIMI_IRQHandler
  413.                 SYS_to_IRQ
  414. ;*******************************************************************************
  415. ;* Function Name  : HDLCIRQHandler
  416. ;* Description    : This function used to switch to SYS mode before entering
  417. ;                   the HDLC_IRQHandler function located in 71x_it.c.
  418. ;                   Then to return to IRQ mode after the
  419. ;                   HDLC_IRQHandler function termination.
  420. ;* Input          : none
  421. ;* Output         : none
  422. ;*******************************************************************************
  423.         EXPORT  HDLCIRQHandler
  424. HDLCIRQHandler
  425.                 IRQ_to_SYS
  426.                 BL  HDLC_IRQHandler
  427.                 SYS_to_IRQ
  428. ;*******************************************************************************
  429. ;* Function Name  : USBLPIRQHandler
  430. ;* Description    : This function used to switch to SYS mode before entering
  431. ;                   the USBLP_IRQHandler function located in 71x_it.c.
  432. ;                   Then to return to IRQ mode after the
  433. ;                   USBLP_IRQHandler function termination.
  434. ;* Input          : none
  435. ;* Output         : none
  436. ;*******************************************************************************
  437.         EXPORT  USBLPIRQHandler
  438. USBLPIRQHandler
  439.                 IRQ_to_SYS
  440.                 BL  USBLP_IRQHandler
  441.                 SYS_to_IRQ
  442. ;*******************************************************************************
  443. ;* Function Name  : T0TOIIRQHandler
  444. ;* Description    : This function used to switch to SYS mode before entering
  445. ;                   the T0TOI_IRQHandler function located in 71x_it.c.
  446. ;                   Then to return to IRQ mode after the
  447. ;                   T0TOI_IRQHandler function termination.
  448. ;* Input          : none
  449. ;* Output         : none
  450. ;*******************************************************************************
  451.         EXPORT  T0TOIIRQHandler
  452. T0TOIIRQHandler
  453.                 IRQ_to_SYS
  454.                 BL  T0TOI_IRQHandler
  455.                 SYS_to_IRQ
  456. ;*******************************************************************************
  457. ;* Function Name  : T0OC1IRQHandler
  458. ;* Description    : This function used to switch to SYS mode before entering
  459. ;                   the T0OC1_IRQHandler function located in 71x_it.c.
  460. ;                   Then to return to IRQ mode after the
  461. ;                   T0OC1_IRQHandler function termination.
  462. ;* Input          : none
  463. ;* Output         : none
  464. ;*******************************************************************************
  465.         EXPORT  T0OC1IRQHandler
  466. T0OC1IRQHandler
  467.                 IRQ_to_SYS
  468.                 BL  T0OC1_IRQHandler
  469.                 SYS_to_IRQ
  470. ;*******************************************************************************
  471. ;* Function Name  : T0OC2IRQHandler
  472. ;* Description    : This function used to switch to SYS mode before entering
  473. ;                   the T0OC2_IRQHandler function located in 71x_it.c.
  474. ;                   Then to return to IRQ mode after the
  475. ;                   T0OC2_IRQHandler function termination.
  476. ;* Input          : none
  477. ;* Output         : none
  478. ;*******************************************************************************
  479.         EXPORT  T0OC2IRQHandler
  480. T0OC2IRQHandler
  481.                 IRQ_to_SYS
  482.                 BL  T0OC2_IRQHandler
  483.                 SYS_to_IRQ
  484.             ;        END
  485. ;/*****************************************************************************/
  486. ;/*  Undefined Handler                                                */
  487. ;/*****************************************************************************/
  488. ;/* This file is part of the uVision/ARM development tools.                   */
  489. ;/* Copyright (c) 2005-2006 Keil Software. All rights reserved.               */
  490. ;/* This software may only be used under the terms of a valid, current,       */
  491. ;/* end user licence from KEIL for a compatible version of KEIL software      */
  492. ;/* development tools. Nothing else gives you the right to use this software. */
  493. ;/*****************************************************************************/
  494. UndefHandler
  495.         STMFD   SP!, {R0-R12, LR}       ; Save Workspace & LR to Stack
  496.         MRS     R0, SPSR                ; Copy SPSR to R0
  497.         STMFD   SP!, {R0, R1}           ; Save SPSR to Stack (8-byte)
  498.         BL      Undefined_Handler       ; Branch to Undefined Handler
  499.         LDMFD   SP!, {R0, R1}           ; Restore SPSR to R0
  500.         MSR     SPSR_cxsf, R0           ; Restore SPSR
  501.         LDMFD   SP!, {R0-R12, PC}^      ; Return to program after
  502.                                         ; Undefined Instruction   
  503. ;/*****************************************************************************/
  504. ;/* FIQ.S: FIQ Handler                                                        */
  505. ;/*****************************************************************************/
  506. ;/* This file is part of the uVision/ARM development tools.                   */
  507. ;/* Copyright (c) 2005-2006 Keil Software. All rights reserved.               */
  508. ;/* This software may only be used under the terms of a valid, current,       */
  509. ;/* end user licence from KEIL for a compatible version of KEIL software      */
  510. ;/* development tools. Nothing else gives you the right to use this software. */
  511. ;/*****************************************************************************/
  512. FIQHandler
  513.         SUB     LR, LR, #4              ; Update Link Register
  514.         STMFD   SP!, {R0-R7, LR}        ; Save Workspace & LR to Stack
  515.         MRS     R0, SPSR                ; Copy SPSR to R0
  516.         STMFD   SP!, {R0}               ; Save SPSR to Stack (8-byte)
  517.         BL      FIQ_Handler             ; Branch to FIQ Handler
  518.         LDMFD   SP!, {R0}               ; Restore SPSR to R0
  519.         MSR     SPSR_cxsf, R0           ; Restore SPSR
  520.         LDMFD   SP!, {R0-R7, PC}^       ; Return to program after
  521.                                         ; Data Abort Instruction
  522. ;/*****************************************************************************/
  523. ;/* SWI.S: SWI Handler                                                        */
  524. ;/*****************************************************************************/
  525. ;/* This file is part of the uVision/ARM development tools.                   */
  526. ;/* Copyright (c) 2005-2006 Keil Software. All rights reserved.               */
  527. ;/* This software may only be used under the terms of a valid, current,       */
  528. ;/* end user licence from KEIL for a compatible version of KEIL software      */
  529. ;/* development tools. Nothing else gives you the right to use this software. */
  530. ;/*****************************************************************************/
  531. SWIHandler
  532.         STMFD   SP!, {R0-R12, LR}       ; Save Workspace & LR to Stack
  533.         MRS     R0, SPSR                ; Copy SPSR to R0
  534.         STMFD   SP!, {R0, R1}           ; Save SPSR to Stack (8-byte)
  535.         BL      SWI_Handler             ; Branch to SWI Handler
  536.         LDMFD   SP!, {R0, R1}           ; Restore SPSR to R0
  537.         MSR     SPSR_cxsf, R0           ; Restore SPSR
  538.         LDMFD   SP!, {R0-R12, PC}^      ; Return to program after
  539.                                         ; SWI Instruction
  540. ;/*****************************************************************************/
  541. ;/* This file is part of the uVision/ARM development tools.                   */
  542. ;/* Copyright (c) 2005-2006 Keil Software. All rights reserved.               */
  543. ;/* This software may only be used under the terms of a valid, current,       */
  544. ;/* end user licence from KEIL for a compatible version of KEIL software      */
  545. ;/* development tools. Nothing else gives you the right to use this software. */
  546. ;/*****************************************************************************/
  547. DAbtHandler
  548.         SUB     LR, LR, #8              ; Update Link Register
  549.         STMFD   SP!, {R0-R12, LR}       ; Save Workspace & LR to Stack
  550.         MRS     R0, SPSR                ; Copy SPSR to R0
  551.         STMFD   SP!, {R0, R1}           ; Save SPSR to Stack (8-byte)
  552.         BL      Abort_Handler           ; Branch to Data Abort Handler
  553.         LDMFD   SP!, {R0, R1}           ; Restore SPSR to R0
  554.         MSR     SPSR_cxsf, R0           ; Restore SPSR
  555.         LDMFD   SP!, {R0-R12, PC}^      ; Return to program after
  556.                                         ; Data Abort Instruction
  557. ;/*****************************************************************************/
  558. ;/* PABT.S: Prefetch Abort Handler                                            */
  559. ;/*****************************************************************************/
  560. ;/* This file is part of the uVision/ARM development tools.                   */
  561. ;/* Copyright (c) 2005-2006 Keil Software. All rights reserved.               */
  562. ;/* This software may only be used under the terms of a valid, current,       */
  563. ;/* end user licence from KEIL for a compatible version of KEIL software      */
  564. ;/* development tools. Nothing else gives you the right to use this software. */
  565. ;/*****************************************************************************/
  566. PAbtHandler
  567.         SUB     LR, LR, #4              ; Update Link Register
  568.         STMFD   SP!, {R0-R12, LR}       ; Save Workspace & LR to Stack
  569.         MRS     R0, SPSR                ; Copy SPSR to R0
  570.         STMFD   SP!, {R0, R1}           ; Save SPSR to Stack (8-byte)
  571.         BL      Prefetch_Handler        ; Branch to Prefetch Abort Handler
  572.         LDMFD   SP!, {R0, R1}           ; Restore SPSR to R0
  573.         MSR     SPSR_cxsf, R0           ; Restore SPSR
  574.         LDMFD   SP!, {R0-R12, PC}^      ; Return to program after
  575.                                         ; Prefetch Abort Instruction
  576.       
  577. ;*******************************************************************************
  578.         END