302 lines
		
	
	
		
			8.4 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
		
		
			
		
	
	
			302 lines
		
	
	
		
			8.4 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								 * Licensed to the Apache Software Foundation (ASF) under one
							 | 
						||
| 
								 | 
							
								 * or more contributor license agreements.  See the NOTICE file
							 | 
						||
| 
								 | 
							
								 * distributed with this work for additional information
							 | 
						||
| 
								 | 
							
								 * regarding copyright ownership.  The ASF licenses this file
							 | 
						||
| 
								 | 
							
								 * to you under the Apache License, Version 2.0 (the
							 | 
						||
| 
								 | 
							
								 * "License"); you may not use this file except in compliance
							 | 
						||
| 
								 | 
							
								 * with the License.  You may obtain a copy of the License at
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 *  http://www.apache.org/licenses/LICENSE-2.0
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * Unless required by applicable law or agreed to in writing,
							 | 
						||
| 
								 | 
							
								 * software distributed under the License is distributed on an
							 | 
						||
| 
								 | 
							
								 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
							 | 
						||
| 
								 | 
							
								 * KIND, either express or implied.  See the License for the
							 | 
						||
| 
								 | 
							
								 * specific language governing permissions and limitations
							 | 
						||
| 
								 | 
							
								 * under the License.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								 #include "syscfg/syscfg.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    .syntax unified
							 | 
						||
| 
								 | 
							
								    .arch   armv7-m
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    .section .stack
							 | 
						||
| 
								 | 
							
								    .align  3
							 | 
						||
| 
								 | 
							
								#ifdef __STACK_SIZE
							 | 
						||
| 
								 | 
							
								    .equ    Stack_Size, __STACK_SIZE
							 | 
						||
| 
								 | 
							
								#else
							 | 
						||
| 
								 | 
							
								    .equ    Stack_Size, 0xC00
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								    .equ    SYS_CTRL_REG,       0x50000024
							 | 
						||
| 
								 | 
							
								    .equ    CACHE_FLASH_REG,    0x100C0040
							 | 
						||
| 
								 | 
							
								    .equ    RESET_STAT_REG,     0x500000BC
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    .globl  __StackTop
							 | 
						||
| 
								 | 
							
								    .globl  __StackLimit
							 | 
						||
| 
								 | 
							
								__StackLimit:
							 | 
						||
| 
								 | 
							
								    .space  Stack_Size
							 | 
						||
| 
								 | 
							
								    .size   __StackLimit, . - __StackLimit
							 | 
						||
| 
								 | 
							
								__StackTop:
							 | 
						||
| 
								 | 
							
								    .size   __StackTop, . - __StackTop
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    .section .heap
							 | 
						||
| 
								 | 
							
								    .align  3
							 | 
						||
| 
								 | 
							
								#ifdef __HEAP_SIZE
							 | 
						||
| 
								 | 
							
								    .equ    Heap_Size, __HEAP_SIZE
							 | 
						||
| 
								 | 
							
								#else
							 | 
						||
| 
								 | 
							
								    .equ    Heap_Size, 0
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								    .globl  __HeapBase
							 | 
						||
| 
								 | 
							
								    .globl  __HeapLimit
							 | 
						||
| 
								 | 
							
								__HeapBase:
							 | 
						||
| 
								 | 
							
								    .if     Heap_Size
							 | 
						||
| 
								 | 
							
								    .space  Heap_Size
							 | 
						||
| 
								 | 
							
								    .endif
							 | 
						||
| 
								 | 
							
								    .size   __HeapBase, . - __HeapBase
							 | 
						||
| 
								 | 
							
								__HeapLimit:
							 | 
						||
| 
								 | 
							
								    .size   __HeapLimit, . - __HeapLimit
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    .section .isr_vector
							 | 
						||
| 
								 | 
							
								    .align 2
							 | 
						||
| 
								 | 
							
								    .globl  __isr_vector
							 | 
						||
| 
								 | 
							
								__isr_vector:
							 | 
						||
| 
								 | 
							
								    .long   __StackTop
							 | 
						||
| 
								 | 
							
								    .long   Reset_Handler
							 | 
						||
| 
								 | 
							
								    /* Cortex-M33 interrupts */
							 | 
						||
| 
								 | 
							
								    .long   NMI_Handler
							 | 
						||
| 
								 | 
							
								    .long   HardFault_Handler
							 | 
						||
| 
								 | 
							
								    .long   MemoryManagement_Handler
							 | 
						||
| 
								 | 
							
								    .long   BusFault_Handler
							 | 
						||
| 
								 | 
							
								    .long   UsageFault_Handler
							 | 
						||
| 
								 | 
							
								    .long   SecureFault_Handler
							 | 
						||
| 
								 | 
							
								    .long   0                       /* Reserved */
							 | 
						||
| 
								 | 
							
								    .long   0                       /* Reserved */
							 | 
						||
| 
								 | 
							
								    .long   0                       /* Reserved */
							 | 
						||
| 
								 | 
							
								    .long   SVC_Handler
							 | 
						||
| 
								 | 
							
								    .long   DebugMonitor_Handler
							 | 
						||
| 
								 | 
							
								    .long   0                       /* Reserved */
							 | 
						||
| 
								 | 
							
								    .long   PendSV_Handler
							 | 
						||
| 
								 | 
							
								    .long   SysTick_Handler
							 | 
						||
| 
								 | 
							
								    /* DA1469x interrupts */
							 | 
						||
| 
								 | 
							
								    .long   SENSOR_NODE_IRQHandler
							 | 
						||
| 
								 | 
							
								    .long   DMA_IRQHandler
							 | 
						||
| 
								 | 
							
								    .long   CHARGER_STATE_IRQHandler
							 | 
						||
| 
								 | 
							
								    .long   CHARGER_ERROR_IRQHandler
							 | 
						||
| 
								 | 
							
								    .long   CMAC2SYS_IRQHandler
							 | 
						||
| 
								 | 
							
								    .long   UART_IRQHandler
							 | 
						||
| 
								 | 
							
								    .long   UART2_IRQHandler
							 | 
						||
| 
								 | 
							
								    .long   UART3_IRQHandler
							 | 
						||
| 
								 | 
							
								    .long   I2C_IRQHandler
							 | 
						||
| 
								 | 
							
								    .long   I2C2_IRQHandler
							 | 
						||
| 
								 | 
							
								    .long   SPI_IRQHandler
							 | 
						||
| 
								 | 
							
								    .long   SPI2_IRQHandler
							 | 
						||
| 
								 | 
							
								    .long   PCM_IRQHandler
							 | 
						||
| 
								 | 
							
								    .long   SRC_IN_IRQHandler
							 | 
						||
| 
								 | 
							
								    .long   SRC_OUT_IRQHandler
							 | 
						||
| 
								 | 
							
								    .long   USB_IRQHandler
							 | 
						||
| 
								 | 
							
								    .long   TIMER_IRQHandler
							 | 
						||
| 
								 | 
							
								    .long   TIMER2_IRQHandler
							 | 
						||
| 
								 | 
							
								    .long   RTC_IRQHandler
							 | 
						||
| 
								 | 
							
								    .long   KEY_WKUP_GPIO_IRQHandler
							 | 
						||
| 
								 | 
							
								    .long   PDC_IRQHandler
							 | 
						||
| 
								 | 
							
								    .long   VBUS_IRQHandler
							 | 
						||
| 
								 | 
							
								    .long   MRM_IRQHandler
							 | 
						||
| 
								 | 
							
								    .long   MOTOR_CONTROLLER_IRQHandler
							 | 
						||
| 
								 | 
							
								    .long   TRNG_IRQHandler
							 | 
						||
| 
								 | 
							
								    .long   DCDC_IRQHandler
							 | 
						||
| 
								 | 
							
								    .long   XTAL32M_RDY_IRQHandler
							 | 
						||
| 
								 | 
							
								    .long   ADC_IRQHandler
							 | 
						||
| 
								 | 
							
								    .long   ADC2_IRQHandler
							 | 
						||
| 
								 | 
							
								    .long   CRYPTO_IRQHandler
							 | 
						||
| 
								 | 
							
								    .long   CAPTIMER1_IRQHandler
							 | 
						||
| 
								 | 
							
								    .long   RFDIAG_IRQHandler
							 | 
						||
| 
								 | 
							
								    .long   LCD_CONTROLLER_IRQHandler
							 | 
						||
| 
								 | 
							
								    .long   PLL_LOCK_IRQHandler
							 | 
						||
| 
								 | 
							
								    .long   TIMER3_IRQHandler
							 | 
						||
| 
								 | 
							
								    .long   TIMER4_IRQHandler
							 | 
						||
| 
								 | 
							
								    .long   LRA_IRQHandler
							 | 
						||
| 
								 | 
							
								    .long   RTC_EVENT_IRQHandler
							 | 
						||
| 
								 | 
							
								    .long   GPIO_P0_IRQHandler
							 | 
						||
| 
								 | 
							
								    .long   GPIO_P1_IRQHandler
							 | 
						||
| 
								 | 
							
								    .long   0                       /* Reserved */
							 | 
						||
| 
								 | 
							
								    .long   0                       /* Reserved */
							 | 
						||
| 
								 | 
							
								    .long   0                       /* Reserved */
							 | 
						||
| 
								 | 
							
								    .long   0                       /* Reserved */
							 | 
						||
| 
								 | 
							
								    .long   0                       /* Reserved */
							 | 
						||
| 
								 | 
							
								    .long   0                       /* Reserved */
							 | 
						||
| 
								 | 
							
								    .long   0                       /* Reserved */
							 | 
						||
| 
								 | 
							
								    .long   0                       /* Reserved */
							 | 
						||
| 
								 | 
							
								    .size   __isr_vector, . - __isr_vector
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    .text
							 | 
						||
| 
								 | 
							
								    .thumb
							 | 
						||
| 
								 | 
							
								    .thumb_func
							 | 
						||
| 
								 | 
							
								    .align 2
							 | 
						||
| 
								 | 
							
								    .globl Reset_Handler
							 | 
						||
| 
								 | 
							
								    .type  Reset_Handler, %function
							 | 
						||
| 
								 | 
							
								Reset_Handler:
							 | 
						||
| 
								 | 
							
								 /* Make sure interrupt vector is remapped at 0x0 */
							 | 
						||
| 
								 | 
							
								    ldr     r1, =SYS_CTRL_REG
							 | 
						||
| 
								 | 
							
								    ldrh    r2, [r1, #0]
							 | 
						||
| 
								 | 
							
								    orrs    r2, r2, #8
							 | 
						||
| 
								 | 
							
								    strh    r2, [r1, #0]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if !MYNEWT_VAL(RAM_RESIDENT)
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								 * Flash is remapped at 0x0 with an offset, i.e. 0x0 does not correspond to
							 | 
						||
| 
								 | 
							
								 * 0x16000000 but to start of an image on flash. This is calculated from product
							 | 
						||
| 
								 | 
							
								 * header by 1st state bootloader and configured in CACHE_FLASH_REG. We need to
							 | 
						||
| 
								 | 
							
								 * retrieve proper offset value for calculations later.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								    ldr     r1, =CACHE_FLASH_REG
							 | 
						||
| 
								 | 
							
								    ldr     r4, [r1, #0]
							 | 
						||
| 
								 | 
							
								    mov     r2, r4
							 | 
						||
| 
								 | 
							
								    mov     r3, #0xFFFF
							 | 
						||
| 
								 | 
							
								    bic     r4, r4, r3      /* CACHE_FLASH_REG[FLASH_REGION_BASE] */
							 | 
						||
| 
								 | 
							
								    mov     r3, #0xFFF0
							 | 
						||
| 
								 | 
							
								    and     r2, r2, r3      /* CACHE_FLASH_REG[FLASH_REGION_OFFSET] */
							 | 
						||
| 
								 | 
							
								    lsr     r2, r2, #2
							 | 
						||
| 
								 | 
							
								    orr     r4, r4, r2
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* Copy ISR vector from flash to RAM */
							 | 
						||
| 
								 | 
							
								    ldr     r1, =__isr_vector_start     /* src ptr */
							 | 
						||
| 
								 | 
							
								    ldr     r2, =__isr_vector_end       /* src end */
							 | 
						||
| 
								 | 
							
								    ldr     r3, =__intvect_start__      /* dst ptr */
							 | 
						||
| 
								 | 
							
								/* Make sure we copy from QSPIC address range, not from remapped range */
							 | 
						||
| 
								 | 
							
								    cmp     r1, r4
							 | 
						||
| 
								 | 
							
								    itt     lt
							 | 
						||
| 
								 | 
							
								    addlt   r1, r1, r4
							 | 
						||
| 
								 | 
							
								    addlt   r2, r2, r4
							 | 
						||
| 
								 | 
							
								.loop_isr_copy:
							 | 
						||
| 
								 | 
							
								    cmp     r1, r2
							 | 
						||
| 
								 | 
							
								    ittt    lt
							 | 
						||
| 
								 | 
							
								    ldrlt   r0, [r1], #4
							 | 
						||
| 
								 | 
							
								    strlt   r0, [r3], #4
							 | 
						||
| 
								 | 
							
								    blt     .loop_isr_copy
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* Copy QSPI code from flash to RAM */
							 | 
						||
| 
								 | 
							
								    ldr     r1, =__text_ram_addr        /* src ptr */
							 | 
						||
| 
								 | 
							
								    ldr     r2, =__text_ram_start__     /* ptr */
							 | 
						||
| 
								 | 
							
								    ldr     r3, =__text_ram_end__       /* dst end */
							 | 
						||
| 
								 | 
							
								.loop_code_text_ram_copy:
							 | 
						||
| 
								 | 
							
								    cmp     r2, r3
							 | 
						||
| 
								 | 
							
								    ittt    lt
							 | 
						||
| 
								 | 
							
								    ldrlt   r0, [r1], #4
							 | 
						||
| 
								 | 
							
								    strlt   r0, [r2], #4
							 | 
						||
| 
								 | 
							
								    blt     .loop_code_text_ram_copy
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* Copy data from flash to RAM */
							 | 
						||
| 
								 | 
							
								    ldr     r1, =__etext                /* src ptr */
							 | 
						||
| 
								 | 
							
								    ldr     r2, =__data_start__         /* dst ptr */
							 | 
						||
| 
								 | 
							
								    ldr     r3, =__data_end__           /* dst end */
							 | 
						||
| 
								 | 
							
								.loop_data_copy:
							 | 
						||
| 
								 | 
							
								    cmp     r2, r3
							 | 
						||
| 
								 | 
							
								    ittt    lt
							 | 
						||
| 
								 | 
							
								    ldrlt   r0, [r1], #4
							 | 
						||
| 
								 | 
							
								    strlt   r0, [r2], #4
							 | 
						||
| 
								 | 
							
								    blt     .loop_data_copy
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* Clear BSS */
							 | 
						||
| 
								 | 
							
								    movs    r0, 0
							 | 
						||
| 
								 | 
							
								    ldr     r1, =__bss_start__
							 | 
						||
| 
								 | 
							
								    ldr     r2, =__bss_end__
							 | 
						||
| 
								 | 
							
								.loop_bss_clear:
							 | 
						||
| 
								 | 
							
								    cmp     r1, r2
							 | 
						||
| 
								 | 
							
								    itt     lt
							 | 
						||
| 
								 | 
							
								    strlt   r0, [r1], #4
							 | 
						||
| 
								 | 
							
								    blt     .loop_bss_clear
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    ldr     r0, =__HeapBase
							 | 
						||
| 
								 | 
							
								    ldr     r1, =__HeapLimit
							 | 
						||
| 
								 | 
							
								/* Call static constructors */
							 | 
						||
| 
								 | 
							
								    bl __libc_init_array
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    bl      SystemInit
							 | 
						||
| 
								 | 
							
								    bl      main
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    .pool
							 | 
						||
| 
								 | 
							
								    .size   Reset_Handler, . - Reset_Handler
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* Default interrupt handler */
							 | 
						||
| 
								 | 
							
								    .type   Default_Handler, %function
							 | 
						||
| 
								 | 
							
								Default_Handler:
							 | 
						||
| 
								 | 
							
								    ldr     r1, =SYS_CTRL_REG
							 | 
						||
| 
								 | 
							
								    ldrh    r2, [r1, #0]
							 | 
						||
| 
								 | 
							
								    orrs    r2, r2, #0x80   /* DEBUGGER_ENABLE */
							 | 
						||
| 
								 | 
							
								    strh    r2, [r1, #0]
							 | 
						||
| 
								 | 
							
								    b       .
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    .size   Default_Handler, . - Default_Handler
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* Default handlers for all interrupts */
							 | 
						||
| 
								 | 
							
								    .macro  IRQ handler
							 | 
						||
| 
								 | 
							
								    .weak   \handler
							 | 
						||
| 
								 | 
							
								    .set    \handler, Default_Handler
							 | 
						||
| 
								 | 
							
								    .endm
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* Cortex-M33 interrupts */
							 | 
						||
| 
								 | 
							
								    IRQ  NMI_Handler
							 | 
						||
| 
								 | 
							
								    IRQ  HardFault_Handler
							 | 
						||
| 
								 | 
							
								    IRQ  MemoryManagement_Handler
							 | 
						||
| 
								 | 
							
								    IRQ  BusFault_Handler
							 | 
						||
| 
								 | 
							
								    IRQ  UsageFault_Handler
							 | 
						||
| 
								 | 
							
								    IRQ  SecureFault_Handler
							 | 
						||
| 
								 | 
							
								    IRQ  SVC_Handler
							 | 
						||
| 
								 | 
							
								    IRQ  DebugMonitor_Handler
							 | 
						||
| 
								 | 
							
								    IRQ  PendSV_Handler
							 | 
						||
| 
								 | 
							
								    IRQ  SysTick_Handler
							 | 
						||
| 
								 | 
							
								    /* DA1469x interrupts */
							 | 
						||
| 
								 | 
							
								    IRQ  SENSOR_NODE_IRQHandler
							 | 
						||
| 
								 | 
							
								    IRQ  DMA_IRQHandler
							 | 
						||
| 
								 | 
							
								    IRQ  CHARGER_STATE_IRQHandler
							 | 
						||
| 
								 | 
							
								    IRQ  CHARGER_ERROR_IRQHandler
							 | 
						||
| 
								 | 
							
								    IRQ  CMAC2SYS_IRQHandler
							 | 
						||
| 
								 | 
							
								    IRQ  UART_IRQHandler
							 | 
						||
| 
								 | 
							
								    IRQ  UART2_IRQHandler
							 | 
						||
| 
								 | 
							
								    IRQ  UART3_IRQHandler
							 | 
						||
| 
								 | 
							
								    IRQ  I2C_IRQHandler
							 | 
						||
| 
								 | 
							
								    IRQ  I2C2_IRQHandler
							 | 
						||
| 
								 | 
							
								    IRQ  SPI_IRQHandler
							 | 
						||
| 
								 | 
							
								    IRQ  SPI2_IRQHandler
							 | 
						||
| 
								 | 
							
								    IRQ  PCM_IRQHandler
							 | 
						||
| 
								 | 
							
								    IRQ  SRC_IN_IRQHandler
							 | 
						||
| 
								 | 
							
								    IRQ  SRC_OUT_IRQHandler
							 | 
						||
| 
								 | 
							
								    IRQ  USB_IRQHandler
							 | 
						||
| 
								 | 
							
								    IRQ  TIMER_IRQHandler
							 | 
						||
| 
								 | 
							
								    IRQ  TIMER2_IRQHandler
							 | 
						||
| 
								 | 
							
								    IRQ  RTC_IRQHandler
							 | 
						||
| 
								 | 
							
								    IRQ  KEY_WKUP_GPIO_IRQHandler
							 | 
						||
| 
								 | 
							
								    IRQ  PDC_IRQHandler
							 | 
						||
| 
								 | 
							
								    IRQ  VBUS_IRQHandler
							 | 
						||
| 
								 | 
							
								    IRQ  MRM_IRQHandler
							 | 
						||
| 
								 | 
							
								    IRQ  MOTOR_CONTROLLER_IRQHandler
							 | 
						||
| 
								 | 
							
								    IRQ  TRNG_IRQHandler
							 | 
						||
| 
								 | 
							
								    IRQ  DCDC_IRQHandler
							 | 
						||
| 
								 | 
							
								    IRQ  XTAL32M_RDY_IRQHandler
							 | 
						||
| 
								 | 
							
								    IRQ  ADC_IRQHandler
							 | 
						||
| 
								 | 
							
								    IRQ  ADC2_IRQHandler
							 | 
						||
| 
								 | 
							
								    IRQ  CRYPTO_IRQHandler
							 | 
						||
| 
								 | 
							
								    IRQ  CAPTIMER1_IRQHandler
							 | 
						||
| 
								 | 
							
								    IRQ  RFDIAG_IRQHandler
							 | 
						||
| 
								 | 
							
								    IRQ  LCD_CONTROLLER_IRQHandler
							 | 
						||
| 
								 | 
							
								    IRQ  PLL_LOCK_IRQHandler
							 | 
						||
| 
								 | 
							
								    IRQ  TIMER3_IRQHandler
							 | 
						||
| 
								 | 
							
								    IRQ  TIMER4_IRQHandler
							 | 
						||
| 
								 | 
							
								    IRQ  LRA_IRQHandler
							 | 
						||
| 
								 | 
							
								    IRQ  RTC_EVENT_IRQHandler
							 | 
						||
| 
								 | 
							
								    IRQ  GPIO_P0_IRQHandler
							 | 
						||
| 
								 | 
							
								    IRQ  GPIO_P1_IRQHandler
							 | 
						||
| 
								 | 
							
								    IRQ  RESERVED40_IRQHandler
							 | 
						||
| 
								 | 
							
								    IRQ  RESERVED41_IRQHandler
							 | 
						||
| 
								 | 
							
								    IRQ  RESERVED42_IRQHandler
							 | 
						||
| 
								 | 
							
								    IRQ  RESERVED43_IRQHandler
							 | 
						||
| 
								 | 
							
								    IRQ  RESERVED44_IRQHandler
							 | 
						||
| 
								 | 
							
								    IRQ  RESERVED45_IRQHandler
							 | 
						||
| 
								 | 
							
								    IRQ  RESERVED46_IRQHandler
							 | 
						||
| 
								 | 
							
								    IRQ  RESERVED47_IRQHandler
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								.end
							 |