interrupt works

This commit is contained in:
Attila BODY 2018-12-17 21:43:19 +01:00
parent d1caa51a89
commit 48883e6e3d
3 changed files with 21 additions and 9 deletions

View file

@ -56,30 +56,42 @@ uint16_t ChoosePixel()
void StartSparkle( Sparkle &s ) void StartSparkle( Sparkle &s )
{ {
s.Start(g_pixels+ChoosePixel(), Pixel(255,255,255), Pixel(rr(5)+1,rr(5)+1,rr(5)+1)); s.Start(g_pixels+ChoosePixel(), Pixel(255,255,255), Pixel(rr(8)+3,rr(8)+3,rr(8)+3));
}
extern "C" void HAL_SPI_TxCpltCallback(SPI_HandleTypeDef *hspi)
{
if(hspi == &hspi1) {
g_done = true;
}
} }
extern "C" void App() extern "C" void App()
{ {
g_ledBits[sizeof(g_ledBits)-1] = 0; g_ledBits[sizeof(g_ledBits)-1] = 0;
memset(g_pixels, 0, sizeof(g_pixels)); memset(g_pixels, 0, sizeof(g_pixels));
uint32_t lastTick = HAL_GetTick() - FRAMETIME;
while(1) while(1)
{ {
while(HAL_GetTick() - lastTick < FRAMETIME );
lastTick += FRAMETIME;
HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);
for(int16_t spi = 0; spi < NUMSPARKLES; ++spi) { for(int16_t spi = 0; spi < NUMSPARKLES; ++spi) {
if(static_cast<Pixel_t*>(g_s[spi])) if(static_cast<Pixel_t*>(g_s[spi]))
g_s[spi].Step(); g_s[spi].Step();
else else
StartSparkle(g_s[spi]); StartSparkle(g_s[spi]);
} }
HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);
convert((uint8_t*)g_pixels, g_ledBits, sizeof(g_pixels)); convert((uint8_t*)g_pixels, g_ledBits, sizeof(g_pixels));
HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);
g_done = false; g_done = false;
GPIOC->BSRR = 1 << (13+16);
HAL_SPI_Transmit_DMA(&hspi1, g_ledBits, sizeof(g_ledBits)); HAL_SPI_Transmit_DMA(&hspi1, g_ledBits, sizeof(g_ledBits));
GPIOC->BSRR = 1 << 13;
while(!g_done); while(!g_done);
HAL_Delay(5); HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);
} }
} }

View file

@ -8,7 +8,7 @@
#ifndef CONFIG_H_ #ifndef CONFIG_H_
#define CONFIG_H_ #define CONFIG_H_
#define NUMPIXELS 300 #define NUMPIXELS 144
#define NUMSPARKLES 25 #define NUMSPARKLES (NUMPIXELS/12)
#define FRAMETIME 20
#endif /* CONFIG_H_ */ #endif /* CONFIG_H_ */

View file

@ -198,7 +198,7 @@ void SysTick_Handler(void)
void DMA1_Channel3_IRQHandler(void) void DMA1_Channel3_IRQHandler(void)
{ {
/* USER CODE BEGIN DMA1_Channel3_IRQn 0 */ /* USER CODE BEGIN DMA1_Channel3_IRQn 0 */
g_done = 1;
/* USER CODE END DMA1_Channel3_IRQn 0 */ /* USER CODE END DMA1_Channel3_IRQn 0 */
HAL_DMA_IRQHandler(&hdma_spi1_tx); HAL_DMA_IRQHandler(&hdma_spi1_tx);
/* USER CODE BEGIN DMA1_Channel3_IRQn 1 */ /* USER CODE BEGIN DMA1_Channel3_IRQn 1 */