eventUnit.c 1.6 KB

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