Interrupt.c 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  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. {
  20. TSDIF = 0;
  21. }
  22. }
  23. /**
  24. @function EXTERN_INT0
  25. @brief 外部中断0 用于预驱故障检测 中断优先级最高
  26. @date 2025-11-01
  27. */
  28. void EXTERN_INT0(void) interrupt 1
  29. {
  30. if (IF0)
  31. {
  32. FaultProcess();
  33. mcFaultSource = FaultHardOVCurrent;
  34. IF0 = 0;
  35. }
  36. }
  37. /* -------------------------------------------------------------------------------------------------
  38. Function Name : void CMP3_INT(void)
  39. Description : CMP3:硬件比较器过流保护,关断输出,中断优先级最高
  40. Input : 无
  41. Output : 无
  42. -------------------------------------------------------------------------------------------------*/
  43. void CMP3_INT(void) interrupt 12
  44. {
  45. if (ReadBit(CMP_SR, CMP3IF))
  46. {
  47. FaultProcess(); // 关闭输出
  48. mcFaultSource = FaultHardOVCurrent; // 硬件过流保护
  49. ClrBit(CMP_SR, CMP3IF);
  50. }
  51. }
  52. /**
  53. @function DRV_ISR
  54. @brief FOC中断(Drv中断),每个载波周期执行一次,用于处理响应较高的程序,中断优先级第二。DCEN开了就会产生中断。
  55. @date 2025-11-01
  56. */
  57. void DRV_ISR(void) interrupt 3
  58. {
  59. if (ReadBit(DRV_SR, DCIF)) // 比较中断
  60. {
  61. Fault_Overcurrent(); //软件过流保护
  62. #if (FiledWeakenCompEnable)
  63. {
  64. FiledWeakenControl(FOC__UD, FOC__UQ, udc.WeakenUsRef, mcFocCtrl.IsRef);
  65. if (mcFieldWeaken.mcIdref < ID_Limit)
  66. {mcFieldWeaken.mcIdref = ID_Limit;}
  67. mcFocCtrl.IdRef = mcFieldWeaken.mcIdref;
  68. mcFocCtrl.IqRef = mcFieldWeaken.mcIqref;
  69. }
  70. #else
  71. {
  72. mcFocCtrl.IqRef = mcFocCtrl.IsRef;
  73. mcFocCtrl.IdRef = 0;
  74. }
  75. #endif
  76. if (mcFocCtrl.CtrlMode)
  77. {
  78. FOC_IQREF = mcFocCtrl.IqRef;
  79. FOC_IDREF = mcFocCtrl.IdRef;
  80. }
  81. #if (VoltageCompensationEn)
  82. VoltageCompensation();//电压补偿
  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 > 0)
  98. { mcFocCtrl.State_Count--; }
  99. if (mcFocCtrl.mcAcbustime < 30000)
  100. {
  101. mcFocCtrl.mcAcbustime++;
  102. }
  103. DRV_SR = (DRV_SR | DCIF) & (~SYSTIF);// 清零标志位
  104. }
  105. }
  106. void USART_INT(void) interrupt 14
  107. {
  108. if (UT2TI)
  109. { UT2TI = 0; }
  110. if (UT2RI)
  111. { UT2RI = 0; }
  112. }
  113. void USART_INT1(void) interrupt 13
  114. {
  115. if (TI)
  116. { TI = 0; }
  117. if (RI)
  118. { RI = 0; }
  119. }