vectors.S 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. /*
  2. * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved.
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. /******************************************************************************
  17. * @file vectors.S
  18. * @brief define default vector handlers. Should use with
  19. * GCC for CSKY Embedded Processors
  20. * @version V1.0
  21. * @date 28. Nove 2017
  22. ******************************************************************************/
  23. #include <csi_config.h>
  24. .import trap_c
  25. .section .bss
  26. .align 2
  27. .globl g_trapstackalloc
  28. .global g_trapstackbase
  29. .global g_top_trapstack
  30. g_trapstackalloc:
  31. g_trapstackbase:
  32. .space 512
  33. g_top_trapstack:
  34. .align 2
  35. .globl g_trap_sp
  36. .type g_trap_sp, object
  37. g_trap_sp:
  38. .long 0
  39. .size g_trap_sp, .-g_trap_sp
  40. .text
  41. /******************************************************************************
  42. * Functions:
  43. * void trap(void);
  44. * default exception handler
  45. ******************************************************************************/
  46. .global trap
  47. .type trap, %function
  48. trap:
  49. psrset ee
  50. subi sp, 4
  51. stw r13, (sp)
  52. addi sp, 4
  53. lrw r13, g_trap_sp
  54. stw sp, (r13)
  55. lrw sp, g_top_trapstack
  56. subi sp, 72
  57. stm r0-r12, (sp)
  58. lrw r0, g_trap_sp
  59. ldw r0, (r0)
  60. stw r0, (sp, 56) /* save r14 */
  61. subi r0, 4
  62. ldw r13, (r0)
  63. stw r13, (sp, 52)
  64. stw r15, (sp, 60)
  65. mfcr r0, epsr
  66. stw r0, (sp, 64)
  67. mfcr r0, epc
  68. stw r0, (sp, 68)
  69. mov r0, sp
  70. jbsr trap_c
  71. .align 2
  72. .weak Default_Handler
  73. .type Default_Handler, %function
  74. Default_Handler:
  75. br trap
  76. .size Default_Handler, . - Default_Handler
  77. /* Macro to define default handlers. Default handler
  78. * will be weak symbol and just dead loops. They can be
  79. * overwritten by other handlers */
  80. .macro def_irq_handler handler_name
  81. .weak \handler_name
  82. .globl \handler_name
  83. .set \handler_name, Default_Handler
  84. .endm
  85. def_irq_handler tspend_handler
  86. def_irq_handler SDIO_IRQHandler /* 0: SDIO */
  87. def_irq_handler MAC_IRQHandler /* 1: MAC */
  88. def_irq_handler RF_Cfg_IRQHandler /* 2: RF Cfg */
  89. def_irq_handler SEC_IRQHandler /* 3: SEC */
  90. def_irq_handler DMA_Channel0_IRQHandler /* 4: DMA_Channel0 */
  91. def_irq_handler DMA_Channel1_IRQHandler /* 5: DMA_Channel1 */
  92. def_irq_handler DMA_Channel2_IRQHandler /* 6: DMA_Channel2 */
  93. def_irq_handler DMA_Channel3_IRQHandler /* 7: DMA_Channel3 */
  94. def_irq_handler DMA_Channel4_7_IRQHandler /* 8: DMA_Channel4_7 */
  95. def_irq_handler DMA_BRUST_IRQHandler /* 9: DMA_BRUST */
  96. def_irq_handler I2C_IRQHandler /* 10: IIC */
  97. def_irq_handler ADC_IRQHandler /* 11: SD ADC */
  98. def_irq_handler SPI_LS_IRQHandler /* 12: LS SPI */
  99. def_irq_handler SPI_HS_IRQHandler /* 13: HS SPI */
  100. def_irq_handler GPIOA_IRQHandler /* 14: GPIOA */
  101. def_irq_handler GPIOB_IRQHandler /* 15: GPIOB */
  102. def_irq_handler USART_IRQHandler /* 16: UART0 */
  103. def_irq_handler USART1_IRQHandler /* 17: UART1 */
  104. def_irq_handler USART2_IRQHandler /* 18: UART2&7816 */
  105. def_irq_handler USART3_5_IRQHandler /* 19: USART3_5 */
  106. def_irq_handler BLE_IRQHandler /* 20: BLE */
  107. def_irq_handler BT_IRQHandler /* 21: BT */
  108. def_irq_handler PWM_IRQHandler /* 22: PWM */
  109. def_irq_handler I2S_IRQHandler /* 23: I2S */
  110. def_irq_handler SDIO_HOST_IRQHandler /* 24: SDIO HOST */
  111. def_irq_handler CORET_IRQHandler /* 25: CoreTIM */
  112. def_irq_handler RSA_IRQHandler /* 26: RSA */
  113. def_irq_handler GPSEC_IRQHandler /* 27: GPSEC */
  114. def_irq_handler FLASH_IRQHandler /* 28: Flash */
  115. def_irq_handler PMU_IRQHandler /* 29: PMU */
  116. def_irq_handler TIM0_5_IRQHandler /* 30: Timer0_5 */
  117. def_irq_handler WDG_IRQHandler /* 31: Watch dog */