Rev 17 | Rev 19 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 17 | Rev 18 | ||
|---|---|---|---|
| Line 21... | Line 21... | ||
| 21 | 21 | ||
| 22 | /* Private includes ----------------------------------------------------------*/ |
22 | /* Private includes ----------------------------------------------------------*/ |
| 23 | /* USER CODE BEGIN Includes */ |
23 | /* USER CODE BEGIN Includes */ |
| 24 | #include "memory.h" |
24 | #include "memory.h" |
| 25 | #include "display.h" |
25 | #include "display.h" |
| 26 | #include "bmp280driver.h" |
26 | #include "bmp280driver.h" |
| 27 | #include "libMisc/fixI2C.h" |
27 | #include "libMisc/fixI2C.h" |
| 28 | #include "libPlx/plx.h" |
28 | #include "libPlx/plx.h" |
| 29 | #include "libSerial/serial.h" |
29 | #include "libSerial/serial.h" |
| 30 | #include "libIgnTiming/timing.h" |
30 | #include "libIgnTiming/timing.h" |
| 31 | #include "libIgnTiming/edis.h" |
31 | #include "libIgnTiming/edis.h" |
| - | 32 | #include "libIgnTiming/rpm.h" |
|
| 32 | #include "saveTiming.h" |
33 | #include "saveTiming.h" |
| 33 | #include "libPLX/commsLib.h" |
34 | #include "libPLX/commsLib.h" |
| 34 | /* USER CODE END Includes */ |
35 | /* USER CODE END Includes */ |
| 35 | 36 | ||
| 36 | /* Private typedef -----------------------------------------------------------*/ |
37 | /* Private typedef -----------------------------------------------------------*/ |
| Line 71... | Line 72... | ||
| 71 | // compensated temperature |
72 | // compensated temperature |
| 72 | int32_t comp_temp = -10000; |
73 | int32_t comp_temp = -10000; |
| 73 | 74 | ||
| 74 | int32_t timing = 0; |
75 | int32_t timing = 0; |
| 75 | 76 | ||
| 76 | // 6 degrees error in timing wheel this time .. |
77 | // 6 degrees error in timing wheel this time .. |
| 77 | int const TIMING_OFFSET = -6 * TIMING_SCALE; |
78 | int const TIMING_OFFSET = -6 * TIMING_SCALE; |
| - | 79 | ||
| - | 80 | // default atmospheric pressure |
|
| - | 81 | uint32_t const DEFAULT_ATMOSPHERIC_PRESSURE = 1014 * 100; |
|
| - | 82 | ||
| - | 83 | uint32_t const DEFAULT_ATMOSPHERIC_TEMPERATURE = 25 * 100; |
|
| 78 | /* USER CODE END PV */ |
84 | /* USER CODE END PV */ |
| 79 | 85 | ||
| 80 | /* Private function prototypes -----------------------------------------------*/ |
86 | /* Private function prototypes -----------------------------------------------*/ |
| 81 | void SystemClock_Config(void); |
87 | void SystemClock_Config(void); |
| 82 | static void MX_GPIO_Init(void); |
88 | static void MX_GPIO_Init(void); |
| Line 88... | Line 94... | ||
| 88 | static void MX_USART2_UART_Init(void); |
94 | static void MX_USART2_UART_Init(void); |
| 89 | static void MX_TIM3_Init(void); |
95 | static void MX_TIM3_Init(void); |
| 90 | static void MX_IWDG_Init(void); |
96 | static void MX_IWDG_Init(void); |
| 91 | /* USER CODE BEGIN PFP */ |
97 | /* USER CODE BEGIN PFP */ |
| 92 | 98 | ||
| 93 | // send a PLX_SensorInfo structure to the usart. |
- | |
| 94 | void sendInfo(usart_ctl *uc, PLX_SensorInfo *info) |
- | |
| 95 | { |
- | |
| 96 | for (int i = 0; i < sizeof(PLX_SensorInfo); ++i) |
- | |
| 97 | PutCharSerial(uc, info->bytes[i]); |
- | |
| 98 | } |
- | |
| 99 | - | ||
| 100 | 99 | ||
| 101 | void libPLXcallbackSendUserData() |
100 | void libPLXcallbackSendUserData() |
| 102 | { |
101 | { |
| 103 | // send MAP |
102 | // send MAP |
| 104 | PLX_SensorInfo info; |
103 | PLX_SensorInfo info; |
| Line 197... | Line 196... | ||
| 197 | uint32_t displayOff = lastTick + 10000; |
196 | uint32_t displayOff = lastTick + 10000; |
| 198 | uint32_t displayReinitialise = lastTick + DISPLAY_REINITIALISE; // every minute, reinitialise display because of risk of noise |
197 | uint32_t displayReinitialise = lastTick + DISPLAY_REINITIALISE; // every minute, reinitialise display because of risk of noise |
| 199 | 198 | ||
| 200 | uint8_t intensity = 2; |
199 | uint8_t intensity = 2; |
| 201 | 200 | ||
| 202 | - | ||
| 203 | ResetRxBuffer(&uc2); |
201 | ResetRxBuffer(&uc2); |
| 204 | 202 | ||
| 205 | resetPLX(); |
203 | resetPLX(); |
| 206 | 204 | ||
| 207 | // HAL_IWDG_Init(&hiwdg); |
205 | // HAL_IWDG_Init(&hiwdg); |
| Line 252... | Line 250... | ||
| 252 | lastTick = HAL_GetTick(); |
250 | lastTick = HAL_GetTick(); |
| 253 | /* Reading the raw data from sensor */ |
251 | /* Reading the raw data from sensor */ |
| 254 | struct bmp280_uncomp_data ucomp_data; |
252 | struct bmp280_uncomp_data ucomp_data; |
| 255 | uint8_t rslt = bmp280_get_uncomp_data(&ucomp_data, &bmp); |
253 | uint8_t rslt = bmp280_get_uncomp_data(&ucomp_data, &bmp); |
| 256 | 254 | ||
| - | 255 | uint8_t rslt2 = 1; |
|
| - | 256 | uint8_t rslt3 = 1; |
|
| - | 257 | ||
| 257 | if (rslt == 0) |
258 | if (rslt == 0) |
| 258 | { |
259 | { |
| 259 | uint8_t rslt2 = bmp280_get_comp_pres_32bit(&comp_pres, ucomp_data.uncomp_press, &bmp); |
260 | rslt2 = bmp280_get_comp_pres_32bit(&comp_pres, ucomp_data.uncomp_press, &bmp); |
| 260 | 261 | ||
| 261 | uint8_t rslt3 = bmp280_get_comp_temp_32bit(&comp_temp, ucomp_data.uncomp_temp, &bmp); |
262 | rslt3 = bmp280_get_comp_temp_32bit(&comp_temp, ucomp_data.uncomp_temp, &bmp); |
| 262 | 263 | ||
| 263 | #if defined TEST_CODE |
264 | #if defined TEST_CODE |
| 264 | comp_pres = 100000; |
265 | comp_pres = 100000; |
| 265 | comp_temp = 4000; |
266 | comp_temp = 4000; |
| 266 | #endif |
267 | #endif |
| 267 | if (rslt2 == 0 && rslt3 == 0) |
- | |
| 268 | cc_feed_env(comp_pres, comp_temp); |
- | |
| 269 | } |
268 | } |
| - | 269 | // if the BMP280 pressure is good, then allow it through, otherwise drop to |
|
| - | 270 | // centrifugal advance only. |
|
| - | 271 | if (rslt == BMP280_OK && rslt2 == BMP280_OK && rslt3 == BMP280_OK) |
|
| - | 272 | cc_feed_env(comp_pres, comp_temp); |
|
| - | 273 | else |
|
| - | 274 | cc_feed_env(DEFAULT_ATMOSPHERIC_PRESSURE, DEFAULT_ATMOSPHERIC_TEMPERATURE); |
|
| 270 | 275 | ||
| 271 | // compute RPM value, feed to display |
276 | // compute RPM value, feed to display |
| 272 | #if defined TEST_CODE |
277 | #if defined TEST_CODE |
| 273 | int rpm = 1000; |
278 | int rpm = 1000; |
| 274 | #else |
279 | #else |
| 275 | int rpm = CalculateRPM(); |
280 | int rpm = CalculateRPM(); |
| 276 | #endif |
281 | #endif |
| 277 | if (rpm > 0) |
282 | if (rpm > 0) |
| 278 | { |
283 | { |
| 279 | cc_feed_rpm(rpm); |
284 | cc_feed_rpm(rpm); |
| 280 | // compute timing value, feed to display |
285 | // compute timing value, feed to display |
| 281 | timing = mapTiming(rpm, 1000 - comp_pres / 100); |
286 | timing = mapTiming(rpm, 1000 - comp_pres / 100); |
| 282 | cc_feed_timing(timing ); |
287 | cc_feed_timing(timing); |
| 283 | int microsecs = mapTimingToMicroseconds(timing + TIMING_OFFSET, 0); |
288 | int microsecs = mapTimingToMicroseconds(timing + TIMING_OFFSET, 0); |
| 284 | __HAL_TIM_SET_AUTORELOAD(&htim1, microsecs + SAW_DELAY); |
289 | __HAL_TIM_SET_AUTORELOAD(&htim1, microsecs + SAW_DELAY); |
| 285 | } |
290 | } |
| 286 | } |
291 | } |
| 287 | 292 | ||
| 288 | - | ||
| 289 | // Handle PLX |
293 | // Handle PLX |
| 290 | libPLXpollData(&uc2); |
294 | libPLXpollData(&uc2); |
| 291 | 295 | ||
| 292 | /* USER CODE END WHILE */ |
296 | /* USER CODE END WHILE */ |
| 293 | 297 | ||
| 294 | /* USER CODE BEGIN 3 */ |
298 | /* USER CODE BEGIN 3 */ |
| 295 | watchdogWrite(); |
299 | watchdogWrite(); |
| 296 | 300 | ||
| - | 301 | HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); |
|
| - | 302 | ||
| 297 | // todo occasionally saveTimingInfoToNvram(); |
303 | // todo occasionally saveTimingInfoToNvram(); |
| 298 | } |
304 | } |
| 299 | /* USER CODE END 3 */ |
305 | /* USER CODE END 3 */ |
| 300 | } |
306 | } |
| 301 | 307 | ||
| Line 694... | Line 700... | ||
| 694 | * @retval None |
700 | * @retval None |
| 695 | */ |
701 | */ |
| 696 | static void MX_GPIO_Init(void) |
702 | static void MX_GPIO_Init(void) |
| 697 | { |
703 | { |
| 698 | GPIO_InitTypeDef GPIO_InitStruct = {0}; |
704 | GPIO_InitTypeDef GPIO_InitStruct = {0}; |
| - | 705 | /* USER CODE BEGIN MX_GPIO_Init_1 */ |
|
| - | 706 | /* USER CODE END MX_GPIO_Init_1 */ |
|
| 699 | 707 | ||
| 700 | /* GPIO Ports Clock Enable */ |
708 | /* GPIO Ports Clock Enable */ |
| - | 709 | __HAL_RCC_GPIOC_CLK_ENABLE(); |
|
| 701 | __HAL_RCC_GPIOD_CLK_ENABLE(); |
710 | __HAL_RCC_GPIOD_CLK_ENABLE(); |
| 702 | __HAL_RCC_GPIOA_CLK_ENABLE(); |
711 | __HAL_RCC_GPIOA_CLK_ENABLE(); |
| 703 | __HAL_RCC_GPIOB_CLK_ENABLE(); |
712 | __HAL_RCC_GPIOB_CLK_ENABLE(); |
| 704 | 713 | ||
| 705 | /*Configure GPIO pin Output Level */ |
714 | /*Configure GPIO pin Output Level */ |
| - | 715 | HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET); |
|
| - | 716 | ||
| - | 717 | /*Configure GPIO pin Output Level */ |
|
| 706 | HAL_GPIO_WritePin(GPIOA, SPI1_NSS_Pin | SPI1_RESET_Pin, GPIO_PIN_RESET); |
718 | HAL_GPIO_WritePin(GPIOA, SPI1_NSS_Pin | SPI1_RESET_Pin, GPIO_PIN_RESET); |
| 707 | 719 | ||
| 708 | /*Configure GPIO pin Output Level */ |
720 | /*Configure GPIO pin Output Level */ |
| 709 | HAL_GPIO_WritePin(SPI1_CD_GPIO_Port, SPI1_CD_Pin, GPIO_PIN_RESET); |
721 | HAL_GPIO_WritePin(SPI1_CD_GPIO_Port, SPI1_CD_Pin, GPIO_PIN_RESET); |
| 710 | 722 | ||
| - | 723 | /*Configure GPIO pin : LED_Pin */ |
|
| - | 724 | GPIO_InitStruct.Pin = LED_Pin; |
|
| - | 725 | GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; |
|
| - | 726 | GPIO_InitStruct.Pull = GPIO_NOPULL; |
|
| - | 727 | GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; |
|
| - | 728 | HAL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct); |
|
| - | 729 | ||
| 711 | /*Configure GPIO pins : SPI1_NSS_Pin SPI1_RESET_Pin */ |
730 | /*Configure GPIO pins : SPI1_NSS_Pin SPI1_RESET_Pin */ |
| 712 | GPIO_InitStruct.Pin = SPI1_NSS_Pin | SPI1_RESET_Pin; |
731 | GPIO_InitStruct.Pin = SPI1_NSS_Pin | SPI1_RESET_Pin; |
| 713 | GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; |
732 | GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; |
| 714 | GPIO_InitStruct.Pull = GPIO_NOPULL; |
733 | GPIO_InitStruct.Pull = GPIO_NOPULL; |
| 715 | GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; |
734 | GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; |
| Line 731... | Line 750... | ||
| 731 | /*Configure GPIO pin : dualSpark_Pin */ |
750 | /*Configure GPIO pin : dualSpark_Pin */ |
| 732 | GPIO_InitStruct.Pin = dualSpark_Pin; |
751 | GPIO_InitStruct.Pin = dualSpark_Pin; |
| 733 | GPIO_InitStruct.Mode = GPIO_MODE_INPUT; |
752 | GPIO_InitStruct.Mode = GPIO_MODE_INPUT; |
| 734 | GPIO_InitStruct.Pull = GPIO_PULLUP; |
753 | GPIO_InitStruct.Pull = GPIO_PULLUP; |
| 735 | HAL_GPIO_Init(dualSpark_GPIO_Port, &GPIO_InitStruct); |
754 | HAL_GPIO_Init(dualSpark_GPIO_Port, &GPIO_InitStruct); |
| - | 755 | ||
| - | 756 | /* USER CODE BEGIN MX_GPIO_Init_2 */ |
|
| - | 757 | /* USER CODE END MX_GPIO_Init_2 */ |
|
| 736 | } |
758 | } |
| 737 | 759 | ||
| 738 | /* USER CODE BEGIN 4 */ |
760 | /* USER CODE BEGIN 4 */ |
| 739 | 761 | ||
| 740 | /* USER CODE END 4 */ |
762 | /* USER CODE END 4 */ |