wm_irq.c 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. /**
  2. * @file wm_irq.c
  3. *
  4. * @brief interupt driver module
  5. *
  6. * @author dave
  7. *
  8. * Copyright (c) 2015 Winner Microelectronics Co., Ltd.
  9. */
  10. #include "core_804.h"
  11. #include "wm_regs.h"
  12. #include "wm_irq.h"
  13. #include "wm_config.h"
  14. #include "wm_mem.h"
  15. #include "luat_conf_bsp.h"
  16. /* irq functions declare */
  17. extern ATTRIBUTE_ISR void i2s_I2S_IRQHandler(void);
  18. extern ATTRIBUTE_ISR void GPIOA_IRQHandler(void);
  19. extern ATTRIBUTE_ISR void GPIOB_IRQHandler(void);
  20. extern ATTRIBUTE_ISR void i2c_I2C_IRQHandler(void);
  21. extern ATTRIBUTE_ISR void UART0_IRQHandler(void);
  22. extern ATTRIBUTE_ISR void UART1_IRQHandler(void);
  23. extern ATTRIBUTE_ISR void UART2_IRQHandler(void);
  24. extern ATTRIBUTE_ISR void UART2_4_IRQHandler(void);
  25. extern ATTRIBUTE_ISR void PWM_IRQHandler(void);
  26. extern ATTRIBUTE_ISR void SPI_LS_IRQHandler(void);
  27. extern ATTRIBUTE_ISR void HSPI_IRQHandler(void);
  28. extern ATTRIBUTE_ISR void SDIOA_IRQHandler(void);
  29. extern ATTRIBUTE_ISR void DMA_Channel0_IRQHandler(void);
  30. extern ATTRIBUTE_ISR void DMA_Channel1_IRQHandler(void);
  31. extern ATTRIBUTE_ISR void DMA_Channel2_IRQHandler(void);
  32. extern ATTRIBUTE_ISR void DMA_Channel3_IRQHandler(void);
  33. extern ATTRIBUTE_ISR void DMA_Channel4_7_IRQHandler(void);
  34. extern ATTRIBUTE_ISR void ADC_IRQHandler(void);
  35. extern ATTRIBUTE_ISR void tls_touchsensor_irq_handler(void);
  36. static u32 irqen_status = 0;
  37. /**
  38. * @brief This function is used to initial system interrupt.
  39. *
  40. * @param[in] None
  41. *
  42. * @return None
  43. *
  44. * @note None
  45. */
  46. void tls_irq_init(void)
  47. {
  48. /*clear bt mask*/
  49. tls_reg_write32(0x40002A10,0xFFFFFFFF);
  50. NVIC_ClearPendingIRQ(BT_IRQn);
  51. csi_vic_set_vector(I2S_IRQn, (uint32_t)i2s_I2S_IRQHandler);
  52. csi_vic_set_vector(I2C_IRQn, (uint32_t)i2c_I2C_IRQHandler);
  53. csi_vic_set_vector(GPIOA_IRQn, (uint32_t)GPIOA_IRQHandler);
  54. csi_vic_set_vector(GPIOB_IRQn, (uint32_t)GPIOB_IRQHandler);
  55. csi_vic_set_vector(UART0_IRQn, (uint32_t)UART0_IRQHandler);
  56. csi_vic_set_vector(UART1_IRQn, (uint32_t)UART1_IRQHandler);
  57. csi_vic_set_vector(UART24_IRQn, (uint32_t)UART2_4_IRQHandler);
  58. csi_vic_set_vector(PWM_IRQn, (uint32_t)PWM_IRQHandler);
  59. csi_vic_set_vector(SPI_LS_IRQn, (uint32_t)SPI_LS_IRQHandler);
  60. #ifdef LUAT_USE_SPI_SLAVE
  61. csi_vic_set_vector(SPI_HS_IRQn, (uint32_t)HSPI_IRQHandler);
  62. csi_vic_set_vector(SDIO_IRQn, (uint32_t)SDIOA_IRQHandler);
  63. #endif
  64. csi_vic_set_vector(ADC_IRQn, (uint32_t)ADC_IRQHandler);
  65. csi_vic_set_vector(DMA_Channel0_IRQn, (uint32_t)DMA_Channel0_IRQHandler);
  66. csi_vic_set_vector(DMA_Channel1_IRQn, (uint32_t)DMA_Channel1_IRQHandler);
  67. csi_vic_set_vector(DMA_Channel2_IRQn, (uint32_t)DMA_Channel2_IRQHandler);
  68. csi_vic_set_vector(DMA_Channel3_IRQn, (uint32_t)DMA_Channel3_IRQHandler);
  69. csi_vic_set_vector(DMA_Channel4_7_IRQn, (uint32_t)DMA_Channel4_7_IRQHandler);
  70. csi_vic_set_vector(TOUCH_IRQn, (uint32_t)tls_touchsensor_irq_handler);
  71. }
  72. /**
  73. * @brief This function is used to register interrupt.
  74. *
  75. * @param[in] vec_no interrupt no
  76. * @param[in] handler
  77. * @param[in] *data
  78. *
  79. * @return None
  80. *
  81. * @note None
  82. */
  83. void tls_irq_register_handler(u8 vec_no, intr_handler_func handler, void *data)
  84. {
  85. }
  86. /**
  87. * @brief This function is used to enable interrupt.
  88. *
  89. * @param[in] vec_no interrupt no
  90. *
  91. * @return None
  92. *
  93. * @note None
  94. */
  95. void tls_irq_enable(u8 vec_no)
  96. {
  97. if ((irqen_status & (1<<vec_no)) == 0)
  98. {
  99. irqen_status |= 1<<vec_no;
  100. NVIC_ClearPendingIRQ((IRQn_Type)vec_no);
  101. NVIC_EnableIRQ((IRQn_Type)vec_no);
  102. }
  103. }
  104. /**
  105. * @brief This function is used to disable interrupt.
  106. *
  107. * @param[in] vec_no interrupt no
  108. *
  109. * @return None
  110. *
  111. * @note None
  112. */
  113. void tls_irq_disable(u8 vec_no)
  114. {
  115. if (irqen_status & (1<<vec_no))
  116. {
  117. irqen_status &= ~(1<<vec_no);
  118. NVIC_DisableIRQ((IRQn_Type)vec_no);
  119. }
  120. }
  121. void tls_irq_priority(u8 vec_no, u32 prio)
  122. {
  123. NVIC_SetPriority((IRQn_Type)vec_no, prio);
  124. }