Add helper functions to:

enable/disable timer
  dump timer registers
The timer is no longer enabled at the end of stm32l4_tim_setclock().
This commit is contained in:
Daniel P. Carvalho 2020-11-04 17:41:00 -03:00 committed by Alan Carvalho de Assis
parent 954115e097
commit d1057403c6
2 changed files with 69 additions and 18 deletions

View File

@ -254,8 +254,7 @@ static inline void stm32l4_putreg32(FAR struct stm32l4_tim_dev_s *dev,
/* Timer helpers */ /* Timer helpers */
static void stm32l4_tim_reload_counter(FAR struct stm32l4_tim_dev_s *dev); static void stm32l4_tim_reload_counter(FAR struct stm32l4_tim_dev_s *dev);
static void stm32l4_tim_enable(FAR struct stm32l4_tim_dev_s *dev); static void stm32l4_tim_enable(FAR struct stm32l4_tim_dev_s *dev, bool state);
static void stm32l4_tim_disable(FAR struct stm32l4_tim_dev_s *dev);
static void stm32l4_tim_reset(FAR struct stm32l4_tim_dev_s *dev); static void stm32l4_tim_reset(FAR struct stm32l4_tim_dev_s *dev);
#if defined(HAVE_TIM1_GPIOCONFIG) || defined(HAVE_TIM2_GPIOCONFIG) || \ #if defined(HAVE_TIM1_GPIOCONFIG) || defined(HAVE_TIM2_GPIOCONFIG) || \
defined(HAVE_TIM3_GPIOCONFIG) || defined(HAVE_TIM4_GPIOCONFIG) || \ defined(HAVE_TIM3_GPIOCONFIG) || defined(HAVE_TIM4_GPIOCONFIG) || \
@ -264,6 +263,7 @@ static void stm32l4_tim_reset(FAR struct stm32l4_tim_dev_s *dev);
defined(HAVE_TIM17_GPIOCONFIG) defined(HAVE_TIM17_GPIOCONFIG)
static void stm32l4_tim_gpioconfig(uint32_t cfg, enum stm32l4_tim_channel_e mode); static void stm32l4_tim_gpioconfig(uint32_t cfg, enum stm32l4_tim_channel_e mode);
#endif #endif
static void stm32l4_tim_dumpregs(FAR struct stm32l4_tim_dev_s *dev);
/* Timer methods */ /* Timer methods */
@ -311,6 +311,8 @@ static const struct stm32l4_tim_ops_s stm32l4_tim_ops =
.disableint = stm32l4_tim_disableint, .disableint = stm32l4_tim_disableint,
.ackint = stm32l4_tim_ackint, .ackint = stm32l4_tim_ackint,
.checkint = stm32l4_tim_checkint, .checkint = stm32l4_tim_checkint,
.enable = stm32l4_tim_enable,
.dump_regs = stm32l4_tim_dumpregs,
}; };
#ifdef CONFIG_STM32L4_TIM1 #ifdef CONFIG_STM32L4_TIM1
@ -504,22 +506,19 @@ static void stm32l4_tim_reload_counter(FAR struct stm32l4_tim_dev_s *dev)
* Name: stm32l4_tim_enable * Name: stm32l4_tim_enable
************************************************************************************/ ************************************************************************************/
static void stm32l4_tim_enable(FAR struct stm32l4_tim_dev_s *dev) static void stm32l4_tim_enable(FAR struct stm32l4_tim_dev_s *dev, bool state)
{ {
uint16_t val = stm32l4_getreg16(dev, STM32L4_BTIM_CR1_OFFSET); uint16_t val = stm32l4_getreg16(dev, STM32L4_BTIM_CR1_OFFSET);
val |= ATIM_CR1_CEN;
stm32l4_tim_reload_counter(dev);
stm32l4_putreg16(dev, STM32L4_BTIM_CR1_OFFSET, val);
}
/************************************************************************************ if(state)
* Name: stm32l4_tim_disable {
************************************************************************************/ val |= ATIM_CR1_CEN;
stm32l4_tim_reload_counter(dev);
static void stm32l4_tim_disable(FAR struct stm32l4_tim_dev_s *dev) }
{ else
uint16_t val = stm32l4_getreg16(dev, STM32L4_BTIM_CR1_OFFSET); {
val &= ~ATIM_CR1_CEN; val &= ~ATIM_CR1_CEN;
}
stm32l4_putreg16(dev, STM32L4_BTIM_CR1_OFFSET, val); stm32l4_putreg16(dev, STM32L4_BTIM_CR1_OFFSET, val);
} }
@ -534,7 +533,7 @@ static void stm32l4_tim_disable(FAR struct stm32l4_tim_dev_s *dev)
static void stm32l4_tim_reset(FAR struct stm32l4_tim_dev_s *dev) static void stm32l4_tim_reset(FAR struct stm32l4_tim_dev_s *dev)
{ {
((struct stm32l4_tim_priv_s *)dev)->mode = STM32L4_TIM_MODE_DISABLED; ((struct stm32l4_tim_priv_s *)dev)->mode = STM32L4_TIM_MODE_DISABLED;
stm32l4_tim_disable(dev); stm32l4_tim_enable(dev, false);
} }
/************************************************************************************ /************************************************************************************
@ -561,6 +560,53 @@ static void stm32l4_tim_gpioconfig(uint32_t cfg, enum stm32l4_tim_channel_e mode
} }
#endif #endif
/************************************************************************************
* Name: stm32l4_tim_dumpregs
************************************************************************************/
static void stm32l4_tim_dumpregs(FAR struct stm32l4_tim_dev_s *dev)
{
struct stm32l4_tim_priv_s *priv = (struct stm32l4_tim_priv_s *)dev;
{
/* data */
};
ainfo(" CR1: %04x CR2: %04x SMCR: %04x DIER: %04x\n",
stm32l4_getreg16(dev, STM32L4_GTIM_CR1_OFFSET),
stm32l4_getreg16(dev, STM32L4_GTIM_CR2_OFFSET),
stm32l4_getreg16(dev, STM32L4_GTIM_SMCR_OFFSET),
stm32l4_getreg16(dev, STM32L4_GTIM_DIER_OFFSET));
ainfo(" SR: %04x EGR: 0000 CCMR1: %04x CCMR2: %04x\n",
stm32l4_getreg16(dev, STM32L4_GTIM_SR_OFFSET),
stm32l4_getreg16(dev, STM32L4_GTIM_CCMR1_OFFSET),
stm32l4_getreg16(dev, STM32L4_GTIM_CCMR2_OFFSET));
ainfo(" CCER: %04x CNT: %04x PSC: %04x ARR: %04x\n",
stm32l4_getreg16(dev, STM32L4_GTIM_CCER_OFFSET),
stm32l4_getreg16(dev, STM32L4_GTIM_CNT_OFFSET),
stm32l4_getreg16(dev, STM32L4_GTIM_PSC_OFFSET),
stm32l4_getreg16(dev, STM32L4_GTIM_ARR_OFFSET));
ainfo(" CCR1: %04x CCR2: %04x CCR3: %04x CCR4: %04x\n",
stm32l4_getreg16(dev, STM32L4_GTIM_CCR1_OFFSET),
stm32l4_getreg16(dev, STM32L4_GTIM_CCR2_OFFSET),
stm32l4_getreg16(dev, STM32L4_GTIM_CCR3_OFFSET),
stm32l4_getreg16(dev, STM32L4_GTIM_CCR4_OFFSET));
if (priv->base == STM32L4_TIM1_BASE || priv->base == STM32L4_TIM8_BASE)
{
ainfo(" RCR: %04x BDTR: %04x DCR: %04x DMAR: %04x\n",
stm32l4_getreg16(dev, STM32L4_ATIM_RCR_OFFSET),
stm32l4_getreg16(dev, STM32L4_ATIM_BDTR_OFFSET),
stm32l4_getreg16(dev, STM32L4_ATIM_DCR_OFFSET),
stm32l4_getreg16(dev, STM32L4_ATIM_DMAR_OFFSET));
}
else
{
ainfo(" DCR: %04x DMAR: %04x\n",
stm32l4_getreg16(dev, STM32L4_GTIM_DCR_OFFSET),
stm32l4_getreg16(dev, STM32L4_GTIM_DMAR_OFFSET));
}
}
/************************************************************************************ /************************************************************************************
* Name: stm32l4_tim_setmode * Name: stm32l4_tim_setmode
************************************************************************************/ ************************************************************************************/
@ -599,8 +645,10 @@ static int stm32l4_tim_setmode(FAR struct stm32l4_tim_dev_s *dev,
case STM32L4_TIM_MODE_DOWN: case STM32L4_TIM_MODE_DOWN:
val |= ATIM_CR1_DIR; val |= ATIM_CR1_DIR;
break;
case STM32L4_TIM_MODE_UP: case STM32L4_TIM_MODE_UP:
val &= ~ATIM_CR1_DIR;
break; break;
case STM32L4_TIM_MODE_UPDOWN: case STM32L4_TIM_MODE_UPDOWN:
@ -650,7 +698,7 @@ static int stm32l4_tim_setclock(FAR struct stm32l4_tim_dev_s *dev,
if (freq == 0) if (freq == 0)
{ {
stm32l4_tim_disable(dev); stm32l4_tim_enable(dev, false);
return 0; return 0;
} }
@ -754,7 +802,6 @@ static int stm32l4_tim_setclock(FAR struct stm32l4_tim_dev_s *dev,
} }
stm32l4_putreg16(dev, STM32L4_BTIM_PSC_OFFSET, prescaler); stm32l4_putreg16(dev, STM32L4_BTIM_PSC_OFFSET, prescaler);
stm32l4_tim_enable(dev);
return prescaler; return prescaler;
} }

View File

@ -71,6 +71,8 @@
#define STM32L4_TIM_DISABLEINT(d,s) ((d)->ops->disableint(d,s)) #define STM32L4_TIM_DISABLEINT(d,s) ((d)->ops->disableint(d,s))
#define STM32L4_TIM_ACKINT(d,s) ((d)->ops->ackint(d,s)) #define STM32L4_TIM_ACKINT(d,s) ((d)->ops->ackint(d,s))
#define STM32L4_TIM_CHECKINT(d,s) ((d)->ops->checkint(d,s)) #define STM32L4_TIM_CHECKINT(d,s) ((d)->ops->checkint(d,s))
#define STM32L4_TIM_ENABLE(d,s) ((d)->ops->enable(d,s))
#define STM32L4_TIM_DUMPREGS(d) ((d)->ops->dump_regs(d))
/************************************************************************************ /************************************************************************************
* Public Types * Public Types
@ -192,6 +194,8 @@ struct stm32l4_tim_ops_s
void (*disableint)(FAR struct stm32l4_tim_dev_s *dev, int source); void (*disableint)(FAR struct stm32l4_tim_dev_s *dev, int source);
void (*ackint)(FAR struct stm32l4_tim_dev_s *dev, int source); void (*ackint)(FAR struct stm32l4_tim_dev_s *dev, int source);
int (*checkint)(FAR struct stm32l4_tim_dev_s *dev, int source); int (*checkint)(FAR struct stm32l4_tim_dev_s *dev, int source);
void (*enable)(FAR struct stm32l4_tim_dev_s *dev, bool state);
void (*dump_regs)(FAR struct stm32l4_tim_dev_s *dev);
}; };
/************************************************************************************ /************************************************************************************