#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); }