summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGregory Nutt <gnutt@nuttx.org>2015-01-13 07:49:20 -0600
committerGregory Nutt <gnutt@nuttx.org>2015-01-13 07:49:20 -0600
commitfe9a6e048b5db747ec2f827f2edf8c81d416d81f (patch)
tree59e1bf940afbefbe02b459e91fff5affee4a88f7
parent136864097e628fc6cfe4ba36ba66e3b132e06284 (diff)
downloadpx4-nuttx-fe9a6e048b5db747ec2f827f2edf8c81d416d81f.tar.gz
px4-nuttx-fe9a6e048b5db747ec2f827f2edf8c81d416d81f.tar.bz2
px4-nuttx-fe9a6e048b5db747ec2f827f2edf8c81d416d81f.zip
Tiva Timer: Add conditional compilation to enable/disable each timer feature. Not only does this reduce the footprint by suppressing unused features, it also protects from partially implemented features that are now conditioned on EXPERIMENTAL
-rw-r--r--nuttx/arch/arm/src/tiva/Kconfig48
-rw-r--r--nuttx/arch/arm/src/tiva/tiva_timer.h69
-rw-r--r--nuttx/arch/arm/src/tiva/tiva_timerlib.c123
3 files changed, 231 insertions, 9 deletions
diff --git a/nuttx/arch/arm/src/tiva/Kconfig b/nuttx/arch/arm/src/tiva/Kconfig
index 59f045c7b..1c1fa7ec4 100644
--- a/nuttx/arch/arm/src/tiva/Kconfig
+++ b/nuttx/arch/arm/src/tiva/Kconfig
@@ -746,6 +746,54 @@ if TIVA_TIMER
menu "Tiva Timer Configuration"
+config TIVA_TIMER_DRIVER
+ bool
+ default n
+
+config TIVA_TIMER_32BIT
+ bool "32-bit timer support"
+ default n
+
+if TIVA_TIMER_32BIT
+
+config TIVA_TIMER32_PERIODIC
+ bool "32-bit one-shot/periodic timer support"
+ default n
+ select TIVA_TIMER_DRIVER if TIMER
+
+config TIVA_TIMER32_RTC
+ bool "32-bit RTC (needs 32.768-KHz input)"
+ default n
+
+endif # TIVA_TIMER_32BIT
+
+config TIVA_TIMER_16BIT
+ bool "16-bit Timers"
+ default n
+
+if TIVA_TIMER_16BIT
+
+config TIVA_TIMER16_PERIODIC
+ bool "16-bit one-shot/periodic timer support"
+ default n
+
+config TIVA_TIMER32_EDGECOUNT
+ bool "16-bit input edge-count capture support"
+ default n
+ depends on EXPERIMENTAL
+
+config TIVA_TIMER32_TIMECAP
+ bool "16-bit input time capture support"
+ default n
+ depends on EXPERIMENTAL
+
+config TIVA_TIMER32_PWM
+ bool "16-bit PWM output support"
+ default n
+ depends on EXPERIMENTAL
+
+endif # TIVA_TIMER_16BIT
+
config TIVA_TIMER_REGDEBUG
bool "Register level debug"
default n
diff --git a/nuttx/arch/arm/src/tiva/tiva_timer.h b/nuttx/arch/arm/src/tiva/tiva_timer.h
index 4d5ed1e87..d3f8f98ac 100644
--- a/nuttx/arch/arm/src/tiva/tiva_timer.h
+++ b/nuttx/arch/arm/src/tiva/tiva_timer.h
@@ -178,6 +178,7 @@ enum tiva_timer16mode_e
typedef FAR void *TIMER_HANDLE;
+#ifdef CONFIG_TIVA_TIMER_32BIT
/* This type describes the 32-bit timer interrupt handler.
*
* Input Parameters:
@@ -204,22 +205,28 @@ struct tiva_timer32config_s
union
{
+#ifdef CONFIG_TIVA_TIMER32_PERIODIC
/* 32-bit programmable one-shot or periodic timer */
struct
{
uint32_t interval; /* Value for interval load register */
} periodic;
+#endif
+#ifdef CONFIG_TIVA_TIMER32_RTC
/* 32-bit RTC with external 32.768-KHz input */
struct
{
/* No special configuration settings */
} rtc;
+#endif
} u;
};
+#endif
+#ifdef CONFIG_TIVA_TIMER_16BIT
/* This type describes the 16-bit timer interrupt handler
*
* Input Parameters:
@@ -249,6 +256,7 @@ struct tiva_timer16config_s
union
{
+#ifdef CONFIG_TIVA_TIMER16_PERIODIC
/* 16-bit programmable one-shot or periodic timer */
struct
@@ -256,29 +264,37 @@ struct tiva_timer16config_s
uint8_t prescaler; /* Prescaler-1: 0-255 corresponding to 1-256 */
uint16_t interval; /* Value for interval load register */
} periodic;
+#endif
+#ifdef CONFIG_TIVA_TIMER32_EDGECOUNT
/* 16-bit input edge-count capture mode w/8-bit prescaler */
struct
{
/* TODO: To be provided */
} count;
+#endif
+#ifdef CONFIG_TIVA_TIMER32_TIMECAP
/* 16-bit input time capture mode w/8-bit prescaler */
struct
{
/* TODO: To be provided */
} time;
+#endif
+#ifdef CONFIG_TIVA_TIMER32_PWM
/* 16-bit PWM output mode w/8-bit prescaler */
struct
{
/* TODO: To be provided */
} pwm;
+#endif
} u;
};
+#endif
/* This structure describes usage of both timers on a GPTIM module */
@@ -289,6 +305,7 @@ struct tiva_gptmconfig_s
bool alternate; /* False: Use SysClk; True: Use alternate clock source */
};
+#ifdef CONFIG_TIVA_TIMER_32BIT
/* This structure is cast compatible with struct tiva_gptmconfig_s and
* describes usage of the single 32-bit timers on a GPTM module.
*/
@@ -298,16 +315,19 @@ struct tiva_gptm32config_s
struct tiva_gptmconfig_s cmn;
struct tiva_timer32config_s config;
};
+#endif
/* This structure is cast compatible with struct tiva_gptmconfig_s and
* describes usage of both bit-bit timers A/B on a GPTM module.
*/
+#ifdef CONFIG_TIVA_TIMER_16BIT
struct tiva_gptm16config_s
{
struct tiva_gptmconfig_s cmn;
struct tiva_timer16config_s config[2];
};
+#endif
/****************************************************************************
* Public Data
@@ -430,7 +450,9 @@ void tiva_gptm_modifyreg(TIMER_HANDLE handle, unsigned int offset,
*
****************************************************************************/
+#ifdef CONFIG_TIVA_TIMER_32BIT
void tiva_timer32_start(TIMER_HANDLE handle);
+#endif
/****************************************************************************
* Name: tiva_timer16_start
@@ -448,10 +470,12 @@ void tiva_timer32_start(TIMER_HANDLE handle);
*
****************************************************************************/
+#ifdef CONFIG_TIVA_TIMER_16BIT
void tiva_timer16_start(TIMER_HANDLE handle, int tmndx);
-#define tiva_timer16a_start(h) tiva_timer16_start(h, TIMER16A)
-#define tiva_timer16b_start(h) tiva_timer16_start(h, TIMER16B)
+# define tiva_timer16a_start(h) tiva_timer16_start(h, TIMER16A)
+# define tiva_timer16b_start(h) tiva_timer16_start(h, TIMER16B)
+#endif
/****************************************************************************
* Name: tiva_timer32_stop
@@ -468,7 +492,9 @@ void tiva_timer16_start(TIMER_HANDLE handle, int tmndx);
*
****************************************************************************/
+#ifdef CONFIG_TIVA_TIMER_32BIT
void tiva_timer32_stop(TIMER_HANDLE handle);
+#endif
/****************************************************************************
* Name: tiva_timer16_stop
@@ -486,10 +512,12 @@ void tiva_timer32_stop(TIMER_HANDLE handle);
*
****************************************************************************/
+#ifdef CONFIG_TIVA_TIMER_16BIT
void tiva_timer16_stop(TIMER_HANDLE handle, int tmndx);
-#define tiva_timer16a_stop(h) tiva_timer16_stop(h, TIMER16A)
-#define tiva_timer16b_stop(h) tiva_timer16_stop(h, TIMER16B)
+# define tiva_timer16a_stop(h) tiva_timer16_stop(h, TIMER16A)
+# define tiva_timer16b_stop(h) tiva_timer16_stop(h, TIMER16B)
+#endif
/****************************************************************************
* Name: tiva_timer32_counter
@@ -505,10 +533,12 @@ void tiva_timer16_stop(TIMER_HANDLE handle, int tmndx);
*
****************************************************************************/
+#ifdef CONFIG_TIVA_TIMER_32BIT
static inline uint32_t tiva_timer32_counter(TIMER_HANDLE handle)
{
return tiva_gptm_getreg(handle, TIVA_TIMER_TAR_OFFSET);
}
+#endif
/****************************************************************************
* Name: tiva_timer16_counter
@@ -534,8 +564,13 @@ static inline uint32_t tiva_timer32_counter(TIMER_HANDLE handle)
*
****************************************************************************/
+#ifdef CONFIG_TIVA_TIMER_16BIT
uint32_t tiva_timer16_counter(TIMER_HANDLE handle, int tmndx);
+# define tiva_timer16a_counter(h) tiva_timer16_counter(h, TIMER16A)
+# define tiva_timer16b_counter(h) tiva_timer16_counter(h, TIMER16B)
+#endif
+
/****************************************************************************
* Name: tiva_timer32_setinterval
*
@@ -552,7 +587,9 @@ uint32_t tiva_timer16_counter(TIMER_HANDLE handle, int tmndx);
*
****************************************************************************/
+#ifdef CONFIG_TIVA_TIMER_32BIT
void tiva_timer32_setinterval(TIMER_HANDLE handle, uint32_t interval);
+#endif
/****************************************************************************
* Name: tiva_timer16_setinterval
@@ -571,10 +608,12 @@ void tiva_timer32_setinterval(TIMER_HANDLE handle, uint32_t interval);
*
****************************************************************************/
+#ifdef CONFIG_TIVA_TIMER_16BIT
void tiva_timer16_setinterval(TIMER_HANDLE handle, uint16_t interval, int tmndx);
-#define tiva_timer16a_setinterval(h,l) tiva_timer16_setinterval(h,l,TIMER16A)
-#define tiva_timer16b_setinterval(h,l) tiva_timer16_setinterval(h,l,TIMER16B)
+# define tiva_timer16a_setinterval(h,l) tiva_timer16_setinterval(h,l,TIMER16A)
+# define tiva_timer16b_setinterval(h,l) tiva_timer16_setinterval(h,l,TIMER16B)
+#endif
/****************************************************************************
* Name: tiva_timer32_absmatch
@@ -593,11 +632,13 @@ void tiva_timer16_setinterval(TIMER_HANDLE handle, uint16_t interval, int tmndx)
*
****************************************************************************/
+#ifdef CONFIG_TIVA_TIMER_32BIT
static inline void tiva_timer32_absmatch(TIMER_HANDLE handle,
uint32_t absmatch)
{
tiva_gptm_putreg(handle, TIVA_TIMER_TAMATCHR_OFFSET, absmatch);
}
+#endif
/****************************************************************************
* Name: tiva_timer16_absmatch
@@ -617,6 +658,7 @@ static inline void tiva_timer32_absmatch(TIMER_HANDLE handle,
*
****************************************************************************/
+#ifdef CONFIG_TIVA_TIMER_16BIT
static inline void tiva_timer16_absmatch(TIMER_HANDLE handle,
uint16_t absmatch, int tmndx)
{
@@ -635,6 +677,7 @@ static inline void tiva_timer16b_absmatch(TIMER_HANDLE handle, uint16_t absmatch
{
tiva_gptm_putreg(handle, TIVA_TIMER_TBMATCHR_OFFSET, absmatch);
}
+#endif
/****************************************************************************
* Name: tiva_rtc_settime
@@ -656,10 +699,12 @@ static inline void tiva_timer16b_absmatch(TIMER_HANDLE handle, uint16_t absmatch
*
****************************************************************************/
+#ifdef CONFIG_TIVA_TIMER32_RTC
static inline void tiva_rtc_settime(TIMER_HANDLE handle, uint32_t newtime)
{
tiva_gptm_putreg(handle, TIVA_TIMER_TAILR_OFFSET, newtime);
}
+#endif
/****************************************************************************
* Name: tiva_rtc_setalarm
@@ -686,7 +731,9 @@ static inline void tiva_rtc_settime(TIMER_HANDLE handle, uint32_t newtime)
*
****************************************************************************/
+#ifdef CONFIG_TIVA_TIMER32_RTC
void tiva_rtc_setalarm(TIMER_HANDLE handle, uint32_t delay);
+#endif
/****************************************************************************
* Name: tiva_timer32_relmatch
@@ -717,7 +764,9 @@ void tiva_rtc_setalarm(TIMER_HANDLE handle, uint32_t delay);
*
****************************************************************************/
+#ifdef CONFIG_TIVA_TIMER32_PERIODIC
void tiva_timer32_relmatch(TIMER_HANDLE handle, uint32_t relmatch);
+#endif
/****************************************************************************
* Name: tiva_timer16_relmatch
@@ -759,10 +808,12 @@ void tiva_timer32_relmatch(TIMER_HANDLE handle, uint32_t relmatch);
*
****************************************************************************/
+#ifdef CONFIG_TIVA_TIMER16_PERIODIC
void tiva_timer16_relmatch(TIMER_HANDLE handle, uint32_t relmatch, int tmndx);
-#define tiva_timer16a_relmatch(h,r) tiva_timer16_relmatch(h,r,TIMER16A)
-#define tiva_timer16b_relmatch(h,r) tiva_timer16_relmatch(h,r,TIMER16B)
+# define tiva_timer16a_relmatch(h,r) tiva_timer16_relmatch(h,r,TIMER16A)
+# define tiva_timer16b_relmatch(h,r) tiva_timer16_relmatch(h,r,TIMER16B)
+#endif
/****************************************************************************
* Name: tiva_gptm0_synchronize
@@ -779,10 +830,12 @@ void tiva_timer16_relmatch(TIMER_HANDLE handle, uint32_t relmatch, int tmndx);
*
****************************************************************************/
+#ifdef CONFIG_TIVER_TIMER0
static inline void tiva_gptm0_synchronize(uint32_t sync)
{
putreg32(sync, TIVA_TIMER0_SYNC);
}
+#endif
/****************************************************************************
* Name: tiva_timer_register
diff --git a/nuttx/arch/arm/src/tiva/tiva_timerlib.c b/nuttx/arch/arm/src/tiva/tiva_timerlib.c
index 837693e6b..f5c32b0c3 100644
--- a/nuttx/arch/arm/src/tiva/tiva_timerlib.c
+++ b/nuttx/arch/arm/src/tiva/tiva_timerlib.c
@@ -72,9 +72,13 @@
struct tiva_gptmattr_s
{
uintptr_t base; /* Register base address */
- int irq[2]; /* Timer A/B interrupt numbers */
+ uint16_t irq[2]; /* Timer A/B interrupt numbers */
+#ifdef CONFIG_TIVA_TIMER_32BIT
xcpt_t handler32; /* Handler for 32-bit timer interrupts */
+#endif
+#ifdef CONFIG_TIVA_TIMER_16BIT
xcpt_t handler16[2]; /* Handlers for 16-bit timer A/B interrupts */
+#endif
};
/* This structure represents the state of a GPTM module */
@@ -116,6 +120,7 @@ static void tiva_putreg(struct tiva_gptmstate_s *priv, unsigned int offset,
/* Interrupt handling */
+#ifdef CONFIG_TIVA_TIMER_32BIT
static int tiva_timer32_interrupt(struct tiva_gptmstate_s *priv);
#ifdef CONFIG_TIVA_TIMER0
static int tiva_gptm0_interrupt(int irq, FAR void *context);
@@ -141,7 +146,9 @@ static int tiva_gptm6_interrupt(int irq, FAR void *context);
#ifdef CONFIG_TIVA_TIMER7
static int tiva_gptm7_interrupt(int irq, FAR void *context);
#endif
+#endif
+#ifdef CONFIG_TIVA_TIMER_16BIT
static int tiva_timer16_interrupt(struct tiva_gptmstate_s *priv,
int tmndx);
#ifdef CONFIG_TIVA_TIMER0
@@ -176,26 +183,43 @@ static int tiva_timer6b_interrupt(int irq, FAR void *context);
static int tiva_timer7a_interrupt(int irq, FAR void *context);
static int tiva_timer7b_interrupt(int irq, FAR void *context);
#endif
+#endif
/* Timer initialization and configuration */
+#ifdef CONFIG_TIVA_TIMER32_PERIODIC
static int tiva_oneshot_periodic_mode32(struct tiva_gptmstate_s *priv,
const struct tiva_timer32config_s *timer);
+#endif
+#ifdef CONFIG_TIVA_TIMER16_PERIODIC
static int tiva_oneshot_periodic_mode16(struct tiva_gptmstate_s *priv,
const struct tiva_timer16config_s *timer, int tmndx);
+#endif
+#ifdef CONFIG_TIVA_TIMER32_RTC
static int tiva_rtc_mode32(struct tiva_gptmstate_s *priv,
const struct tiva_timer32config_s *timer);
+#endif
+#ifdef CONFIG_TIVA_TIMER32_EDGECOUNT
static int tiva_input_edgecount_mode16(struct tiva_gptmstate_s *priv,
const struct tiva_timer16config_s *timer, int tmndx);
+#endif
+#ifdef CONFIG_TIVA_TIMER32_TIMECAP
static int tiva_input_time_mode16(struct tiva_gptmstate_s *priv,
const struct tiva_timer16config_s *timer, int tmndx);
+#endif
+#ifdef CONFIG_TIVA_TIMER32_PWM
static int tiva_pwm_mode16(struct tiva_gptmstate_s *priv,
const struct tiva_timer16config_s *timer, int tmndx);
+#endif
+#ifdef CONFIG_TIVA_TIMER_32BIT
static int tiva_timer32_configure(struct tiva_gptmstate_s *priv,
const struct tiva_timer32config_s *timer);
+#endif
+#ifdef CONFIG_TIVA_TIMER_16BIT
static int tiva_timer16_configure(struct tiva_gptmstate_s *priv,
const struct tiva_timer16config_s *timer, int tmndx);
+#endif
/****************************************************************************
* Private Data
@@ -206,8 +230,12 @@ static const struct tiva_gptmattr_s g_gptm0_attr =
{
.base = TIVA_TIMER0_BASE,
.irq = { TIVA_IRQ_TIMER0A, TIVA_IRQ_TIMER0B },
+#ifdef CONFIG_TIVA_TIMER_32BIT
.handler32 = tiva_gptm0_interrupt,
+#endif
+#ifdef CONFIG_TIVA_TIMER_16BIT
.handler16 = { tiva_timer0a_interrupt, tiva_timer0b_interrupt },
+#endif
};
static struct tiva_gptmstate_s g_gptm0_state;
@@ -218,8 +246,12 @@ static const struct tiva_gptmattr_s g_gptm1_attr =
{
.base = TIVA_TIMER1_BASE,
.irq = { TIVA_IRQ_TIMER1A, TIVA_IRQ_TIMER1B },
+#ifdef CONFIG_TIVA_TIMER_32BIT
.handler32 = tiva_gptm1_interrupt,
+#endif
+#ifdef CONFIG_TIVA_TIMER_16BIT
.handler16 = { tiva_timer1a_interrupt, tiva_timer1b_interrupt },
+#endif
};
static struct tiva_gptmstate_s g_gptm1_state;
@@ -230,8 +262,12 @@ static const struct tiva_gptmattr_s g_gptm2_attr =
{
.base = TIVA_TIMER2_BASE,
.irq = { TIVA_IRQ_TIMER2A, TIVA_IRQ_TIMER2B },
+#ifdef CONFIG_TIVA_TIMER_32BIT
.handler32 = tiva_gptm2_interrupt,
+#endif
+#ifdef CONFIG_TIVA_TIMER_16BIT
.handler16 = { tiva_timer2a_interrupt, tiva_timer2b_interrupt },
+#endif
};
static struct tiva_gptmstate_s g_gptm2_state;
@@ -242,8 +278,12 @@ static const struct tiva_gptmattr_s g_gptm3_attr =
{
.base = TIVA_TIMER3_BASE,
.irq = { TIVA_IRQ_TIMER3A, TIVA_IRQ_TIMER3B },
+#ifdef CONFIG_TIVA_TIMER_32BIT
.handler32 = tiva_gptm3_interrupt,
+#endif
+#ifdef CONFIG_TIVA_TIMER_16BIT
.handler16 = { tiva_timer3a_interrupt, tiva_timer3b_interrupt },
+#endif
};
static struct tiva_gptmstate_s g_gptm3_state;
@@ -254,8 +294,12 @@ static const struct tiva_gptmattr_s g_gptm4_attr =
{
.base = TIVA_TIMER4_BASE,
.irq = { TIVA_IRQ_TIMER4A, TIVA_IRQ_TIMER4B },
+#ifdef CONFIG_TIVA_TIMER_32BIT
.handler32 = tiva_gptm4_interrupt,
+#endif
+#ifdef CONFIG_TIVA_TIMER_16BIT
.handler16 = { tiva_timer4a_interrupt, tiva_timer4b_interrupt },
+#endif
};
static struct tiva_gptmstate_s g_gptm4_state;
@@ -266,8 +310,12 @@ static const struct tiva_gptmattr_s g_gptm5_attr =
{
.base = TIVA_TIMER5_BASE,
.irq = { TIVA_IRQ_TIMER5A, TIVA_IRQ_TIMER5B },
+#ifdef CONFIG_TIVA_TIMER_32BIT
.handler32 = tiva_gptm5_interrupt,
+#endif
+#ifdef CONFIG_TIVA_TIMER_16BIT
.handler16 = { tiva_timer5a_interrupt, tiva_timer5b_interrupt },
+#endif
};
static struct tiva_gptmstate_s g_gptm5_state;
@@ -278,8 +326,12 @@ static const struct tiva_gptmattr_s g_gptm6_attr =
{
.base = TIVA_TIMER6_BASE,
.irq = { TIVA_IRQ_TIMER6A, TIVA_IRQ_TIMER6B },
+#ifdef CONFIG_TIVA_TIMER_32BIT
.handler32 = tiva_gptm6_interrupt,
+#endif
+#ifdef CONFIG_TIVA_TIMER_16BIT
.handler16 = { tiva_timer6a_interrupt, tiva_timer6b_interrupt },
+#endif
};
static struct tiva_gptmstate_s g_gptm6_state;
@@ -290,8 +342,12 @@ static const struct tiva_gptmattr_s g_gptm7_attr =
{
.base = TIVA_TIMER7_BASE,
.irq = { TIVA_IRQ_TIMER7A, TIVA_IRQ_TIMER7B },
+#ifdef CONFIG_TIVA_TIMER_32BIT
.handler32 = tiva_gptm7_interrupt,
+#endif
+#ifdef CONFIG_TIVA_TIMER_16BIT
.handler16 = { tiva_timer7a_interrupt, tiva_timer7b_interrupt },
+#endif
};
static struct tiva_gptmstate_s g_gptm7_state;
@@ -438,6 +494,7 @@ static void tiva_modifyreg(struct tiva_gptmstate_s *priv, unsigned int offset,
*
****************************************************************************/
+#ifdef CONFIG_TIVA_TIMER_32BIT
static int tiva_timer32_interrupt(struct tiva_gptmstate_s *priv)
{
const struct tiva_gptm32config_s *config32;
@@ -485,6 +542,7 @@ static int tiva_timer32_interrupt(struct tiva_gptmstate_s *priv)
return OK;
}
+#endif
/****************************************************************************
* Name: tiva_gptmN_interrupt, N=0..7
@@ -494,6 +552,7 @@ static int tiva_timer32_interrupt(struct tiva_gptmstate_s *priv)
*
****************************************************************************/
+#ifdef CONFIG_TIVA_TIMER_32BIT
#ifdef CONFIG_TIVA_TIMER0
static int tiva_gptm0_interrupt(int irq, FAR void *context)
{
@@ -549,6 +608,7 @@ static int tiva_gptm7_interrupt(int irq, FAR void *context)
return tiva_timer32_interrupt(&g_gptm7_state);
}
#endif
+#endif
/****************************************************************************
* Name: tiva_timer16_interrupt
@@ -558,6 +618,7 @@ static int tiva_gptm7_interrupt(int irq, FAR void *context)
*
****************************************************************************/
+#ifdef CONFIG_TIVA_TIMER_16BIT
static int tiva_timer16_interrupt(struct tiva_gptmstate_s *priv, int tmndx)
{
const struct tiva_gptm16config_s *config16;
@@ -607,6 +668,7 @@ static int tiva_timer16_interrupt(struct tiva_gptmstate_s *priv, int tmndx)
return OK;
}
+#endif
/****************************************************************************
* Name: tiva_timerNa_interrupt, tiva_timerNb_interrupt, N=0..7
@@ -616,6 +678,7 @@ static int tiva_timer16_interrupt(struct tiva_gptmstate_s *priv, int tmndx)
*
****************************************************************************/
+#ifdef CONFIG_TIVA_TIMER_16BIT
#ifdef CONFIG_TIVA_TIMER0
static int tiva_timer0a_interrupt(int irq, FAR void *context)
{
@@ -711,6 +774,7 @@ static int tiva_timer7b_interrupt(int irq, FAR void *context)
return tiva_timer16_interrupt(&g_gptm7_state, TIMER16B);
}
#endif
+#endif
/****************************************************************************
* Name: tiva_oneshot_periodic_mode32
@@ -720,6 +784,7 @@ static int tiva_timer7b_interrupt(int irq, FAR void *context)
*
****************************************************************************/
+#ifdef CONFIG_TIVA_TIMER32_PERIODIC
static int tiva_oneshot_periodic_mode32(struct tiva_gptmstate_s *priv,
const struct tiva_timer32config_s *timer)
{
@@ -929,6 +994,7 @@ static int tiva_oneshot_periodic_mode32(struct tiva_gptmstate_s *priv,
return OK;
}
+#endif
/****************************************************************************
* Name: tiva_oneshot_periodic_mode16
@@ -938,6 +1004,7 @@ static int tiva_oneshot_periodic_mode32(struct tiva_gptmstate_s *priv,
*
****************************************************************************/
+#ifdef CONFIG_TIVA_TIMER16_PERIODIC
static int tiva_oneshot_periodic_mode16(struct tiva_gptmstate_s *priv,
const struct tiva_timer16config_s *timer,
int tmndx)
@@ -1149,6 +1216,7 @@ static int tiva_oneshot_periodic_mode16(struct tiva_gptmstate_s *priv,
return OK;
}
+#endif
/****************************************************************************
* Name: tiva_rtc_mode32
@@ -1162,6 +1230,7 @@ static int tiva_oneshot_periodic_mode16(struct tiva_gptmstate_s *priv,
*
****************************************************************************/
+#ifdef CONFIG_TIVA_TIMER32_RTC
static int tiva_rtc_mode32(struct tiva_gptmstate_s *priv,
const struct tiva_timer32config_s *timer)
{
@@ -1235,6 +1304,7 @@ static int tiva_rtc_mode32(struct tiva_gptmstate_s *priv,
return OK;
}
+#endif
/****************************************************************************
* Name: tiva_input_edgecount_mode16
@@ -1244,6 +1314,7 @@ static int tiva_rtc_mode32(struct tiva_gptmstate_s *priv,
*
****************************************************************************/
+#ifdef CONFIG_TIVA_TIMER32_EDGECOUNT
static int tiva_input_edgecount_mode16(struct tiva_gptmstate_s *priv,
const struct tiva_timer16config_s *timer,
int tmndx)
@@ -1302,6 +1373,7 @@ static int tiva_input_edgecount_mode16(struct tiva_gptmstate_s *priv,
return -ENOSYS;
}
+#endif
/****************************************************************************
* Name: tiva_input_time_mode16
@@ -1311,6 +1383,7 @@ static int tiva_input_edgecount_mode16(struct tiva_gptmstate_s *priv,
*
****************************************************************************/
+#ifdef CONFIG_TIVA_TIMER32_TIMECAP
static int tiva_input_time_mode16(struct tiva_gptmstate_s *priv,
const struct tiva_timer16config_s *timer,
int tmndx)
@@ -1370,6 +1443,7 @@ static int tiva_input_time_mode16(struct tiva_gptmstate_s *priv,
return -ENOSYS;
}
+#endif
/****************************************************************************
* Name: tiva_pwm_mode16
@@ -1379,6 +1453,7 @@ static int tiva_input_time_mode16(struct tiva_gptmstate_s *priv,
*
****************************************************************************/
+#ifdef CONFIG_TIVA_TIMER32_PWM
static int tiva_pwm_mode16(struct tiva_gptmstate_s *priv,
const struct tiva_timer16config_s *timer,
int tmndx)
@@ -1438,6 +1513,7 @@ static int tiva_pwm_mode16(struct tiva_gptmstate_s *priv,
return -ENOSYS;
}
+#endif
/****************************************************************************
* Name: tiva_timer16_configure
@@ -1447,23 +1523,29 @@ static int tiva_pwm_mode16(struct tiva_gptmstate_s *priv,
*
****************************************************************************/
+#ifdef CONFIG_TIVA_TIMER_32BIT
static int tiva_timer32_configure(struct tiva_gptmstate_s *priv,
const struct tiva_timer32config_s *timer)
{
switch (priv->config->mode)
{
+#ifdef CONFIG_TIVA_TIMER32_PERIODIC
case TIMER32_MODE_ONESHOT: /* 32-bit programmable one-shot timer */
case TIMER32_MODE_PERIODIC: /* 32-bit programmable periodic timer */
return tiva_oneshot_periodic_mode32(priv, timer);
+#endif
+#ifdef CONFIG_TIVA_TIMER32_RTC
case TIMER32_MODE_RTC: /* 32-bit RTC with external 32.768-KHz
* input */
return tiva_rtc_mode32(priv, timer);
+#endif
default:
return -EINVAL;
}
}
+#endif
/****************************************************************************
* Name: tiva_timer16_configure
@@ -1473,6 +1555,7 @@ static int tiva_timer32_configure(struct tiva_gptmstate_s *priv,
*
****************************************************************************/
+#ifdef CONFIG_TIVA_TIMER_16BIT
static int tiva_timer16_configure(struct tiva_gptmstate_s *priv,
const struct tiva_timer16config_s *timer,
int tmndx)
@@ -1484,26 +1567,35 @@ static int tiva_timer16_configure(struct tiva_gptmstate_s *priv,
case TIMER16_MODE_NONE:
return OK;
+#ifdef CONFIG_TIVA_TIMER16_PERIODIC
case TIMER16_MODE_ONESHOT: /* 16-bit programmable one-shot timer */
case TIMER16_MODE_PERIODIC: /* 16-bit programmable periodic timer */
return tiva_oneshot_periodic_mode16(priv, timer, tmndx);
+#endif
+#ifdef CONFIG_TIVA_TIMER32_EDGECOUNT
case TIMER16_MODE_COUNT_CAPTURE: /* 16-bit input-edge count-capture
* mode w/8-bit prescaler */
return tiva_input_edgecount_mode16(priv, timer, tmndx);
+#endif
+#ifdef CONFIG_TIVA_TIMER32_TIMECAP
case TIMER16_MODE_TIME_CAPTURE: /* 16-bit input-edge time-capture
* mode w/8-bit prescaler */
return tiva_input_time_mode16(priv, timer, tmndx);
+#endif
+#ifdef CONFIG_TIVA_TIMER32_PWM
case TIMER16_MODE_PWM: /* 16-bit PWM output mode w/8-bit
* prescaler */
return tiva_pwm_mode16(priv, timer, tmndx);
+#endif
default:
return -EINVAL;
}
}
+#endif
/****************************************************************************
* Public Functions
@@ -1687,6 +1779,7 @@ TIMER_HANDLE tiva_gptm_configure(const struct tiva_gptmconfig_s *config)
if (config->mode != TIMER16_MODE)
{
+#ifdef CONFIG_TIVA_TIMER_32BIT
const struct tiva_gptm32config_s *config32 =
(const struct tiva_gptm32config_s *)config;
@@ -1701,9 +1794,13 @@ TIMER_HANDLE tiva_gptm_configure(const struct tiva_gptmconfig_s *config)
ret = tiva_timer32_configure(priv, &config32->config);
}
+#else
+ return (TIMER_HANDLE)NULL;
+#endif
}
else
{
+#ifdef CONFIG_TIVA_TIMER_16BIT
const struct tiva_gptm16config_s *config16 =
(const struct tiva_gptm16config_s *)config;
@@ -1738,6 +1835,9 @@ TIMER_HANDLE tiva_gptm_configure(const struct tiva_gptmconfig_s *config)
ret = tiva_timer16_configure(priv, &config16->config[TIMER16B],
TIMER16B);
}
+#else
+ return (TIMER_HANDLE)NULL;
+#endif
}
/* Return the timer handler if successfully configured */
@@ -1894,6 +1994,7 @@ void tiva_gptm_modifyreg(TIMER_HANDLE handle, unsigned int offset,
*
****************************************************************************/
+#ifdef CONFIG_TIVA_TIMER_32BIT
void tiva_timer32_start(TIMER_HANDLE handle)
{
struct tiva_gptmstate_s *priv = (struct tiva_gptmstate_s *)handle;
@@ -1913,6 +2014,7 @@ void tiva_timer32_start(TIMER_HANDLE handle)
up_enable_irq(priv->attr->irq[TIMER32]);
}
}
+#endif
/****************************************************************************
* Name: tiva_timer16_start
@@ -1930,6 +2032,7 @@ void tiva_timer32_start(TIMER_HANDLE handle)
*
****************************************************************************/
+#ifdef CONFIG_TIVA_TIMER_16BIT
void tiva_timer16_start(TIMER_HANDLE handle, int tmndx)
{
struct tiva_gptmstate_s *priv = (struct tiva_gptmstate_s *)handle;
@@ -1953,6 +2056,7 @@ void tiva_timer16_start(TIMER_HANDLE handle, int tmndx)
up_enable_irq(priv->attr->irq[tmndx]);
}
}
+#endif
/****************************************************************************
* Name: tiva_timer32_stop
@@ -1969,6 +2073,7 @@ void tiva_timer16_start(TIMER_HANDLE handle, int tmndx)
*
****************************************************************************/
+#ifdef CONFIG_TIVA_TIMER_32BIT
void tiva_timer32_stop(TIMER_HANDLE handle)
{
struct tiva_gptmstate_s *priv = (struct tiva_gptmstate_s *)handle;
@@ -1983,6 +2088,7 @@ void tiva_timer32_stop(TIMER_HANDLE handle)
tiva_modifyreg(priv, TIVA_TIMER_CTL_OFFSET, TIMER_CTL_TAEN, 0);
}
+#endif
/****************************************************************************
* Name: tiva_timer16_stop
@@ -2000,6 +2106,7 @@ void tiva_timer32_stop(TIMER_HANDLE handle)
*
****************************************************************************/
+#ifdef CONFIG_TIVA_TIMER_16BIT
void tiva_timer16_stop(TIMER_HANDLE handle, int tmndx)
{
struct tiva_gptmstate_s *priv = (struct tiva_gptmstate_s *)handle;
@@ -2016,6 +2123,7 @@ void tiva_timer16_stop(TIMER_HANDLE handle, int tmndx)
clrbits = tmndx ? TIMER_CTL_TBEN : TIMER_CTL_TAEN;
tiva_gptm_modifyreg(handle, TIVA_TIMER_CTL_OFFSET, clrbits, 0);
}
+#endif
/****************************************************************************
* Name: tiva_timer16_counter
@@ -2041,6 +2149,7 @@ void tiva_timer16_stop(TIMER_HANDLE handle, int tmndx)
*
****************************************************************************/
+#ifdef CONFIG_TIVA_TIMER_16BIT
uint32_t tiva_timer16_counter(TIMER_HANDLE handle, int tmndx)
{
struct tiva_gptmstate_s *priv = (struct tiva_gptmstate_s *)handle;
@@ -2141,6 +2250,7 @@ uint32_t tiva_timer16_counter(TIMER_HANDLE handle, int tmndx)
return counter;
}
+#endif
/****************************************************************************
* Name: tiva_timer32_setinterval
@@ -2158,6 +2268,7 @@ uint32_t tiva_timer16_counter(TIMER_HANDLE handle, int tmndx)
*
****************************************************************************/
+#ifdef CONFIG_TIVA_TIMER_32BIT
void tiva_timer32_setinterval(TIMER_HANDLE handle, uint32_t interval)
{
struct tiva_gptmstate_s *priv = (struct tiva_gptmstate_s *)handle;
@@ -2251,6 +2362,7 @@ void tiva_timer32_setinterval(TIMER_HANDLE handle, uint32_t interval)
lldbg("%08x<-%08x\n", imrr, priv->imr);
#endif
}
+#endif
/****************************************************************************
* Name: tiva_timer16_setinterval
@@ -2269,6 +2381,7 @@ void tiva_timer32_setinterval(TIMER_HANDLE handle, uint32_t interval)
*
****************************************************************************/
+#ifdef CONFIG_TIVA_TIMER_16BIT
void tiva_timer16_setinterval(TIMER_HANDLE handle, uint16_t interval, int tmndx)
{
struct tiva_gptmstate_s *priv = (struct tiva_gptmstate_s *)handle;
@@ -2376,6 +2489,7 @@ void tiva_timer16_setinterval(TIMER_HANDLE handle, uint16_t interval, int tmndx)
lldbg("%08x<-%08x\n", imrr, priv->imr);
#endif
}
+#endif
/****************************************************************************
* Name: tiva_rtc_setalarm
@@ -2397,6 +2511,7 @@ void tiva_timer16_setinterval(TIMER_HANDLE handle, uint16_t interval, int tmndx)
*
****************************************************************************/
+#ifdef CONFIG_TIVA_TIMER32_RTC
void tiva_rtc_setalarm(TIMER_HANDLE handle, uint32_t delay)
{
struct tiva_gptmstate_s *priv = (struct tiva_gptmstate_s *)handle;
@@ -2464,6 +2579,7 @@ void tiva_rtc_setalarm(TIMER_HANDLE handle, uint32_t delay)
lldbg("%08x<-%08x\n", base + TIVA_TIMER_IMR_OFFSET, priv->imr);
#endif
}
+#endif
/****************************************************************************
* Name: tiva_timer32_relmatch
@@ -2494,6 +2610,7 @@ void tiva_rtc_setalarm(TIMER_HANDLE handle, uint32_t delay)
*
****************************************************************************/
+#ifdef CONFIG_TIVA_TIMER32_PERIODIC
void tiva_timer32_relmatch(TIMER_HANDLE handle, uint32_t relmatch)
{
struct tiva_gptmstate_s *priv = (struct tiva_gptmstate_s *)handle;
@@ -2561,6 +2678,7 @@ void tiva_timer32_relmatch(TIMER_HANDLE handle, uint32_t relmatch)
lldbg("%08x<-%08x\n", base + TIVA_TIMER_IMR_OFFSET, priv->imr);
#endif
}
+#endif
/****************************************************************************
* Name: tiva_timer16_relmatch
@@ -2602,6 +2720,7 @@ void tiva_timer32_relmatch(TIMER_HANDLE handle, uint32_t relmatch)
*
****************************************************************************/
+#ifdef CONFIG_TIVA_TIMER16_PERIODIC
void tiva_timer16_relmatch(TIMER_HANDLE handle, uint32_t relmatch, int tmndx)
{
struct tiva_gptmstate_s *priv = (struct tiva_gptmstate_s *)handle;
@@ -2749,3 +2868,5 @@ void tiva_timer16_relmatch(TIMER_HANDLE handle, uint32_t relmatch, int tmndx)
lldbg("%08x<-%08x\n", imr, priv->imr);
#endif
}
+#endif
+