|
@@ -171,26 +171,14 @@ int main(void)
|
|
|
|
|
|
/* Start the DMA transfer from Memory to SPI1 */
|
|
|
//LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_1);
|
|
|
- /* Start SPI */
|
|
|
- //LL_SPI_EnableIT_ERR(SPI1);
|
|
|
+ /* Enable SPI Interrupts */
|
|
|
+ LL_SPI_EnableIT_ERR(SPI1);
|
|
|
+ LL_SPI_EnableIT_TXE(SPI1);
|
|
|
//LL_SPI_EnableIT_RXNE(SPI1);
|
|
|
//LL_SPI_EnableDMAReq_TX(SPI1);
|
|
|
- LL_SPI_Enable(SPI1);
|
|
|
-
|
|
|
+ /* Start SPI transfer */
|
|
|
LATCH_DOWN;
|
|
|
- while ((SPI1->SR & SPI_SR_TXE) == 0);
|
|
|
- SPI1->DR = nixieTubes[0];
|
|
|
- while ((SPI1->SR & SPI_SR_TXE) == 0);
|
|
|
- SPI1->DR = nixieTubes[1];
|
|
|
- while ((SPI1->SR & SPI_SR_TXE) == 0);
|
|
|
- SPI1->DR = nixieTubes[2];
|
|
|
- while ((SPI1->SR & SPI_SR_TXE) == 0);
|
|
|
- SPI1->DR = nixieTubes[3];
|
|
|
- while ((SPI1->SR & SPI_SR_TXE) == 0);
|
|
|
- SPI1->DR = nixieTubes[4];
|
|
|
- while ((SPI1->SR & SPI_SR_FTLVL) != 0);
|
|
|
- while ((SPI1->SR & SPI_SR_BSY) != 0);
|
|
|
- LATCH_UP;
|
|
|
+ LL_SPI_Enable(SPI1);
|
|
|
|
|
|
// COLOR_R(0);
|
|
|
// COLOR_G(0);
|
|
@@ -224,23 +212,39 @@ int main(void)
|
|
|
|
|
|
/* USER CODE BEGIN 3 */
|
|
|
LATCH_DOWN;
|
|
|
- while ((SPI1->SR & SPI_SR_TXE) == 0);
|
|
|
- SPI1->DR = nixieTubes[0];
|
|
|
- while ((SPI1->SR & SPI_SR_TXE) == 0);
|
|
|
- SPI1->DR = nixieTubes[1];
|
|
|
- while ((SPI1->SR & SPI_SR_TXE) == 0);
|
|
|
- SPI1->DR = nixieTubes[2];
|
|
|
- while ((SPI1->SR & SPI_SR_TXE) == 0);
|
|
|
- SPI1->DR = nixieTubes[3];
|
|
|
- while ((SPI1->SR & SPI_SR_TXE) == 0);
|
|
|
- SPI1->DR = nixieTubes[4];
|
|
|
+ LL_SPI_EnableIT_TXE(SPI1);
|
|
|
+ LL_SPI_Enable(SPI1);
|
|
|
+ //LL_mDelay(1);
|
|
|
+
|
|
|
+ //__WFI();
|
|
|
+ }
|
|
|
+ /* USER CODE END 3 */
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * @brief Function called from SPI1 IRQ Handler when TXE flag is set
|
|
|
+ * Function is in charge to transmit byte on SPI lines.
|
|
|
+ * @param None
|
|
|
+ * @retval None
|
|
|
+ */
|
|
|
+void SPI1_Tx_Callback(void)
|
|
|
+{
|
|
|
+ static int idx=0;
|
|
|
+ /* Write character in Data register.
|
|
|
+ TXE flag is cleared by reading data in DR register */
|
|
|
+ LL_SPI_TransmitData8(SPI1, nixieTubes[idx]);
|
|
|
+ idx ++;
|
|
|
+
|
|
|
+ if (idx >= SPI_BUFFER_SIZE) {
|
|
|
+ /* Disable TXE Interrupt */
|
|
|
+ LL_SPI_DisableIT_TXE(SPI1);
|
|
|
+ idx = 0;
|
|
|
while ((SPI1->SR & SPI_SR_FTLVL) != 0);
|
|
|
while ((SPI1->SR & SPI_SR_BSY) != 0);
|
|
|
- LL_mDelay(1);
|
|
|
+ LL_SPI_Disable(SPI1);
|
|
|
LATCH_UP;
|
|
|
- //__WFI();
|
|
|
}
|
|
|
- /* USER CODE END 3 */
|
|
|
+
|
|
|
}
|
|
|
|
|
|
/**
|