eventUnit.c 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. #include "eventUnit.h"
  2. #include "common.h"
  3. volatile eventParams_ts eventParams[EVENT_INDEX_MAX];
  4. volatile uint32_t timerEventMask;
  5. uint32_t timerEventMaskTemp;
  6. void mySetMask(uint8_t sta)
  7. {
  8. if (sta)
  9. {
  10. __set_PRIMASK(1); //全局中断关闭
  11. }
  12. else
  13. {
  14. __set_PRIMASK(0); //全局中断打开
  15. }
  16. }
  17. void eventDriver(void)
  18. {
  19. int i;
  20. for ( i = 0; i < EVENT_INDEX_MAX; i++)
  21. {
  22. if (eventParams[i].countSet && (eventParams[i].flag_1s == false))
  23. {
  24. if (++ eventParams[i].count >= eventParams[i].countSet - 1)
  25. {
  26. eventParams[i].count = 0;
  27. if (eventParams[i].reload == false)
  28. {
  29. eventParams[i].countSet = 0;
  30. }
  31. timerEventMask |= (1 << i);
  32. }
  33. }
  34. }
  35. }
  36. void eventDriver1s(void)
  37. {
  38. int i;
  39. for ( i = 0; i < EVENT_INDEX_MAX; i++)
  40. {
  41. if (eventParams[i].countSet && eventParams[i].flag_1s)
  42. {
  43. if (++ eventParams[i].count >= eventParams[i].countSet - 1)
  44. {
  45. eventParams[i].count = 0;
  46. if (eventParams[i].reload == false)
  47. {
  48. eventParams[i].countSet = 0;
  49. }
  50. timerEventMask |= (1 << i);
  51. }
  52. }
  53. }
  54. }
  55. void setEvent(uint32_t mask, bool reload, bool first, uint32_t timeOut_ms)
  56. {
  57. mySetMask(1);
  58. eventParams[mask].countSet = timeOut_ms;
  59. eventParams[mask].count = 0;
  60. eventParams[mask].reload = reload;
  61. eventParams[mask].flag_1s = false;
  62. if (timeOut_ms == 0 || first)
  63. {
  64. timerEventMask |= (1 << mask);
  65. }
  66. mySetMask(0);//开总中断
  67. }
  68. void setEvent1s(uint32_t mask, bool reload, bool first, uint32_t timeOut_s)
  69. {
  70. mySetMask(1);
  71. eventParams[mask].countSet = timeOut_s;
  72. eventParams[mask].count = 0;
  73. eventParams[mask].reload = reload;
  74. eventParams[mask].flag_1s = true;
  75. if (timeOut_s == 0 || first)
  76. {
  77. timerEventMask |= (1 << mask);
  78. }
  79. mySetMask(0);//开总中断
  80. }
  81. void event_post(uint32_t mask)
  82. {
  83. mySetMask(1);
  84. eventParams[mask].countSet = 0;
  85. eventParams[mask].count = 0;
  86. eventParams[mask].reload = false;
  87. eventParams[mask].flag_1s = false;
  88. timerEventMask |= (1 << mask);
  89. mySetMask(0);//开总中断
  90. }
  91. void event_clear(uint32_t mask)
  92. {
  93. mySetMask(1);
  94. eventParams[mask].countSet = 0;
  95. eventParams[mask].count = 0;
  96. eventParams[mask].reload = false;
  97. eventParams[mask].flag_1s = false;
  98. timerEventMask &= (~(1 << mask));
  99. timerEventMaskTemp = timerEventMask;
  100. mySetMask(0);//开总中断
  101. }
  102. uint32_t event_pend(void)
  103. {
  104. uint32_t ret = 0;
  105. mySetMask(1);
  106. ret = timerEventMask;
  107. timerEventMaskTemp = timerEventMask;
  108. timerEventMask = 0;
  109. mySetMask(0);//开总中断
  110. return ret;
  111. }
  112. uint32_t getEvent(uint32_t mask)
  113. {
  114. return timerEventMaskTemp & (1 << mask);
  115. }