Interrupt.c 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. #include <Myproject.h>
  2. /**
  3. @function LVW_TSD_INT
  4. @brief 芯片过温 芯片欠压故障中断
  5. @date 2025-11-01
  6. */
  7. void LVW_TSD_INT(void) interrupt 0
  8. {
  9. if (ReadBit(LVSR, LVWIF))
  10. {
  11. if (ReadBit(LVSR, LVWF))
  12. {
  13. FaultProcess();
  14. ClrBit(LVSR, LVWF);
  15. }
  16. ClrBit(LVSR, LVWIF);
  17. }
  18. if (TSDIF)
  19. { TSDIF = 0; }
  20. }
  21. /**
  22. @function EXTERN_INT0
  23. @brief 外部中断0 用于预驱故障检测 中断优先级最高
  24. @date 2025-11-01
  25. */
  26. void EXTERN_INT0(void) interrupt 1
  27. {
  28. if (IF0)
  29. {
  30. FaultProcess();
  31. mcFaultSource = FaultHardOVCurrent;
  32. IF0 = 0;
  33. }
  34. }
  35. /* -------------------------------------------------------------------------------------------------
  36. Function Name : void CMP3_INT(void)
  37. Description : CMP3:硬件比较器过流保护,关断输出,中断优先级最高
  38. Input : 无
  39. Output : 无
  40. -------------------------------------------------------------------------------------------------*/
  41. void CMP3_INT(void) interrupt 12
  42. {
  43. if (ReadBit(CMP_SR, CMP3IF))
  44. {
  45. FaultProcess(); // 关闭输出
  46. mcFaultSource = FaultHardOVCurrent; // 硬件过流保护
  47. ClrBit(CMP_SR, CMP3IF);
  48. }
  49. }
  50. /**
  51. @function DRV_ISR
  52. @brief FOC中断(Drv中断),每个载波周期执行一次,用于处理响应较高的程序,中断优先级第二。DCEN开了就会产生中断。
  53. @date 2025-11-01
  54. */
  55. void DRV_ISR(void) interrupt 3
  56. {
  57. if (ReadBit(DRV_SR, DCIF)) // 比较中断
  58. {
  59. Fault_Overcurrent(); //软件过流保护
  60. #if 0
  61. #if (FiledWeakenCompEnable)
  62. {
  63. FiledWeakenControl(FOC__UD, FOC__UQ, udc.WeakenUsRef, mcFocCtrl.IsRef);
  64. if (mcFieldWeaken.mcIdref < ID_Limit)
  65. {mcFieldWeaken.mcIdref = ID_Limit;}
  66. mcFocCtrl.IdRef = mcFieldWeaken.mcIdref;
  67. mcFocCtrl.IqRef = mcFieldWeaken.mcIqref;
  68. }
  69. #else
  70. {
  71. mcFocCtrl.IqRef = mcFocCtrl.IsRef;
  72. mcFocCtrl.IdRef = 0;
  73. }
  74. #endif
  75. if (mcFocCtrl.CtrlMode)
  76. {
  77. FOC_IQREF = mcFocCtrl.IqRef;
  78. FOC_IDREF = mcFocCtrl.IdRef;
  79. }
  80. #if (VoltageCompensationEn)
  81. VoltageCompensation();//电压补偿
  82. #endif
  83. #endif
  84. DRV_SR = (DRV_SR | SYSTIF) & (~DCIF);
  85. }
  86. }
  87. /**
  88. @function SYStick_INT
  89. @brief 定时器中断(SYS TICK中断)
  90. @date 2025-11-01
  91. */
  92. void SYStick_INT(void) interrupt 10
  93. {
  94. if (ReadBit(DRV_SR, SYSTIF)) // SYS TICK中断
  95. {
  96. IsTick = true;
  97. if (mcFocCtrl.State_Count)
  98. { mcFocCtrl.State_Count--; }
  99. DRV_SR = (DRV_SR | DCIF) & (~SYSTIF);// 清零标志位
  100. }
  101. }
  102. /**
  103. * @function COM1_INT_Handler
  104. * @brief I2C/UART1 共用此中断
  105. * @date 2025-11-05
  106. */
  107. void COM1_INT_Handler(void) interrupt 13
  108. {
  109. if (TI)
  110. { TI = 0; }
  111. if (RI)
  112. { RI = 0; }
  113. }
  114. /**
  115. * @function COM_INT_Handler
  116. * @brief SPI/UART2/LIN 共用此中断
  117. * @date 2025-11-05
  118. */
  119. void COM2_INT_Handler(void) interrupt 14
  120. {
  121. if (UT2TI)
  122. { UT2TI = 0; }
  123. if (UT2RI)
  124. { UT2RI = 0; }
  125. }
  126. /**
  127. * @function DAM_INT_Handler
  128. * @brief DMA中断函数
  129. * @date 2025-11-05
  130. */
  131. void DAM_INT_Handler(void) interrupt 15
  132. {
  133. if(ReadBit(DMA0_CR0,DMAIF))
  134. {
  135. memset(&DebugDat,0,64);
  136. ClrBit(DMA0_CR0,DMAIF);
  137. }
  138. if(ReadBit(DMA1_CR0,DMAIF))
  139. {
  140. ClrBit(DMA1_CR0,DMAIF);
  141. }
  142. }