示例#1
0
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;
}
示例#2
0
文件: events.c 项目: Gussy/sam0
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));
}
示例#3
0
文件: events.c 项目: Gussy/sam0
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));
}
示例#4
0
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);
}
示例#5
0
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;
}
示例#6
0
文件: events.c 项目: Gussy/sam0
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;
}