| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- #include "eventUnit.h"
- #include "common.h"
- volatile eventParams_ts eventParams[EVENT_INDEX_MAX];
- volatile uint32_t timerEventMask;
- uint32_t timerEventMaskTemp;
- void mySetMask(uint8_t sta)
- {
- if (sta)
- {
- __set_PRIMASK(1); //全局中断关闭
- }
- else
- {
- __set_PRIMASK(0); //全局中断打开
- }
- }
- void eventDriver(void)
- {
- int i;
-
- for ( i = 0; i < EVENT_INDEX_MAX; i++)
- {
- if (eventParams[i].countSet && (eventParams[i].flag_1s == false))
- {
- if (++ eventParams[i].count >= eventParams[i].countSet - 1)
- {
- eventParams[i].count = 0;
- if (eventParams[i].reload == false)
- {
- eventParams[i].countSet = 0;
- }
- timerEventMask |= (1 << i);
- }
- }
- }
- }
- void eventDriver1s(void)
- {
- int i;
-
- for ( i = 0; i < EVENT_INDEX_MAX; i++)
- {
- if (eventParams[i].countSet && eventParams[i].flag_1s)
- {
- if (++ eventParams[i].count >= eventParams[i].countSet - 1)
- {
- eventParams[i].count = 0;
- if (eventParams[i].reload == false)
- {
- eventParams[i].countSet = 0;
- }
- timerEventMask |= (1 << i);
- }
- }
- }
- }
- void setEvent(uint32_t mask, bool reload, bool first, uint32_t timeOut_ms)
- {
- mySetMask(1);
-
- eventParams[mask].countSet = timeOut_ms;
- eventParams[mask].count = 0;
- eventParams[mask].reload = reload;
- eventParams[mask].flag_1s = false;
- if (timeOut_ms == 0 || first)
- {
- timerEventMask |= (1 << mask);
- }
- mySetMask(0);//开总中断
- }
- void setEvent1s(uint32_t mask, bool reload, bool first, uint32_t timeOut_s)
- {
- mySetMask(1);
-
- eventParams[mask].countSet = timeOut_s;
- eventParams[mask].count = 0;
- eventParams[mask].reload = reload;
- eventParams[mask].flag_1s = true;
- if (timeOut_s == 0 || first)
- {
- timerEventMask |= (1 << mask);
- }
- mySetMask(0);//开总中断
- }
- void event_post(uint32_t mask)
- {
- mySetMask(1);
- eventParams[mask].countSet = 0;
- eventParams[mask].count = 0;
- eventParams[mask].reload = false;
- eventParams[mask].flag_1s = false;
- timerEventMask |= (1 << mask);
- mySetMask(0);//开总中断
- }
- void event_clear(uint32_t mask)
- {
- mySetMask(1);
- eventParams[mask].countSet = 0;
- eventParams[mask].count = 0;
- eventParams[mask].reload = false;
- eventParams[mask].flag_1s = false;
- timerEventMask &= (~(1 << mask));
- timerEventMaskTemp = timerEventMask;
- mySetMask(0);//开总中断
- }
- uint32_t event_pend(void)
- {
- uint32_t ret = 0;
- mySetMask(1);
- ret = timerEventMask;
- timerEventMaskTemp = timerEventMask;
- timerEventMask = 0;
- mySetMask(0);//开总中断
- return ret;
- }
- uint32_t getEvent(uint32_t mask)
- {
- return timerEventMaskTemp & (1 << mask);
- }
|