#ifndef PORTHARDWARE_H
#define PORTHARDWARE_H

#include "FreeRTOSConfig.h"

/*-----------------------------------------------------------*/

#define CLR_INT(FLAG_REG, FLAG_MASK) \
		asm volatile(	"push r16\n\t" \
		"ldi r16, %1\n\t" \
		"sts %0, r16\n\t" \
		"pop r16\n\t" \
		: \
		: "i"(_SFR_MEM_ADDR(FLAG_REG)),"i"((uint8_t)(FLAG_MASK)) \
		);

#if ( configUSE_TIMER_INSTANCE == 0 )

	#define TICK_INT_vect			TCB0_INT_vect
	#define INT_FLAGS				TCB0_INTFLAGS
	#define INT_MASK				TCB_CAPT_bm
	
	#define TICK_init()				{ \
									TCB0.CCMP    = configCPU_CLOCK_HZ / configTICK_RATE_HZ; \
									TCB0.INTCTRL = TCB_CAPT_bm; \
									TCB0.CTRLA   = TCB_ENABLE_bm; \
									}
									
	#define TICK_stop()				{ \
									TCB0.INTCTRL &= ~TCB_CAPT_bm;\
									TCB0.CTRLA   &= ~TCB_ENABLE_bm; \
									}

#elif ( configUSE_TIMER_INSTANCE == 1 )

	#define TICK_INT_vect			TCB1_INT_vect
	#define INT_FLAGS				TCB1_INTFLAGS
	#define INT_MASK				TCB_CAPT_bm
	
	#define TICK_init()				{ \
									TCB1.CCMP    = configCPU_CLOCK_HZ / configTICK_RATE_HZ; \
									TCB1.INTCTRL = TCB_CAPT_bm; \
									TCB1.CTRLA   = TCB_ENABLE_bm; \
									}
									
	#define TICK_stop()				{ \
									TCB1.INTCTRL &= ~TCB_CAPT_bm; \
									TCB1.CTRLA   &= ~TCB_ENABLE_bm; \
									}
		
#elif ( configUSE_TIMER_INSTANCE == 2 )

	#define TICK_INT_vect			TCB2_INT_vect
	#define INT_FLAGS				TCB2_INTFLAGS
	#define INT_MASK				TCB_CAPT_bm

	#define TICK_init()				{ \
									TCB2.CCMP    = configCPU_CLOCK_HZ / configTICK_RATE_HZ; \
									TCB2.INTCTRL = TCB_CAPT_bm; \
									TCB2.CTRLA   = TCB_ENABLE_bm; \
									}
									
	#define TICK_stop()				{ \
									TCB2.INTCTRL &= ~TCB_CAPT_bm; \
									TCB2.CTRLA   &= ~TCB_ENABLE_bm; \
									}
		
#elif ( configUSE_TIMER_INSTANCE == 3 )

	#define TICK_INT_vect			TCB3_INT_vect
	#define INT_FLAGS				TCB3_INTFLAGS
	#define INT_MASK				TCB_CAPT_bm
	
	#define TICK_init()				{ \
									TCB3.CCMP    = configCPU_CLOCK_HZ / configTICK_RATE_HZ; \
									TCB3.INTCTRL = TCB_CAPT_bm; \
									TCB3.CTRLA   = TCB_ENABLE_bm; \
									}
									
	#define TICK_stop()				{ \
									TCB3.INTCTRL &= ~TCB_CAPT_bm; \
									TCB3.CTRLA   &= ~TCB_ENABLE_bm; \
									}
	
#elif ( configUSE_TIMER_INSTANCE == 4 )

	#define TICK_INT_vect			TCB4_INT_vect
	#define INT_FLAGS				TCB4_INTFLAGS
	#define INT_MASK				TCB_CAPT_bm
	
	#define TICK_init()				{ \
									TCB4.CCMP    = configCPU_CLOCK_HZ / configTICK_RATE_HZ; \
									TCB4.INTCTRL = TCB_CAPT_bm; \
									TCB4.CTRLA   = TCB_ENABLE_bm; \
									}
		
	#define TICK_stop()				{ \
									TCB4.INTCTRL &= ~TCB_CAPT_bm; \
									TCB4.CTRLA   &= ~TCB_ENABLE_bm; \
									}
	
#elif ( configUSE_TIMER_INSTANCE == 5 )
	
	/* Hertz to period for RTC setup */
	#define RTC_PERIOD_HZ(x)		(32768 * ((1.0 / x)))
	
	#define TICK_INT_vect			RTC_CNT_vect
	#define INT_FLAGS				RTC_INTFLAGS
	#define INT_MASK				RTC_OVF_bm
	
	#define TICK_init()				{ \
									while (RTC.STATUS > 0); \
									RTC.CTRLA    = RTC_PRESCALER_DIV1_gc | 1 << RTC_RTCEN_bp; \
									RTC.PER      = RTC_PERIOD_HZ(configTICK_RATE_HZ); \
									RTC.INTCTRL  |= 1 << RTC_OVF_bp; \
									}
	
	#define TICK_stop()				{ \
									RTC.CTRLA	 &= ~(1 << RTC_RTCEN_bp); \
									RTC.INTCTRL	 &= ~(1 << RTC_OVF_bp); \
									}

#else
	#undef TICK_INT_vect
	#undef INT_FLAGS
	#undef INT_MASK
	#undef TICK_init()
	#error Invalid timer setting.
#endif

/*-----------------------------------------------------------*/

#endif /* PORTHARDWARE_H */
