eventUnit.c 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. #include "eventUnit.h"
  2. #include "stm32f10x.h"
  3. volatile eventParams_ts eventParams[EVENT_INDEX_MAX];
  4. volatile uint32_t timerEventMask;
  5. uint32_t getEventMask;
  6. bool eventDriverSta;
  7. void eventDriver(void)
  8. {
  9. int i;
  10. for ( i = 0; i < EVENT_INDEX_MAX; i++)
  11. {
  12. if (eventParams[i].countSet)
  13. {
  14. if (++ eventParams[i].count >= eventParams[i].countSet)
  15. {
  16. eventParams[i].count = 0;
  17. if (eventParams[i].reload == false)
  18. {
  19. eventParams[i].countSet = 0;
  20. }
  21. timerEventMask |= (1 << i);
  22. }
  23. }
  24. }
  25. }
  26. void setEvent(uint32_t mask, bool reload, uint32_t timeOut_ms)
  27. {
  28. __set_PRIMASK(1);
  29. eventParams[mask].countSet = timeOut_ms;
  30. eventParams[mask].count = 0;
  31. eventParams[mask].reload = reload;
  32. if (timeOut_ms == 0)
  33. {
  34. timerEventMask |= (1 << mask);
  35. }
  36. __set_PRIMASK(0);//开总中断
  37. }
  38. void event_post(uint32_t mask)
  39. {
  40. __set_PRIMASK(1);
  41. eventParams[mask].countSet = 0;
  42. eventParams[mask].count = 0;
  43. eventParams[mask].reload = false;
  44. timerEventMask |= (1 << mask);
  45. __set_PRIMASK(0);//开总中断
  46. }
  47. void event_clear(uint32_t mask)
  48. {
  49. __set_PRIMASK(1);
  50. eventParams[mask].countSet = 0;
  51. eventParams[mask].count = 0;
  52. eventParams[mask].reload = false;
  53. __set_PRIMASK(0);//开总中断
  54. }
  55. uint32_t event_pend(void)
  56. {
  57. uint32_t ret = 0;
  58. __set_PRIMASK(1);
  59. ret = timerEventMask;
  60. getEventMask = ret;
  61. timerEventMask = 0;
  62. __set_PRIMASK(0);//开总中断
  63. return ret;
  64. }
  65. uint32_t getEvent(uint32_t mask)
  66. {
  67. return getEventMask & (1 << mask);
  68. }