Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 
 
 

153 строки
3.9 KiB

  1. #include "VolumeTransducer.h"
  2. #include "define.h"
  3. #include "BoardCfg.h"
  4. #include "timer.h"
  5. #include <stdio.h>
  6. #include "Syslog.h"
  7. int mDebouncingBureau = false;
  8. int mDebouncingCuisine = false;
  9. int mBureauVolume = 0;
  10. int mCuisineVolume = 0;
  11. char VolDebug[100];
  12. int VolumeTransducerInit()
  13. {
  14. //Bureau volume transducer
  15. IEC0bits.INT1IE = 0;
  16. IFS0bits.INT1IF = 0;
  17. if(BUREAU_VOL_POT_CCW_PIN == 1)
  18. {
  19. INTCONbits.INT1EP = 0; //Falling edge
  20. }
  21. else
  22. {
  23. INTCONbits.INT1EP = 1; //Rising edge
  24. }
  25. IPC1bits.INT1IP = 2;
  26. IPC1bits.INT1IS = 1;
  27. IEC0bits.INT1IE = 1;
  28. //Cuisine volume transducer
  29. IEC0bits.INT3IE = 0;
  30. IFS0bits.INT3IF = 0;
  31. if(CUISINE_VOL_POT_CCW_PIN == 1)
  32. {
  33. INTCONbits.INT3EP = 0; //Falling edge
  34. }
  35. else
  36. {
  37. INTCONbits.INT3EP = 1; //Rising edge
  38. }
  39. IPC3bits.INT3IP = 2;
  40. IPC3bits.INT3IS = 2;
  41. IEC0bits.INT3IE = 1;
  42. mDebouncingBureau = false;
  43. mDebouncingCuisine = false;
  44. return RET_OK;
  45. }
  46. int VolumeTransducerTick()
  47. {
  48. if(mDebouncingBureau == true)
  49. {
  50. if(IsTimerExpired(BUREAU_VOLUME_TRANSDUCER_TIMER) == 1)
  51. {
  52. TimerStop(BUREAU_VOLUME_TRANSDUCER_TIMER);
  53. if(BUREAU_VOL_POT_CCW_PIN == BUREAU_VOL_POT_CW_PIN)
  54. {
  55. mBureauVolume += (-1 * VOLUME_TRANSDUCER_INCREMENT);
  56. // mBureauChange = 0;
  57. sprintf(VolDebug,"Bureau: %d\n",mBureauVolume);
  58. SyslogNewString(VolDebug);
  59. // mBureauChange = -1;
  60. }
  61. else
  62. {
  63. mBureauVolume += (VOLUME_TRANSDUCER_INCREMENT);
  64. // mBureauChange = 0;
  65. sprintf(VolDebug,"Bureau: %d\n",mBureauVolume);
  66. SyslogNewString(VolDebug);
  67. // mBureauChange = 1;
  68. }
  69. if(BUREAU_VOL_POT_CCW_PIN == 1)
  70. {
  71. INTCONbits.INT1EP = 0; //Falling edge
  72. }
  73. else
  74. {
  75. INTCONbits.INT1EP = 1; //Rising edge
  76. }
  77. IFS0bits.INT1IF = 0;
  78. IEC0bits.INT1IE = 1;
  79. mDebouncingBureau = false;
  80. }
  81. }
  82. if(mDebouncingCuisine == true)
  83. {
  84. if(IsTimerExpired(CUISINE_VOLUME_TRANSDUCER_TIMER) == 1)
  85. {
  86. TimerStop(CUISINE_VOLUME_TRANSDUCER_TIMER);
  87. if(CUISINE_VOL_POT_CCW_PIN == CUISINE_VOL_POT_CW_PIN)
  88. {
  89. mCuisineVolume += (-1 * VOLUME_TRANSDUCER_INCREMENT);
  90. // mBureauChange = 0;
  91. sprintf(VolDebug,"Cuisine: %d\n",mCuisineVolume);
  92. SyslogNewString(VolDebug);
  93. // mBureauChange = -1;
  94. }
  95. else
  96. {
  97. mCuisineVolume += (VOLUME_TRANSDUCER_INCREMENT);
  98. // mBureauChange = 0;
  99. sprintf(VolDebug,"Cuisine: %d\n",mCuisineVolume);
  100. SyslogNewString(VolDebug);
  101. // mBureauChange = 1;
  102. }
  103. if(CUISINE_VOL_POT_CCW_PIN == 1)
  104. {
  105. INTCONbits.INT3EP = 0; //Falling edge
  106. }
  107. else
  108. {
  109. INTCONbits.INT3EP = 1; //Rising edge
  110. }
  111. IFS0bits.INT3IF = 0;
  112. IEC0bits.INT3IE = 1;
  113. mDebouncingCuisine = false;
  114. }
  115. }
  116. }
  117. void __ISR(_EXTERNAL_1_VECTOR, ipl2) BureauTransducerInterrupt(void)
  118. {
  119. IEC0bits.INT1IE = 0;
  120. TimerStart(BUREAU_VOLUME_TRANSDUCER_TIMER,VOLUME_TRANSDUCER_DEBOUNCE_TIMEOUT);
  121. mDebouncingBureau = true;
  122. IFS0bits.INT1IF = 0; //Clear interrupt flag
  123. }
  124. void __ISR(_EXTERNAL_3_VECTOR, ipl2) CuisineTransducerInterrupt(void)
  125. {
  126. IEC0bits.INT3IE = 0;
  127. TimerStart(CUISINE_VOLUME_TRANSDUCER_TIMER,VOLUME_TRANSDUCER_DEBOUNCE_TIMEOUT);
  128. mDebouncingCuisine = true;
  129. IFS0bits.INT3IF = 0; //Clear interrupt flag
  130. }