Improved VT_Storm.

git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@14440 27425a3e-05d8-49a3-a47f-9c15f0e5edd8
This commit is contained in:
Giovanni Di Sirio 2021-05-29 16:49:49 +00:00
parent 9d1810297e
commit b143106fe1
4 changed files with 106 additions and 46 deletions

View File

@ -72,7 +72,7 @@
* setting also defines the system tick time unit. * setting also defines the system tick time unit.
*/ */
#if !defined(CH_CFG_ST_FREQUENCY) #if !defined(CH_CFG_ST_FREQUENCY)
#define CH_CFG_ST_FREQUENCY 1000000 #define CH_CFG_ST_FREQUENCY 21250000
#endif #endif
/** /**

View File

@ -35,12 +35,40 @@
/* Module exported variables. */ /* Module exported variables. */
/*===========================================================================*/ /*===========================================================================*/
#if VT_STORM_CFG_HAMMERS || defined(__DOXYGEN__)
/*
* GPT4 configuration.
*/
static const GPTConfig gpt3cfg = {
1000000, /* 1MHz timer clock.*/
vt_storm_gpt1_cb, /* Timer callback.*/
0,
0
};
/*
* GPT3 configuration.
*/
static const GPTConfig gpt4cfg = {
1000000, /* 1MHz timer clock.*/
vt_storm_gpt2_cb, /* Timer callback.*/
0,
0
};
#endif
/* /*
* VT Storm configuration. * VT Storm configuration.
*/ */
const vt_storm_config_t portab_vt_storm_config = { const vt_storm_config_t portab_vt_storm_config = {
(BaseSequentialStream *)&PORTAB_SD1, (BaseSequentialStream *)&PORTAB_SD1,
PORTAB_LINE_LED1, PORTAB_LINE_LED1,
#if VT_STORM_CFG_HAMMERS
&GPTD3,
&GPTD4,
&gpt3cfg,
&gpt4cfg,
#endif
STM32_SYSCLK STM32_SYSCLK
}; };

View File

@ -58,19 +58,6 @@ static volatile sysinterval_t delay;
static volatile bool saturated; static volatile bool saturated;
static uint32_t vtcus; static uint32_t vtcus;
#if VT_STORM_CFG_HAMMERS
/*
* GPTs configuration.
*/
static void hammer_gpt_cb(GPTDriver *gptp);
static const GPTConfig hammer_gpt_cfg = {
1000000, /* 1MHz timer clock.*/
hammer_gpt_cb, /* Timer callback.*/
0,
0
};
#endif
/*===========================================================================*/ /*===========================================================================*/
/* Module local functions. */ /* Module local functions. */
/*===========================================================================*/ /*===========================================================================*/
@ -232,31 +219,6 @@ static void guard_cb(virtual_timer_t *vtp, void *p) {
(void)p; (void)p;
} }
#if VT_STORM_CFG_HAMMERS
/**
* @brief GPT callback.
*/
static void hammer_gpt_cb(GPTDriver *gptp) {
(void)gptp;
#if VT_STORM_CFG_RANDOMIZE != FALSE
/* Pseudo-random delay.*/
{
static volatile unsigned x = 0;
unsigned r;
chSysLockFromISR();
r = rand() & 31;
chSysUnlockFromISR();
while (r--) {
x++;
}
}
#endif
}
#endif
/*===========================================================================*/ /*===========================================================================*/
/* Module exported functions. */ /* Module exported functions. */
/*===========================================================================*/ /*===========================================================================*/
@ -302,15 +264,15 @@ void vt_storm_execute(const vt_storm_config_t *cfg) {
chprintf(cfg->out, "*** System Time size: %d bits\r\n", CH_CFG_ST_RESOLUTION); chprintf(cfg->out, "*** System Time size: %d bits\r\n", CH_CFG_ST_RESOLUTION);
chprintf(cfg->out, "*** Intervals size: %d bits\r\n", CH_CFG_INTERVALS_SIZE); chprintf(cfg->out, "*** Intervals size: %d bits\r\n", CH_CFG_INTERVALS_SIZE);
chprintf(cfg->out, "*** SysTick: %d Hz\r\n", CH_CFG_ST_FREQUENCY); chprintf(cfg->out, "*** SysTick: %d Hz\r\n", CH_CFG_ST_FREQUENCY);
chprintf(cfg->out, "*** Delta: %d cycles\r\n", CH_CFG_ST_TIMEDELTA); chprintf(cfg->out, "*** Delta: %d ticks\r\n", CH_CFG_ST_TIMEDELTA);
chprintf(cfg->out, "\r\n"); chprintf(cfg->out, "\r\n");
#if VT_STORM_CFG_HAMMERS #if VT_STORM_CFG_HAMMERS
/* Starting hammer timers.*/ /* Starting hammer timers.*/
gptStart(&GPTD3, &hammer_gpt_cfg); gptStart(cfg->gpt1p, cfg->gptcfg1p);
gptStart(&GPTD4, &hammer_gpt_cfg); gptStart(cfg->gpt2p, cfg->gptcfg2p);
gptStartContinuous(&GPTD3, 99); gptStartContinuous(cfg->gpt1p, 99);
gptStartContinuous(&GPTD4, 101); gptStartContinuous(cfg->gpt2p, 101);
#endif #endif
for (i = 1; i <= VT_STORM_CFG_ITERATIONS; i++) { for (i = 1; i <= VT_STORM_CFG_ITERATIONS; i++) {
@ -380,4 +342,52 @@ void vt_storm_execute(const vt_storm_config_t *cfg) {
} }
} }
#if VT_STORM_CFG_HAMMERS || defined(__DOXYGEN__)
/**
* @brief GPT callback 1.
*/
void vt_storm_gpt1_cb(GPTDriver *gptp) {
(void)gptp;
#if VT_STORM_CFG_RANDOMIZE != FALSE
/* Pseudo-random delay.*/
{
static volatile unsigned x = 0;
unsigned r;
chSysLockFromISR();
r = rand() & 31;
chSysUnlockFromISR();
while (r--) {
x++;
}
}
#endif
}
/**
* @brief GPT callback 2.
*/
void vt_storm_gpt2_cb(GPTDriver *gptp) {
(void)gptp;
#if VT_STORM_CFG_RANDOMIZE != FALSE
/* Pseudo-random delay.*/
{
static volatile unsigned x = 0;
unsigned r;
chSysLockFromISR();
r = rand() & 31;
chSysUnlockFromISR();
while (r--) {
x++;
}
}
#endif
}
#endif
/** @} */ /** @} */

View File

@ -41,7 +41,7 @@
* @brief Timings randomization. * @brief Timings randomization.
*/ */
#if !defined(VT_STORM_CFG_RANDOMIZE) || defined(__DOXYGEN__) #if !defined(VT_STORM_CFG_RANDOMIZE) || defined(__DOXYGEN__)
#define VT_STORM_CFG_RANDOMIZE 0 #define VT_STORM_CFG_RANDOMIZE TRUE
#endif #endif
/** /**
@ -62,7 +62,7 @@
* @brief Enable hammer timers. * @brief Enable hammer timers.
*/ */
#if !defined(VT_STORM_CFG_HAMMERS) || defined(__DOXYGEN__) #if !defined(VT_STORM_CFG_HAMMERS) || defined(__DOXYGEN__)
#define VT_STORM_CFG_HAMMERS 0 #define VT_STORM_CFG_HAMMERS TRUE
#endif #endif
/** @} */ /** @} */
@ -87,6 +87,24 @@ typedef struct {
* @brief LED line. * @brief LED line.
*/ */
ioline_t line; ioline_t line;
#if VT_STORM_CFG_HAMMERS || defined(__DOXYGEN__)
/**
* @brief GPT driver 1.
*/
GPTDriver *gpt1p;
/**
* @brief GPT driver 2.
*/
GPTDriver *gpt2p;
/**
* @brief GPT1 configuration 1.
*/
const GPTConfig *gptcfg1p;
/**
* @brief GPT1 configuration 2.
*/
const GPTConfig *gptcfg2p;
#endif
/** /**
* @brief System clock. * @brief System clock.
*/ */
@ -105,6 +123,10 @@ typedef struct {
extern "C" { extern "C" {
#endif #endif
void vt_storm_execute(const vt_storm_config_t *cfg); void vt_storm_execute(const vt_storm_config_t *cfg);
#if VT_STORM_CFG_HAMMERS
void vt_storm_gpt1_cb(GPTDriver *gptp);
void vt_storm_gpt2_cb(GPTDriver *gptp);
#endif
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif