Subversion Repositories EDIS_Ignition

Rev

Rev 4 | Rev 9 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 4 Rev 5
Line 66... Line 66...
66
 
66
 
67
// compensated pressure in mb * 100
67
// compensated pressure in mb * 100
68
uint32_t comp_pres = 0;
68
uint32_t comp_pres = 0;
69
// compensated temperature
69
// compensated temperature
70
int32_t comp_temp = -10000;
70
int32_t comp_temp = -10000;
-
 
71
 
-
 
72
int32_t timing = 0;
71
/* USER CODE END PV */
73
/* USER CODE END PV */
72
 
74
 
73
/* Private function prototypes -----------------------------------------------*/
75
/* Private function prototypes -----------------------------------------------*/
74
void SystemClock_Config(void);
76
void SystemClock_Config(void);
75
static void MX_GPIO_Init(void);
77
static void MX_GPIO_Init(void);
Line 91... Line 93...
91
  ConvToPLXAddr(PLX_MAP, &info);
93
  ConvToPLXAddr(PLX_MAP, &info);
92
  ConvToPLXReading(ConveriMFDData2Raw(PLX_MAP, PRESSURE_kPa, comp_pres / 1000.0), &info);
94
  ConvToPLXReading(ConveriMFDData2Raw(PLX_MAP, PRESSURE_kPa, comp_pres / 1000.0), &info);
93
  int i;
95
  int i;
94
  for (i = 0; i < sizeof(PLX_SensorInfo); ++i)
96
  for (i = 0; i < sizeof(PLX_SensorInfo); ++i)
95
    PutCharSerial(&uc2, info.bytes[i]);
97
    PutCharSerial(&uc2, info.bytes[i]);
-
 
98
 
-
 
99
  ConvToPLXInstance(0, &info);
-
 
100
  ConvToPLXAddr(PLX_Timing, &info);
-
 
101
  ConvToPLXReading(ConveriMFDData2Raw(PLX_Timing, 0, timing / TIMING_SCALE), &info);
-
 
102
  for (i = 0; i < sizeof(PLX_SensorInfo); ++i)
-
 
103
    PutCharSerial(&uc2, info.bytes[i]);
96
}
104
}
97
 
105
 
98
void triggerSAW()
106
void triggerSAW()
99
{
107
{
100
  // trigger SAW timer, timer 1
108
  // trigger SAW timer, timer 1##pragma endregion
-
 
109
 
101
  __HAL_TIM_ENABLE(&htim1);
110
  __HAL_TIM_ENABLE(&htim1);
102
}
111
}
103
 
112
 
104
/* USER CODE END PFP */
113
/* USER CODE END PFP */
105
 
114
 
Line 143... Line 152...
143
  MX_SPI1_Init();
152
  MX_SPI1_Init();
144
  MX_USART2_UART_Init();
153
  MX_USART2_UART_Init();
145
  MX_TIM3_Init();
154
  MX_TIM3_Init();
146
  MX_IWDG_Init();
155
  MX_IWDG_Init();
147
  /* USER CODE BEGIN 2 */
156
  /* USER CODE BEGIN 2 */
-
 
157
 
-
 
158
  init_usart_ctl(&uc2, &huart2);
-
 
159
 
148
  cc_init();
160
  cc_init();
149
 
161
 
-
 
162
  HAL_TIM_Base_MspInit(&htim1);
-
 
163
 
150
  HAL_TIM_Base_Start(&htim1);
164
  HAL_TIM_Base_Start(&htim1);
-
 
165
  HAL_TIM_OC_Start(&htim1, TIM_CHANNEL_1);
-
 
166
 
-
 
167
  // initialise all the STMCubeMX stuff
-
 
168
  HAL_TIM_Base_MspInit(&htim2);
-
 
169
  // Start the counter
-
 
170
  HAL_TIM_Base_Start(&htim2);
-
 
171
  // Start the input capture and the rising edge interrupt
-
 
172
  HAL_TIM_IC_Start_IT(&htim2, TIM_CHANNEL_1);
-
 
173
  // Start the input capture and the falling edge interrupt
-
 
174
  HAL_TIM_IC_Start_IT(&htim2, TIM_CHANNEL_2);
151
 
175
 
152
  __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, 5); // delay of 5 uS
176
  __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, 5); // delay of 5 uS
153
 
177
 
154
  HAL_I2C_ClearBusyFlagErrata_2_14_7(&hi2c1);
178
  HAL_I2C_ClearBusyFlagErrata_2_14_7(&hi2c1);
155
  MX_I2C1_Init();
179
  MX_I2C1_Init();
Line 164... Line 188...
164
 
188
 
165
  // used to store data
189
  // used to store data
166
  PLX_SensorInfo info;
190
  PLX_SensorInfo info;
167
  int infoCount = -1;
191
  int infoCount = -1;
168
 
192
 
169
  HAL_IWDG_Init(&hiwdg);
193
  // HAL_IWDG_Init(&hiwdg);
170
  /* USER CODE END 2 */
194
  /* USER CODE END 2 */
171
 
195
 
172
  /* Infinite loop */
196
  /* Infinite loop */
173
  /* USER CODE BEGIN WHILE */
197
  /* USER CODE BEGIN WHILE */
174
  while (1)
198
  while (1)
Line 192... Line 216...
192
 
216
 
193
      break;
217
      break;
194
    case 1:
218
    case 1:
195
      if (HAL_GetTick() > displayOff)
219
      if (HAL_GetTick() > displayOff)
196
      {
220
      {
197
        intensity = 0;
221
        intensity = 1; // was 0
198
      }
222
      }
199
    default:
223
    default:
200
      break;
224
      break;
201
    }
225
    }
202
    cc_display(0, intensity);
226
    cc_display(0, intensity);
203
 
227
 
204
    if (HAL_GetTick() - lastTick > 200)
228
    if (HAL_GetTick() - lastTick > T100MS)
205
    {
229
    {
206
      lastTick = HAL_GetTick();
230
      lastTick = HAL_GetTick();
207
      /* Reading the raw data from sensor */
231
      /* Reading the raw data from sensor */
208
      struct bmp280_uncomp_data ucomp_data;
232
      struct bmp280_uncomp_data ucomp_data;
209
      uint8_t rslt = bmp280_get_uncomp_data(&ucomp_data, &bmp);
233
      uint8_t rslt = bmp280_get_uncomp_data(&ucomp_data, &bmp);
210
 
234
 
211
      uint32_t comp_pres = 0;
-
 
212
      int32_t comp_temp = -10000;
-
 
213
      if (rslt == 0)
235
      if (rslt == 0)
214
      {
236
      {
215
        uint8_t rslt2 = bmp280_get_comp_pres_32bit(&comp_pres, ucomp_data.uncomp_press, &bmp);
237
        uint8_t rslt2 = bmp280_get_comp_pres_32bit(&comp_pres, ucomp_data.uncomp_press, &bmp);
216
 
238
 
217
        uint8_t rslt3 = bmp280_get_comp_temp_32bit(&comp_temp, ucomp_data.uncomp_temp, &bmp);
239
        uint8_t rslt3 = bmp280_get_comp_temp_32bit(&comp_temp, ucomp_data.uncomp_temp, &bmp);
218
        if (rslt2 == 0 && rslt3 == 0)
240
        if (rslt2 == 0 && rslt3 == 0)
219
          cc_feed_env(comp_pres, comp_temp);
241
          cc_feed_env(comp_pres, comp_temp);
220
      }
242
      }
221
    }
-
 
222
 
243
 
223
    // compute RPM value, feed to display
244
      // compute RPM value, feed to display
224
 
245
 
225
    int rpm = CalculateRPM();
246
      int rpm = CalculateRPM();
226
    if (rpm > 0)
247
      if (rpm > 0)
227
    {
248
      {
228
      cc_feed_rpm(rpm);
249
        cc_feed_rpm(rpm);
229
      // compute timing value, feed to display
250
        // compute timing value, feed to display
230
      int timing = mapTiming(rpm, 1000 - comp_pres / 100);
251
        timing = mapTiming(rpm, 1000 - comp_pres / 100);
231
      cc_feed_timing(timing);
252
        cc_feed_timing(timing);
232
      int microsecs = mapTimingToMicroseconds(timing, 0);
253
        int microsecs = mapTimingToMicroseconds(timing, 0);
233
      __HAL_TIM_SET_AUTORELOAD(&htim1, microsecs + SAW_DELAY);
254
        __HAL_TIM_SET_AUTORELOAD(&htim1, microsecs + SAW_DELAY);
-
 
255
      }
234
    }
256
    }
235
    // Handle PLX
257
    // Handle PLX
236
    // poll the  input for a stop bit or timeout
258
    // poll the  input for a stop bit or timeout
237
    if (PollSerial(&uc2))
259
    if (PollSerial(&uc2))
238
    {
260
    {
-
 
261
      HAL_IWDG_Refresh(&hiwdg);
239
      timeout = HAL_GetTick() + T100MS * 2;
262
      timeout = HAL_GetTick() + T100MS * 2;
240
      char c = GetCharSerial(&uc2);
263
      char c = GetCharSerial(&uc2);
-
 
264
 
241
      if (c != PLX_Stop)
265
      if (c != PLX_Stop)
242
      {
266
      {
243
        PutCharSerial(&uc2, c); // echo all but the stop bit
267
        PutCharSerial(&uc2, c); // echo all but the stop bit
244
      }
268
      }
245
      else
269
      else
Line 270... Line 294...
270
    }
294
    }
271
 
295
 
272
    // sort out auto-sending
296
    // sort out auto-sending
273
    if (HAL_GetTick() > timeout)
297
    if (HAL_GetTick() > timeout)
274
    {
298
    {
-
 
299
      PutCharSerial(&uc2, PLX_Start);
275
      timeout = HAL_GetTick() + T100MS;
300
      timeout = HAL_GetTick() + T100MS;
276
      send = 1;
301
      send = 1;
277
    }
302
    }
278
 
303
 
279
    if (send)
304
    if (send)
Line 417... Line 442...
417
  /* USER CODE BEGIN IWDG_Init 1 */
442
  /* USER CODE BEGIN IWDG_Init 1 */
418
 
443
 
419
  /* USER CODE END IWDG_Init 1 */
444
  /* USER CODE END IWDG_Init 1 */
420
  hiwdg.Instance = IWDG;
445
  hiwdg.Instance = IWDG;
421
  hiwdg.Init.Prescaler = IWDG_PRESCALER_4;
446
  hiwdg.Init.Prescaler = IWDG_PRESCALER_4;
422
  hiwdg.Init.Reload = 819;
447
  hiwdg.Init.Reload = 1000;
423
  if (HAL_IWDG_Init(&hiwdg) != HAL_OK)
448
  if (HAL_IWDG_Init(&hiwdg) != HAL_OK)
424
  {
449
  {
425
    Error_Handler();
450
    Error_Handler();
426
  }
451
  }
427
  /* USER CODE BEGIN IWDG_Init 2 */
452
  /* USER CODE BEGIN IWDG_Init 2 */
Line 500... Line 525...
500
  sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
525
  sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
501
  if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK)
526
  if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK)
502
  {
527
  {
503
    Error_Handler();
528
    Error_Handler();
504
  }
529
  }
505
  if (HAL_TIM_OC_Init(&htim1) != HAL_OK)
530
  if (HAL_TIM_PWM_Init(&htim1) != HAL_OK)
506
  {
531
  {
507
    Error_Handler();
532
    Error_Handler();
508
  }
533
  }
509
  if (HAL_TIM_OnePulse_Init(&htim1, TIM_OPMODE_SINGLE) != HAL_OK)
534
  if (HAL_TIM_OnePulse_Init(&htim1, TIM_OPMODE_SINGLE) != HAL_OK)
510
  {
535
  {
Line 514... Line 539...
514
  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
539
  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
515
  if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK)
540
  if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK)
516
  {
541
  {
517
    Error_Handler();
542
    Error_Handler();
518
  }
543
  }
519
  sConfigOC.OCMode = TIM_OCMODE_ACTIVE;
544
  sConfigOC.OCMode = TIM_OCMODE_PWM1;
520
  sConfigOC.Pulse = SAW_DELAY;
545
  sConfigOC.Pulse = SAW_DELAY;
521
  sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
546
  sConfigOC.OCPolarity = TIM_OCPOLARITY_LOW;
522
  sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
547
  sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
523
  sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
548
  sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
524
  sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
549
  sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
525
  sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
550
  sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
526
  if (HAL_TIM_OC_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
551
  if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
527
  {
552
  {
528
    Error_Handler();
553
    Error_Handler();
529
  }
554
  }
530
  __HAL_TIM_ENABLE_OCxPRELOAD(&htim1, TIM_CHANNEL_1);
-
 
531
  sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE;
555
  sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE;
532
  sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE;
556
  sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE;
533
  sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF;
557
  sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF;
534
  sBreakDeadTimeConfig.DeadTime = 0;
558
  sBreakDeadTimeConfig.DeadTime = 0;
535
  sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE;
559
  sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE;
Line 556... Line 580...
556
  /* USER CODE BEGIN TIM2_Init 0 */
580
  /* USER CODE BEGIN TIM2_Init 0 */
557
 
581
 
558
  /* USER CODE END TIM2_Init 0 */
582
  /* USER CODE END TIM2_Init 0 */
559
 
583
 
560
  TIM_ClockConfigTypeDef sClockSourceConfig = {0};
584
  TIM_ClockConfigTypeDef sClockSourceConfig = {0};
561
  TIM_SlaveConfigTypeDef sSlaveConfig = {0};
-
 
562
  TIM_MasterConfigTypeDef sMasterConfig = {0};
585
  TIM_MasterConfigTypeDef sMasterConfig = {0};
-
 
586
  TIM_IC_InitTypeDef sConfigIC = {0};
563
 
587
 
564
  /* USER CODE BEGIN TIM2_Init 1 */
588
  /* USER CODE BEGIN TIM2_Init 1 */
565
 
589
 
566
  /* USER CODE END TIM2_Init 1 */
590
  /* USER CODE END TIM2_Init 1 */
567
  htim2.Instance = TIM2;
591
  htim2.Instance = TIM2;
568
  htim2.Init.Prescaler = 71;
592
  htim2.Init.Prescaler = 719;
569
  htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
593
  htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
570
  htim2.Init.Period = 9;
594
  htim2.Init.Period = 65535;
571
  htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
595
  htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
572
  htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
596
  htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
573
  if (HAL_TIM_Base_Init(&htim2) != HAL_OK)
597
  if (HAL_TIM_Base_Init(&htim2) != HAL_OK)
574
  {
598
  {
575
    Error_Handler();
599
    Error_Handler();
Line 577... Line 601...
577
  sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
601
  sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
578
  if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK)
602
  if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK)
579
  {
603
  {
580
    Error_Handler();
604
    Error_Handler();
581
  }
605
  }
582
  if (HAL_TIM_OnePulse_Init(&htim2, TIM_OPMODE_SINGLE) != HAL_OK)
606
  if (HAL_TIM_IC_Init(&htim2) != HAL_OK)
583
  {
-
 
584
    Error_Handler();
-
 
585
  }
-
 
586
  sSlaveConfig.SlaveMode = TIM_SLAVEMODE_TRIGGER;
-
 
587
  sSlaveConfig.InputTrigger = TIM_TS_ETRF;
-
 
588
  sSlaveConfig.TriggerPolarity = TIM_TRIGGERPOLARITY_INVERTED;
-
 
589
  sSlaveConfig.TriggerPrescaler = TIM_TRIGGERPRESCALER_DIV1;
-
 
590
  sSlaveConfig.TriggerFilter = 15;
-
 
591
  if (HAL_TIM_SlaveConfigSynchro(&htim2, &sSlaveConfig) != HAL_OK)
-
 
592
  {
607
  {
593
    Error_Handler();
608
    Error_Handler();
594
  }
609
  }
595
  sMasterConfig.MasterOutputTrigger = TIM_TRGO_UPDATE;
610
  sMasterConfig.MasterOutputTrigger = TIM_TRGO_UPDATE;
596
  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
611
  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
597
  if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
612
  if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
598
  {
613
  {
599
    Error_Handler();
614
    Error_Handler();
600
  }
615
  }
-
 
616
  sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_RISING;
-
 
617
  sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI;
-
 
618
  sConfigIC.ICPrescaler = TIM_ICPSC_DIV1;
-
 
619
  sConfigIC.ICFilter = 0;
-
 
620
  if (HAL_TIM_IC_ConfigChannel(&htim2, &sConfigIC, TIM_CHANNEL_1) != HAL_OK)
-
 
621
  {
-
 
622
    Error_Handler();
-
 
623
  }
-
 
624
  sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_FALLING;
-
 
625
  sConfigIC.ICSelection = TIM_ICSELECTION_INDIRECTTI;
-
 
626
  if (HAL_TIM_IC_ConfigChannel(&htim2, &sConfigIC, TIM_CHANNEL_2) != HAL_OK)
-
 
627
  {
-
 
628
    Error_Handler();
-
 
629
  }
601
  /* USER CODE BEGIN TIM2_Init 2 */
630
  /* USER CODE BEGIN TIM2_Init 2 */
602
 
631
 
603
  /* USER CODE END TIM2_Init 2 */
632
  /* USER CODE END TIM2_Init 2 */
604
}
633
}
605
 
634