1
0

CMP.c 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. #include <MyProject.h>
  2. void CMP3_Init(void)
  3. {
  4. /******CMP3 端口模拟功能设置*******/
  5. #if (Shunt_Resistor_Mode == Single_Resistor)
  6. {
  7. SetBit(P2_AN, P27); //CMP3 Pin设置为模拟模式 +
  8. ClrBit(CMP_CR1, CMP3MOD1); //00-->P27-单比较器模式 01-->P20/P23-双比较器模式
  9. ClrBit(CMP_CR1, CMP3MOD0); //1X-->P20/P23/P27-三比较器模式
  10. }
  11. #elif (Shunt_Resistor_Mode == Double_Resistor)
  12. {
  13. SetBit(P2_AN, P27); //CMP3 Pin设置为模拟模式 +
  14. ClrBit(CMP_CR1, CMP3MOD1); //00-->P27-单比较器模式 01-->P20/P23-双比较器模式
  15. ClrBit(CMP_CR1, CMP3MOD0); //1X-->P20/P23/P27-三比较器模式
  16. }
  17. #elif (Shunt_Resistor_Mode == Three_Resistor)
  18. {
  19. SetBit(P2_AN, P27 | P23 | P20); // CMP3 Pin设置为模拟模式 +
  20. SetBit(CMP_CR1, CMP3MOD1); // 00-->P27-单比较器模式 01-->P20/P23-双比较器模式
  21. SetBit(CMP_CR1, CMP3MOD0); // 1X-->P20/P23/P27-三比较器模式
  22. }
  23. #endif //end Shunt_Resistor_Mode
  24. #if (COMPARE_MODE == COMPARE_HW_MODE)
  25. {
  26. /**P2.6使能其模拟功能,使能数字输出**/
  27. SetBit(P2_AN, P26);
  28. ClrBit(P2_OE, P26);
  29. ClrBit(DAC_CR, DAC0_1EN);
  30. }
  31. #else
  32. {
  33. // /**P2.6使能其模拟功能,使能数字输出**/
  34. // SetBit(P2_AN , P26);
  35. // SetBit(P2_OE , P26);
  36. /* DAC0 Enable */
  37. SetBit(DAC_CR, DAC0_1EN);
  38. /******************************
  39. 0: 正常模式,DAC输出电压范围为0到VREF
  40. 1: 半电压转换模式,DAC输出电压范围为VHALF到VREF
  41. ****************************/
  42. ClrBit(DAC_CR, DACMOD);
  43. /**********设置DAC过流值,舍弃低位精度*****************/
  44. // DAC0_DR 是DAC0的高8位,DAC0 的最低位忽略
  45. DAC0_DR = DAC_OverCurrentValue;
  46. }
  47. #endif //end Compare_Mode
  48. SetBit(CMP_CR1, CMP3HYS); // CMP3 Hysteresis voltage Enable
  49. /* ---------------------------------------------------------------------------------
  50. 选择母线电流保护触发信号源,外部中断0或者比较器3中断。
  51. 0-CMP3,1-INT0
  52. ---------------------------------------------------------------------------------*/
  53. ClrBit(EVT_FILT, INT0_MOE_EN);
  54. /* ---------------------------------------------------------------------------------
  55. 触发硬件保护后硬件关闭驱动输出MOE配置, 常规应用需要使能MOE自动清零
  56. 00--MOE不自动清零
  57. 01--MOE自动清零
  58. ----------------------------------------------------------------------------------*/
  59. ClrBit(EVT_FILT, MOEMD1);
  60. SetBit(EVT_FILT, MOEMD0);
  61. /* ----------------------------------------------------------------------------------
  62. 母线电流保护时间滤波宽度
  63. 00-不滤波
  64. 01-4cpu clock
  65. 10-8cpu clock
  66. 11-16cpu clock
  67. -----------------------------------------------------------------------------------*/
  68. SetBit(EVT_FILT, EFDIV1);
  69. SetBit(EVT_FILT, EFDIV0);
  70. SetBit(CMP_CR1, CMP3EN); //CMP3 Enable
  71. }
  72. /*****************************************************************************
  73. Function : CMP3_Interrupt_Init
  74. Description : CMP3中断配置
  75. Input : void
  76. Output : None
  77. Return :
  78. Others :
  79. Record
  80. 1.Date : 20190320
  81. Author : Bruce HW&RD
  82. Modification: Created function
  83. *****************************************************************************/
  84. void CMP3_Interrupt_Init(void)
  85. {
  86. ClrBit(CMP_SR, CMP3IF);
  87. /* ------------------------------------------------------------------------
  88. 比较器中断模式配置
  89. 00: 不产生中断
  90. 01: 上升沿产生中断
  91. 10: 下降沿产生中断
  92. 11: 上升/下降沿产生中断
  93. ------------------------------------------------------------------------*/
  94. ClrBit(CMP_CR0, CMP3IM1);
  95. SetBit(CMP_CR0, CMP3IM0);
  96. SetBit(IP3, PCMP31); // 中断优先级别3
  97. SetBit(IP3, PCMP30);
  98. }