diff options
Diffstat (limited to 'GCC/AVR_AVRDx/porthardware.h')
-rw-r--r-- | GCC/AVR_AVRDx/porthardware.h | 110 |
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 */ |