1
0
mirror of https://bitbucket.org/librepilot/librepilot.git synced 2024-12-10 18:24:11 +01:00

OP-1312 keep pulse timings low to have more margin to handle bus contentions and irq response time.

This commit is contained in:
Alessio Morale 2014-05-11 18:57:06 +02:00
parent 711c5ea79d
commit 8bbb56337b
2 changed files with 8 additions and 3 deletions

View File

@ -44,6 +44,11 @@
#define PIOS_WS2811_PERIPHERALDATASIZE DMA_PeripheralDataSize_HalfWord #define PIOS_WS2811_PERIPHERALDATASIZE DMA_PeripheralDataSize_HalfWord
#define PIOS_WS2811_TIM_PERIOD 20 #define PIOS_WS2811_TIM_PERIOD 20
// Following times are keept on the lower side to accounts
// for bus contentions and irq response time
#define PIOS_WS2811_T0_HIGH_PERIOD 25 // .35us +/- 150nS
#define PIOS_WS2811_T1_HIGH_PERIOD 60 // .70us +/- 150nS
#define PIOS_WS2811_DMA_CH1_CONFIG(channel) \ #define PIOS_WS2811_DMA_CH1_CONFIG(channel) \
{ \ { \
.DMA_BufferSize = PIOS_WS2811_BUFFER_SIZE, \ .DMA_BufferSize = PIOS_WS2811_BUFFER_SIZE, \

View File

@ -215,10 +215,10 @@ void setupTimer()
}; };
// (duty in ticks) / (period in ticks) * 1.25uS (period in S) = 0.40 uS // (duty in ticks) / (period in ticks) * 1.25uS (period in S) = 0.40 uS
oc.TIM_Pulse = 40 * PIOS_WS2811_TIM_PERIOD / 125; oc.TIM_Pulse = PIOS_WS2811_T0_HIGH_PERIOD * PIOS_WS2811_TIM_PERIOD / 125;
genericTIM_OCxInit(pios_ws2811_cfg->timer, &oc, pios_ws2811_cfg->timerCh1); genericTIM_OCxInit(pios_ws2811_cfg->timer, &oc, pios_ws2811_cfg->timerCh1);
// (duty in ticks) / (period in ticks) * 1.25uS (period in S) = 0.80 uS // (duty in ticks) / (period in ticks) * 1.25uS (period in S) = 0.80 uS
oc.TIM_Pulse = 80 * PIOS_WS2811_TIM_PERIOD / 125; oc.TIM_Pulse = PIOS_WS2811_T1_HIGH_PERIOD * PIOS_WS2811_TIM_PERIOD / 125;
genericTIM_OCxInit(pios_ws2811_cfg->timer, &oc, pios_ws2811_cfg->timerCh2); genericTIM_OCxInit(pios_ws2811_cfg->timer, &oc, pios_ws2811_cfg->timerCh2);
} }
@ -337,7 +337,7 @@ void PIOS_WS2811_Update()
void PIOS_WS2811_DMA_irq_handler() void PIOS_WS2811_DMA_irq_handler()
{ {
TIM_Cmd(pios_ws2811_cfg->timer, DISABLE); pios_ws2811_cfg->timer->CR1 &= (uint16_t) ~TIM_CR1_CEN;
DMA_ClearFlag(pios_ws2811_cfg->streamCh1, pios_ws2811_cfg->irq.flags); DMA_ClearFlag(pios_ws2811_cfg->streamCh1, pios_ws2811_cfg->irq.flags);
} }