/* Configure the given interrupt source. Interrupt can be configured to trigger on rising edge, falling edge, high level, low level or simply on level change.  */
void pio_configure_interrupt(Pio *p_pio, const uint32_t ul_mask, const uint32_t ul_attr)
/* Configure the given interrupt source. Interrupt can be configured to trigger on rising edge, falling edge, high level, low level or simply on level change.  */
void pio_configure_interrupt(Pio *p_pio, const uint32_t ul_mask, const uint32_t ul_attr)
{
	if (ul_attr & PIO_IT_AIME) {
		p_pio->PIO_AIMER = ul_mask;
		if (ul_attr & PIO_IT_RE_OR_HL) {
			p_pio->PIO_REHLSR = ul_mask;
		} else {
			p_pio->PIO_FELLSR = ul_mask;
		}
		if (ul_attr & PIO_IT_EDGE) {
			p_pio->PIO_ESR = ul_mask;
		} else {
			p_pio->PIO_LSR = ul_mask;
		}
	} else {
		p_pio->PIO_AIMDR = ul_mask;
	}
}