Added hammer GPTs to VT storm test.
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@14433 27425a3e-05d8-49a3-a47f-9c15f0e5edd8
This commit is contained in:
parent
382d2ab827
commit
d434cdedd1
|
@ -132,8 +132,8 @@
|
||||||
#define STM32_IRQ_TIM1_TRGCO_TIM17_PRIORITY 7
|
#define STM32_IRQ_TIM1_TRGCO_TIM17_PRIORITY 7
|
||||||
#define STM32_IRQ_TIM1_CC_PRIORITY 7
|
#define STM32_IRQ_TIM1_CC_PRIORITY 7
|
||||||
#define STM32_IRQ_TIM2_PRIORITY 7
|
#define STM32_IRQ_TIM2_PRIORITY 7
|
||||||
#define STM32_IRQ_TIM3_PRIORITY 9
|
#define STM32_IRQ_TIM3_PRIORITY 3
|
||||||
#define STM32_IRQ_TIM4_PRIORITY 10
|
#define STM32_IRQ_TIM4_PRIORITY 4
|
||||||
#define STM32_IRQ_TIM5_PRIORITY 7
|
#define STM32_IRQ_TIM5_PRIORITY 7
|
||||||
#define STM32_IRQ_TIM6_PRIORITY 7
|
#define STM32_IRQ_TIM6_PRIORITY 7
|
||||||
#define STM32_IRQ_TIM7_PRIORITY 7
|
#define STM32_IRQ_TIM7_PRIORITY 7
|
||||||
|
|
|
@ -52,11 +52,25 @@ static const vt_storm_config_t *config;
|
||||||
static virtual_timer_t watchdog;
|
static virtual_timer_t watchdog;
|
||||||
static virtual_timer_t wrapper;
|
static virtual_timer_t wrapper;
|
||||||
static virtual_timer_t sweeper0, sweeperm1, sweeperp1, sweeperm3, sweeperp3;
|
static virtual_timer_t sweeper0, sweeperm1, sweeperp1, sweeperm3, sweeperp3;
|
||||||
|
static virtual_timer_t guard0, guard1, guard2, guard3;
|
||||||
static virtual_timer_t continuous;
|
static virtual_timer_t continuous;
|
||||||
static volatile sysinterval_t delay;
|
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. */
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
@ -145,12 +159,44 @@ static void continuous_cb(virtual_timer_t *vtp, void *p) {
|
||||||
chSysLockFromISR();
|
chSysLockFromISR();
|
||||||
r = rand() & 255;
|
r = rand() & 255;
|
||||||
chSysUnlockFromISR();
|
chSysUnlockFromISR();
|
||||||
while (r--)
|
while (r--) {
|
||||||
x++;
|
x++;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void guard_cb(virtual_timer_t *vtp, void *p) {
|
||||||
|
|
||||||
|
(void)vtp;
|
||||||
|
(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. */
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
@ -191,6 +237,7 @@ void vt_storm_execute(const vt_storm_config_t *cfg) {
|
||||||
#endif
|
#endif
|
||||||
chprintf(cfg->out, "***\r\n");
|
chprintf(cfg->out, "***\r\n");
|
||||||
chprintf(cfg->out, "*** Randomize: %d\r\n", VT_STORM_CFG_RANDOMIZE);
|
chprintf(cfg->out, "*** Randomize: %d\r\n", VT_STORM_CFG_RANDOMIZE);
|
||||||
|
chprintf(cfg->out, "*** Hammers: %d\r\n", VT_STORM_CFG_HAMMERS);
|
||||||
chprintf(cfg->out, "*** Minimum Delay: %d ticks\r\n", VT_STORM_CFG_MIN_DELAY);
|
chprintf(cfg->out, "*** Minimum Delay: %d ticks\r\n", VT_STORM_CFG_MIN_DELAY);
|
||||||
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);
|
||||||
|
@ -198,6 +245,14 @@ void vt_storm_execute(const vt_storm_config_t *cfg) {
|
||||||
chprintf(cfg->out, "*** Delta: %d cycles\r\n", CH_CFG_ST_TIMEDELTA);
|
chprintf(cfg->out, "*** Delta: %d cycles\r\n", CH_CFG_ST_TIMEDELTA);
|
||||||
chprintf(cfg->out, "\r\n");
|
chprintf(cfg->out, "\r\n");
|
||||||
|
|
||||||
|
#if VT_STORM_CFG_HAMMERS
|
||||||
|
/* Starting hammer timers.*/
|
||||||
|
gptStart(&GPTD3, &hammer_gpt_cfg);
|
||||||
|
gptStart(&GPTD4, &hammer_gpt_cfg);
|
||||||
|
gptStartContinuous(&GPTD3, 99);
|
||||||
|
gptStartContinuous(&GPTD4, 101);
|
||||||
|
#endif
|
||||||
|
|
||||||
for (i = 1; i <= VT_STORM_CFG_ITERATIONS; i++) {
|
for (i = 1; i <= VT_STORM_CFG_ITERATIONS; i++) {
|
||||||
|
|
||||||
chprintf(cfg->out, "Iteration %d\r\n", i);
|
chprintf(cfg->out, "Iteration %d\r\n", i);
|
||||||
|
@ -219,6 +274,10 @@ void vt_storm_execute(const vt_storm_config_t *cfg) {
|
||||||
chVTSetI(&sweeperp3, delay + 3, sweeperp3_cb, NULL);
|
chVTSetI(&sweeperp3, delay + 3, sweeperp3_cb, NULL);
|
||||||
chVTSetI(&wrapper, (sysinterval_t) - 1, wrapper_cb, NULL);
|
chVTSetI(&wrapper, (sysinterval_t) - 1, wrapper_cb, NULL);
|
||||||
chVTSetContinuousI(&continuous, TIME_US2I(50), continuous_cb, NULL);
|
chVTSetContinuousI(&continuous, TIME_US2I(50), continuous_cb, NULL);
|
||||||
|
chVTSetI(&guard0, TIME_MS2I(250) + (CH_CFG_TIME_QUANTUM / 2), guard_cb, NULL);
|
||||||
|
chVTSetI(&guard1, TIME_MS2I(250) + (CH_CFG_TIME_QUANTUM - 1), guard_cb, NULL);
|
||||||
|
chVTSetI(&guard2, TIME_MS2I(250) + (CH_CFG_TIME_QUANTUM + 1), guard_cb, NULL);
|
||||||
|
chVTSetI(&guard3, TIME_MS2I(250) + (CH_CFG_TIME_QUANTUM * 2), guard_cb, NULL);
|
||||||
|
|
||||||
/* Letting them run for half second.*/
|
/* Letting them run for half second.*/
|
||||||
chThdSleepS(TIME_MS2I(500));
|
chThdSleepS(TIME_MS2I(500));
|
||||||
|
@ -232,6 +291,10 @@ void vt_storm_execute(const vt_storm_config_t *cfg) {
|
||||||
chVTResetI(&sweeperp3);
|
chVTResetI(&sweeperp3);
|
||||||
chVTResetI(&wrapper);
|
chVTResetI(&wrapper);
|
||||||
chVTResetI(&continuous);
|
chVTResetI(&continuous);
|
||||||
|
chVTResetI(&guard0);
|
||||||
|
chVTResetI(&guard1);
|
||||||
|
chVTResetI(&guard2);
|
||||||
|
chVTResetI(&guard3);
|
||||||
chSysUnlock();
|
chSysUnlock();
|
||||||
|
|
||||||
if (saturated) {
|
if (saturated) {
|
||||||
|
@ -249,6 +312,7 @@ void vt_storm_execute(const vt_storm_config_t *cfg) {
|
||||||
chprintf(cfg->out, "\r\nContinuous ticks %u\r\n\r\n", vtcus);
|
chprintf(cfg->out, "\r\nContinuous ticks %u\r\n\r\n", vtcus);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
chprintf(cfg->out, "\r\nNon saturated");
|
||||||
chprintf(cfg->out, "\r\nContinuous ticks %u\r\n\r\n", vtcus);
|
chprintf(cfg->out, "\r\nContinuous ticks %u\r\n\r\n", vtcus);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -57,6 +57,13 @@
|
||||||
#if !defined(VT_STORM_CFG_MIN_DELAY) || defined(__DOXYGEN__)
|
#if !defined(VT_STORM_CFG_MIN_DELAY) || defined(__DOXYGEN__)
|
||||||
#define VT_STORM_CFG_MIN_DELAY 10
|
#define VT_STORM_CFG_MIN_DELAY 10
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Enable hammer timers.
|
||||||
|
*/
|
||||||
|
#if !defined(VT_STORM_CFG_HAMMERS) || defined(__DOXYGEN__)
|
||||||
|
#define VT_STORM_CFG_HAMMERS TRUE
|
||||||
|
#endif
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
|
Loading…
Reference in New Issue