Interrupt.c 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  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 (FiledWeakenCompEnable)
  61. {
  62. FiledWeakenControl(FOC__UD, FOC__UQ, udc.WeakenUsRef, mcFocCtrl.IsRef);
  63. if (mcFieldWeaken.mcIdref < ID_Limit)
  64. {mcFieldWeaken.mcIdref = ID_Limit;}
  65. mcFocCtrl.IdRef = mcFieldWeaken.mcIdref;
  66. mcFocCtrl.IqRef = mcFieldWeaken.mcIqref;
  67. }
  68. #else
  69. {
  70. mcFocCtrl.IqRef = mcFocCtrl.IsRef;
  71. mcFocCtrl.IdRef = 0;
  72. }
  73. #endif
  74. if (mcFocCtrl.CtrlMode)
  75. {
  76. FOC_IQREF = mcFocCtrl.IqRef;
  77. FOC_IDREF = mcFocCtrl.IdRef;
  78. }
  79. #if (VoltageCompensationEn)
  80. VoltageCompensation();//电压补偿
  81. #endif
  82. DRV_SR = (DRV_SR | SYSTIF) & (~DCIF);
  83. }
  84. }
  85. /**
  86. @function SYStick_INT
  87. @brief 定时器中断(SYS TICK中断)
  88. @date 2025-11-01
  89. */
  90. void SYStick_INT(void) interrupt 10
  91. {
  92. if (ReadBit(DRV_SR, SYSTIF)) // SYS TICK中断
  93. {
  94. IsTick = true;
  95. if (mcFocCtrl.State_Count > 0)
  96. { mcFocCtrl.State_Count--; }
  97. DRV_SR = (DRV_SR | DCIF) & (~SYSTIF);// 清零标志位
  98. }
  99. }
  100. /**
  101. * @function COM1_INT_Handler
  102. * @brief I2C/UART1 共用此中断
  103. * @date 2025-11-05
  104. */
  105. void COM1_INT_Handler(void) interrupt 13
  106. {
  107. if (TI)
  108. { TI = 0; }
  109. if (RI)
  110. { RI = 0; }
  111. }
  112. /**
  113. * @function COM_INT_Handler
  114. * @brief SPI/UART2/LIN 共用此中断
  115. * @date 2025-11-05
  116. */
  117. void COM2_INT_Handler(void) interrupt 14
  118. {
  119. if (UT2TI)
  120. { UT2TI = 0; }
  121. if (UT2RI)
  122. { UT2RI = 0; }
  123. }
  124. /**
  125. * @function DAM_INT_Handler
  126. * @brief DMA中断函数
  127. * @date 2025-11-05
  128. */
  129. void DAM_INT_Handler(void) interrupt 15
  130. {
  131. if(ReadBit(DMA0_CR0,DMAIF))
  132. {
  133. memset(&DebugDat,0,64);
  134. ClrBit(DMA0_CR0,DMAIF);
  135. }
  136. if(ReadBit(DMA1_CR0,DMAIF))
  137. {
  138. ClrBit(DMA1_CR0,DMAIF);
  139. }
  140. }