]> mj.ucw.cz Git - home-hw.git/commitdiff
SSR: Adjusting to STM32F1
authorMartin Mares <mj@ucw.cz>
Wed, 8 Aug 2018 10:27:09 +0000 (12:27 +0200)
committerMartin Mares <mj@ucw.cz>
Wed, 8 Aug 2018 10:27:09 +0000 (12:27 +0200)
ssr/Src/ds18b20.c
ssr/Src/main.c

index d44524d83553b2925cad8ef3ced9ec1e8c55d252..0b9b49b00f8d4ebb7a30dffafca0f735a47c7d60 100644 (file)
@@ -11,7 +11,7 @@ static volatile u32 ds_dma_buffer;
 #define DS_PIN_MASK (1U << 7)          // Unfortunately, this cannot be inferred from the Pin constant
 #define DS_DMA DMA1
 #define DS_DMA_CHANNEL LL_DMA_CHANNEL_6
-#define DS_DEBUG
+#undef DS_DEBUG
 
 #ifdef DS_DEBUG
 #define DEBUG debug_printf
@@ -54,8 +54,8 @@ static void ds_reset(void)
   LL_TIM_SetAutoReload(TIM3, 999);
 
   // Pull line down and start timer
-  LL_TIM_OC_SetMode(TIM3, LL_TIM_CHANNEL_CH2, LL_TIM_OCMODE_INACTIVE);
   LL_TIM_EnableCounter(TIM3);
+  LL_TIM_OC_SetMode(TIM3, LL_TIM_CHANNEL_CH2, LL_TIM_OCMODE_INACTIVE);
 
   // Wait until the timer expires
   while (LL_TIM_IsEnabledCounter(TIM3))
@@ -77,8 +77,8 @@ static void ds_send_byte(byte b)
     {
       LL_TIM_OC_SetCompareCH2(TIM3, ((b & m) ? 1 : 89));       // 1: 1μs pulse, 0: 89μs pulse
       LL_TIM_OC_SetMode(TIM3, LL_TIM_CHANNEL_CH2, LL_TIM_OCMODE_FORCED_ACTIVE);
-      LL_TIM_OC_SetMode(TIM3, LL_TIM_CHANNEL_CH2, LL_TIM_OCMODE_INACTIVE);
       LL_TIM_EnableCounter(TIM3);
+      LL_TIM_OC_SetMode(TIM3, LL_TIM_CHANNEL_CH2, LL_TIM_OCMODE_INACTIVE);
       while (LL_TIM_IsEnabledCounter(TIM3))
        ;
     }
@@ -98,11 +98,11 @@ static byte ds_recv_byte(void)
       LL_DMA_SetDataLength(DS_DMA, DS_DMA_CHANNEL, 1);
       LL_DMA_EnableChannel(DS_DMA, DS_DMA_CHANNEL);
       LL_TIM_OC_SetMode(TIM3, LL_TIM_CHANNEL_CH2, LL_TIM_OCMODE_FORCED_ACTIVE);
-      LL_TIM_OC_SetMode(TIM3, LL_TIM_CHANNEL_CH2, LL_TIM_OCMODE_INACTIVE);
       LL_TIM_EnableCounter(TIM3);
+      LL_TIM_OC_SetMode(TIM3, LL_TIM_CHANNEL_CH2, LL_TIM_OCMODE_INACTIVE);
       while (LL_TIM_IsEnabledCounter(TIM3))
        ;
-      debug_printf("XXX %08x\n", ds_dma_buffer);
+      DEBUG("XXX %08x\n", ds_dma_buffer);
       if (ds_dma_buffer & DS_PIN_MASK)
        out |= m;
       LL_DMA_DisableChannel(DS_DMA, DS_DMA_CHANNEL);
@@ -121,6 +121,7 @@ static int ds_recv_block(uint n)
   for (uint i=0; i<n; i++)
     {
       uint b = ds_recv_byte();
+      // debug_printf("%02x ", b);
       ds_buf[i] = b;
       for (uint j=0; j<8; j++)
        {
@@ -131,6 +132,7 @@ static int ds_recv_block(uint n)
          b >>= 1;
        }
     }
+  // debug_printf("\n");
 
   if (crc)
     {
@@ -152,8 +154,6 @@ void ds_test(void)
   ds_send_byte(0x33);
   ds_recv_block(8);
 
-  for(;;);
-
   // FIXME: Configure precision
 
   for (;;)
index e056fdc6c5585013bdb99d98f666f99ef47cbcbd..cb54168bf568f2a3eefd43d293dcc229cacfadeb 100644 (file)
@@ -494,6 +494,10 @@ static void MX_GPIO_Init(void)
   GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_OPENDRAIN;
   LL_GPIO_Init(GPIOB, &GPIO_InitStruct);
 
+  // XXX: By some magic, the above initialization does not always work,
+  // so we repeat it here.
+  LL_GPIO_SetOutputPin(GPIOB, SSR3_Pin|SSR4_Pin|SSR1_Pin|SSR2_Pin);
+
 }
 
 /* USER CODE BEGIN 4 */