wm_irq.c 3.8 KB

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