eventUnit.c 1.7 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. printf("timeOut_ms=%d\n", timeOut_ms);
  37. __set_PRIMASK(0);//开总中断
  38. }
  39. void event_post(uint32_t mask)
  40. {
  41. __set_PRIMASK(1);
  42. eventParams[mask].countSet = 0;
  43. eventParams[mask].count = 0;
  44. eventParams[mask].reload = false;
  45. timerEventMask |= (1 << mask);
  46. __set_PRIMASK(0);//开总中断
  47. }
  48. void event_clear(uint32_t mask)
  49. {
  50. __set_PRIMASK(1);
  51. eventParams[mask].countSet = 0;
  52. eventParams[mask].count = 0;
  53. eventParams[mask].reload = false;
  54. __set_PRIMASK(0);//开总中断
  55. }
  56. uint32_t event_pend(void)
  57. {
  58. uint32_t ret = 0;
  59. __set_PRIMASK(1);
  60. ret = timerEventMask;
  61. getEventMask = ret;
  62. timerEventMask = 0;
  63. __set_PRIMASK(0);//开总中断
  64. return ret;
  65. }
  66. uint32_t getEvent(uint32_t mask)
  67. {
  68. return getEventMask & (1 << mask);
  69. }