 8e143fc962
			
		
	
	8e143fc962
	
	
	
		
			
			This adds source files that allow to run TinyUSB stack on DA1469x-dk-pro board. Source files .c .S and .ld are taken from Apache Mynewt repository. Those files were stripped to allow starting board without Mynewt os.
		
			
				
	
	
		
			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
 |