Vladimir N. Shilov před 3 roky
rodič
revize
f85a1773c2
2 změnil soubory, kde provedl 48 přidání a 14 odebrání
  1. 43 11
      Src/main.c
  2. 5 3
      Src/stm32g0xx_it.c

+ 43 - 11
Src/main.c

@@ -151,18 +151,18 @@ int main(void)
 
   // manual dma start sample
   /* Set DMA transfer addresses of source and destination */
-  LL_DMA_ConfigAddresses(DMA1,
-                         LL_DMA_CHANNEL_1,
-                         (uint32_t)&nixieTubes,
-                         (uint32_t)&(SPI1->DR),
-                         LL_DMA_DIRECTION_MEMORY_TO_PERIPH);
+  //LL_DMA_ConfigAddresses(DMA1,
+  //                       LL_DMA_CHANNEL_1,
+  //                       (uint32_t)&nixieTubes,
+  //                       (uint32_t)&(SPI1->DR),
+  //                       LL_DMA_DIRECTION_MEMORY_TO_PERIPH);
 
   /* Set DMA transfer size */
-  LL_DMA_SetDataLength(DMA1, LL_DMA_CHANNEL_1, SPI_BUFFER_SIZE);
+  //LL_DMA_SetDataLength(DMA1, LL_DMA_CHANNEL_1, SPI_BUFFER_SIZE);
 
   /* Enable DMA transfer complete/error interrupts */
-  LL_DMA_EnableIT_TC(DMA1, LL_DMA_CHANNEL_1);
-  LL_DMA_EnableIT_TE(DMA1, LL_DMA_CHANNEL_1);
+  //LL_DMA_EnableIT_TC(DMA1, LL_DMA_CHANNEL_1);
+  //LL_DMA_EnableIT_TE(DMA1, LL_DMA_CHANNEL_1);
 
   showDigit(Tube_A, 1);
   showDigit(Tube_B, 2);
@@ -170,11 +170,28 @@ int main(void)
   showDigit(Tube_E, 4);
 
   /* Start the DMA transfer from Memory to SPI1 */
-  LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_1);
+  //LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_1);
   /* Start SPI */
-  LL_SPI_EnableDMAReq_TX(SPI1);
+  //LL_SPI_EnableIT_ERR(SPI1);
+  //LL_SPI_EnableIT_RXNE(SPI1);
+  //LL_SPI_EnableDMAReq_TX(SPI1);
   LL_SPI_Enable(SPI1);
 
+  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;
+
 //  COLOR_R(0);
 //  COLOR_G(0);
 //  COLOR_B(0);
@@ -206,7 +223,22 @@ int main(void)
     /* USER CODE END WHILE */
 
     /* USER CODE BEGIN 3 */
-    // __WFI();
+    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);
+    LL_mDelay(1);
+    LATCH_UP;
+    //__WFI();
   }
   /* USER CODE END 3 */
 }

+ 5 - 3
Src/stm32g0xx_it.c

@@ -183,8 +183,8 @@ void DMA1_Channel1_IRQHandler(void)
   /* USER CODE BEGIN DMA1_Channel1_IRQn 0 */
   if (LL_DMA_IsActiveFlag_TC1(DMA1) != 0) {
     /* Stop SPI-DMA transfer */
-    LL_DMA_DisableChannel(DMA1, LL_DMA_CHANNEL_1);
-//    LL_SPI_DisableDMAReq_TX(SPI1);
+//    LL_DMA_DisableChannel(DMA1, LL_DMA_CHANNEL_1);
+    LL_SPI_DisableDMAReq_TX(SPI1);
 //    LL_SPI_Disable(SPI1);
   }
   /* USER CODE END DMA1_Channel1_IRQn 0 */
@@ -253,7 +253,9 @@ void TIM17_IRQHandler(void)
 void SPI1_IRQHandler(void)
 {
   /* USER CODE BEGIN SPI1_IRQn 0 */
-
+  /*while ((SPI1->SR & SPI_SR_FTLVL) != 0);
+  while ((SPI1->SR & SPI_SR_BSY) != 0);
+  LATCH_UP;/*
   /* USER CODE END SPI1_IRQn 0 */
   /* USER CODE BEGIN SPI1_IRQn 1 */