enum status_code events_disable_interrupt_source(struct events_resource *resource, enum events_interrupt_source source) { Assert((source == EVENTS_INTERRUPT_DETECT) || (source == EVENTS_INTERRUPT_OVERRUN)); if (source == EVENTS_INTERRUPT_DETECT) { EVSYS->INTENCLR.reg = _events_find_bit_position(resource->channel, _EVENTS_START_OFFSET_DETECTION_BIT); } else if (source == EVENTS_INTERRUPT_OVERRUN) { EVSYS->INTENCLR.reg = _events_find_bit_position(resource->channel, _EVENTS_START_OFFSET_OVERRUN_BIT); } else { return STATUS_ERR_INVALID_ARG; } return STATUS_OK; }
bool events_is_users_ready(struct events_resource *resource) { Assert(resource); return EVSYS->CHSTATUS.reg & (_events_find_bit_position(resource->channel, _EVENTS_START_OFFSET_USER_READY_BIT)); }
bool events_is_busy(struct events_resource *resource) { Assert(resource); return EVSYS->CHSTATUS.reg & (_events_find_bit_position(resource->channel, _EVENTS_START_OFFSET_BUSY_BITS)); }
bool events_is_interrupt_set(struct events_resource *resource, enum events_interrupt_source source) { Assert((source == EVENTS_INTERRUPT_DETECT) || (source == EVENTS_INTERRUPT_OVERRUN)); uint8_t bitpos; if (source == EVENTS_INTERRUPT_DETECT) { bitpos = _events_find_bit_position(resource->channel, _EVENTS_START_OFFSET_DETECTION_BIT); } else if (source == EVENTS_INTERRUPT_OVERRUN) { bitpos = _events_find_bit_position(resource->channel, _EVENTS_START_OFFSET_OVERRUN_BIT); } else { return false; } return (bool)(_events_inst.interrupt_flag_buffer >> bitpos); }
enum status_code events_ack_interrupt(struct events_resource *resource, enum events_interrupt_source source) { Assert((source == EVENTS_INTERRUPT_DETECT) || (source == EVENTS_INTERRUPT_OVERRUN)); uint8_t bitpos; if (source == EVENTS_INTERRUPT_DETECT) { bitpos = _events_find_bit_position(resource->channel, _EVENTS_START_OFFSET_DETECTION_BIT); } else if (source == EVENTS_INTERRUPT_OVERRUN) { bitpos = _events_find_bit_position(resource->channel, _EVENTS_START_OFFSET_OVERRUN_BIT); } else { return STATUS_ERR_INVALID_ARG; } _events_inst.interrupt_flag_ack_buffer |= 1 << bitpos; return STATUS_OK; }
bool events_is_overrun(struct events_resource *resource) { Assert(resource); uint32_t flag = _events_find_bit_position(resource->channel, _EVENTS_START_OFFSET_OVERRUN_BIT); /* Clear flag when read */ if (EVSYS->INTFLAG.reg & flag) { EVSYS->INTFLAG.reg = flag; return true; } return false; }