Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/FreeRTOS/FreeRTOS-Kernel-Partner-Supported-Ports.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'GCC/AVR_AVRDx/porthardware.h')
-rw-r--r--GCC/AVR_AVRDx/porthardware.h110
1 files changed, 97 insertions, 13 deletions
diff --git a/GCC/AVR_AVRDx/porthardware.h b/GCC/AVR_AVRDx/porthardware.h
index ca0302e..52e3f12 100644
--- a/GCC/AVR_AVRDx/porthardware.h
+++ b/GCC/AVR_AVRDx/porthardware.h
@@ -55,6 +55,15 @@
TCB0.INTCTRL = TCB_CAPT_bm; \
TCB0.CTRLA = TCB_ENABLE_bm; \
}
+
+ #define TICK_TMR_STOP() TCB0.CTRLA = 0x00;
+ #define TICK_TMR_START() \
+ { \
+ TCB0.INTFLAGS = TCB_CAPT_bm; \
+ TCB0.CTRLA = TCB_ENABLE_bm; \
+ }
+ #define TICK_TMR_READ() TCB0.CNT
+ #define TICK_INT_READY() (TCB0.INTCTRL & TCB_CAPT_bm)
#elif ( configUSE_TIMER_INSTANCE == 1 )
@@ -68,6 +77,15 @@
TCB1.INTCTRL = TCB_CAPT_bm; \
TCB1.CTRLA = TCB_ENABLE_bm; \
}
+
+ #define TICK_TMR_STOP() TCB1.CTRLA = 0x00;
+ #define TICK_TMR_START() \
+ { \
+ TCB1.INTFLAGS = TCB_CAPT_bm; \
+ TCB1.CTRLA = TCB_ENABLE_bm; \
+ }
+ #define TICK_TMR_READ() TCB1.CNT
+ #define TICK_INT_READY() (TCB1.INTCTRL & TCB_CAPT_bm)
#elif ( configUSE_TIMER_INSTANCE == 2 )
@@ -81,6 +99,15 @@
TCB2.INTCTRL = TCB_CAPT_bm; \
TCB2.CTRLA = TCB_ENABLE_bm; \
}
+
+ #define TICK_TMR_STOP() TCB2.CTRLA = 0x00;
+ #define TICK_TMR_START() \
+ { \
+ TCB2.INTFLAGS = TCB_CAPT_bm; \
+ TCB2.CTRLA = TCB_ENABLE_bm; \
+ }
+ #define TICK_TMR_READ() TCB2.CNT
+ #define TICK_INT_READY() (TCB2.INTCTRL & TCB_CAPT_bm)
#elif ( configUSE_TIMER_INSTANCE == 3 )
@@ -94,6 +121,15 @@
TCB3.INTCTRL = TCB_CAPT_bm; \
TCB3.CTRLA = TCB_ENABLE_bm; \
}
+
+ #define TICK_TMR_STOP() TCB3.CTRLA = 0x00;
+ #define TICK_TMR_START() \
+ { \
+ TCB3.INTFLAGS = TCB_CAPT_bm; \
+ TCB3.CTRLA = TCB_ENABLE_bm; \
+ }
+ #define TICK_TMR_READ() TCB3.CNT
+ #define TICK_INT_READY() (TCB3.INTCTRL & TCB_CAPT_bm)
#elif ( configUSE_TIMER_INSTANCE == 4 )
@@ -107,31 +143,79 @@
TCB4.INTCTRL = TCB_CAPT_bm; \
TCB4.CTRLA = TCB_ENABLE_bm; \
}
+ #define TICK_TMR_STOP() TCB4.CTRLA = 0x00;
+ #define TICK_TMR_START() \
+ { \
+ TCB4.INTFLAGS = TCB_CAPT_bm; \
+ TCB4.CTRLA = TCB_ENABLE_bm; \
+ }
+ #define TICK_TMR_READ() TCB4.CNT
+ #define TICK_INT_READY() (TCB4.INTCTRL & TCB_CAPT_bm)
#elif ( configUSE_TIMER_INSTANCE == 5 )
- #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; \
- }
+ #if ( configUSE_TICKLESS_IDLE == 1 )
+
+ /* RTC is not supported as tick timer when tickless mode is used */
+ #error Invalid timer setting.
+
+ #else
+
+ #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; \
+ }
+ #undef TICK_TMR_STOP()
+ #undef TICK_TMR_START()
+ #undef TICK_TMR_READ()
+ #undef TICK_INT_READY()
+ #endif
#else /* if ( configUSE_TIMER_INSTANCE == 0 ) */
#undef TICK_INT_vect
#undef INT_FLAGS
#undef INT_MASK
#undef TICK_init()
+ #undef TICK_TMR_STOP()
+ #undef TICK_TMR_START()
+ #undef TICK_TMR_READ()
+ #undef TICK_INT_READY()
#error Invalid timer setting.
#endif /* if ( configUSE_TIMER_INSTANCE == 0 ) */
/*-----------------------------------------------------------*/
+
+#if ( configUSE_TICKLESS_IDLE == 1 )
+
+#define LOW_POWER_CLOCK (32768UL)
+
+#define RTC_TICK_PERIOD_MS ( ( TickType_t ) 1000 / configTICK_RATE_HZ )
+#define RTC_TICKS_TO_COUNTS(tick_cnt) (uint32_t)(((float)(tick_cnt * LOW_POWER_CLOCK)/configTICK_RATE_HZ) - 0.5)
+#define RTC_COUNTS_TO_TICKS(counts) (uint32_t)((float)((counts * 1.0) * configTICK_RATE_HZ)/LOW_POWER_CLOCK )
+
+
+#define RTC_INIT() \
+{ \
+ while( RTC.STATUS > 0 ) {; } \
+ RTC.PER = 0xFFFF; \
+ RTC.CMP = 0x3FFF; \
+ RTC.CNT = 0; \
+ RTC.INTFLAGS = RTC_OVF_bm | RTC_CMP_bm; \
+ RTC.CTRLA = RTC_RUNSTDBY_bm | RTC_PRESCALER_DIV1_gc | RTC_RTCEN_bm ; \
+ RTC.INTCTRL = RTC_OVF_bm | RTC_CMP_bm; \
+}
+
+#endif
+
+
#endif /* PORTHARDWARE_H */