You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
97 lines
3.7 KiB
C
97 lines
3.7 KiB
C
#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; \
|
|
}
|
|
|
|
#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; \
|
|
}
|
|
|
|
#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; \
|
|
}
|
|
|
|
#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; \
|
|
}
|
|
|
|
#elif ( configUSE_TIMER_INSTANCE == 4 )
|
|
|
|
#define TICK_INT_vect RTC_CNT_vect
|
|
#define INT_FLAGS RTC_INTFLAGS
|
|
#define INT_MASK RTC_OVF_bm
|
|
|
|
/* Hertz to period for RTC setup */
|
|
#define RTC_PERIOD_HZ( x ) ( 32768 * ( ( 1.0 / x ) ) )
|
|
#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; \
|
|
}
|
|
|
|
#else /* if ( configUSE_TIMER_INSTANCE == 0 ) */
|
|
#undef TICK_INT_vect
|
|
#undef INT_FLAGS
|
|
#undef INT_MASK
|
|
#undef TICK_init()
|
|
#error Invalid timer setting.
|
|
#endif /* if ( configUSE_TIMER_INSTANCE == 0 ) */
|
|
|
|
/*-----------------------------------------------------------*/
|
|
|
|
#endif /* PORTHARDWARE_H */
|