Mercurial > public > ostc4
comparison Small_CPU/Src/externalInterface.c @ 918:f72613a152dd Evo_2_23
Switch external interface tx communication to DMA:
In the previous version the transmitting of data was done in polling mode. With the introduction of new sensors the length of commands send to the sensor may increase and have a impact to the runtim behavior of the SW. To avoid this the DMA transfers for TX has been activated.
| author | Ideenmodellierer |
|---|---|
| date | Sun, 03 Nov 2024 15:40:55 +0100 |
| parents | 4832981f9af8 |
| children | eb4109d7d1e9 |
comparison
equal
deleted
inserted
replaced
| 917:0d6c4b40fae4 | 918:f72613a152dd |
|---|---|
| 103 { | 103 { |
| 104 uint16_t index; | 104 uint16_t index; |
| 105 uint16_t coeff; | 105 uint16_t coeff; |
| 106 activeChannel = 0; | 106 activeChannel = 0; |
| 107 timeoutCnt = 0; | 107 timeoutCnt = 0; |
| 108 externalInterfacePresent = 0; | |
| 109 delayAdcConversion = 0; | 108 delayAdcConversion = 0; |
| 110 if(externalInterface_StartConversion(activeChannel) == HAL_OK) | 109 if(externalInterface_StartConversion(activeChannel) == HAL_OK) |
| 111 { | 110 { |
| 112 externalInterfacePresent = 1; | 111 externalInterfacePresent = 1; |
| 113 global.deviceDataSendToMaster.hw_Info.extADC = 1; | 112 global.deviceDataSendToMaster.hw_Info.extADC = 1; |
| 130 | 129 |
| 131 void externalInterface_InitDatastruct(void) | 130 void externalInterface_InitDatastruct(void) |
| 132 { | 131 { |
| 133 uint8_t index = 0; | 132 uint8_t index = 0; |
| 134 /* init data values */ | 133 /* init data values */ |
| 135 externalV33_On = 0; | |
| 136 externalADC_On = 0; | |
| 137 externalUART_Protocol = 0; | 134 externalUART_Protocol = 0; |
| 138 externalCO2Value = 0; | 135 externalCO2Value = 0; |
| 139 externalCO2SignalStrength = 0; | 136 externalCO2SignalStrength = 0; |
| 140 externalCO2Status = 0; | 137 externalCO2Status = 0; |
| 141 externalCO2Scale = 0.0; | 138 externalCO2Scale = 0.0; |
| 214 { | 211 { |
| 215 delayAdcConversion = 1; | 212 delayAdcConversion = 1; |
| 216 } | 213 } |
| 217 timeoutCnt = 0; | 214 timeoutCnt = 0; |
| 218 } | 215 } |
| 219 | |
| 220 } | 216 } |
| 221 if(timeoutCnt++ >= ADC_TIMEOUT) | 217 if(timeoutCnt++ >= ADC_TIMEOUT) |
| 222 { | 218 { |
| 223 externalInterface_StartConversion(activeChannel); | 219 externalInterface_StartConversion(activeChannel); |
| 224 delayAdcConversion = 0; | 220 delayAdcConversion = 0; |
| 380 { | 376 { |
| 381 case EXT_INTERFACE_UART_OFF: | 377 case EXT_INTERFACE_UART_OFF: |
| 382 case EXT_INTERFACE_UART_CO2: | 378 case EXT_INTERFACE_UART_CO2: |
| 383 case EXT_INTERFACE_UART_O2: | 379 case EXT_INTERFACE_UART_O2: |
| 384 case EXT_INTERFACE_UART_SENTINEL: | 380 case EXT_INTERFACE_UART_SENTINEL: |
| 381 case EXT_INTERFACE_UART_GNSS: | |
| 385 if((externalAutoDetect <= DETECTION_START) | 382 if((externalAutoDetect <= DETECTION_START) |
| 386 || ((protocol == EXT_INTERFACE_UART_O2) && (externalAutoDetect >= DETECTION_UARTMUX) && (externalAutoDetect <= DETECTION_DIGO2_3)) | 383 || ((protocol == EXT_INTERFACE_UART_O2) && (externalAutoDetect >= DETECTION_UARTMUX) && (externalAutoDetect <= DETECTION_DIGO2_3)) |
| 387 | 384 |
| 388 #ifdef ENABLE_CO2_SUPPORT | 385 #ifdef ENABLE_CO2_SUPPORT |
| 389 || ((externalAutoDetect >= DETECTION_CO2_0) && (externalAutoDetect <= DETECTION_CO2_3)) | 386 || ((externalAutoDetect >= DETECTION_CO2_0) && (externalAutoDetect <= DETECTION_CO2_3)) |
| 574 | 571 |
| 575 memset(Mux2ADCMap,0xFF, sizeof(Mux2ADCMap)); | 572 memset(Mux2ADCMap,0xFF, sizeof(Mux2ADCMap)); |
| 576 | 573 |
| 577 for(index2 = 0; index2 < MAX_ADC_CHANNEL; index2++) /* Unmap old mirror instances */ | 574 for(index2 = 0; index2 < MAX_ADC_CHANNEL; index2++) /* Unmap old mirror instances */ |
| 578 { | 575 { |
| 579 if((pMap[index2] == SENSOR_DIGO2M) || (pMap[index2] == SENSOR_CO2M)) | 576 if((pMap[index2] == SENSOR_DIGO2M) || (pMap[index2] == SENSOR_CO2M) || (pMap[index2] == SENSOR_GNSSM)) |
| 580 { | 577 { |
| 581 pMap[index2] = SENSOR_NONE; | 578 pMap[index2] = SENSOR_NONE; |
| 582 } | 579 } |
| 583 } | 580 } |
| 584 | 581 |
| 585 /* Map Mux O2 sensors to ADC Slot if ADC slot is not in use */ | 582 /* Map Mux O2 sensors to ADC Slot if ADC slot is not in use */ |
| 586 for(index = 0; index < EXT_INTERFACE_SENSOR_CNT-1; index++) | 583 for(index = EXT_INTERFACE_MUX_OFFSET; index < EXT_INTERFACE_SENSOR_CNT-1; index++) |
| 587 { | 584 { |
| 588 if(pMap[index] == SENSOR_DIGO2) | 585 if(pMap[index] == SENSOR_DIGO2) |
| 589 { | 586 { |
| 590 for(index2 = 0; index2 < MAX_ADC_CHANNEL; index2++) | 587 for(index2 = 0; index2 < MAX_ADC_CHANNEL; index2++) |
| 591 { | 588 { |
| 596 break; | 593 break; |
| 597 } | 594 } |
| 598 } | 595 } |
| 599 } | 596 } |
| 600 } | 597 } |
| 601 for(index = 0; index < EXT_INTERFACE_SENSOR_CNT-1; index++) | 598 for(index = EXT_INTERFACE_MUX_OFFSET; index < EXT_INTERFACE_SENSOR_CNT-1; index++) |
| 602 { | 599 { |
| 603 if(pMap[index] == SENSOR_CO2) | 600 if(pMap[index] == SENSOR_CO2) |
| 604 { | 601 { |
| 605 for(index2 = 0; index2 < MAX_ADC_CHANNEL; index2++) | 602 for(index2 = 0; index2 < MAX_ADC_CHANNEL; index2++) |
| 606 { | 603 { |
| 611 break; | 608 break; |
| 612 } | 609 } |
| 613 } | 610 } |
| 614 } | 611 } |
| 615 } | 612 } |
| 616 for(index = 0; index < EXT_INTERFACE_SENSOR_CNT-1; index++) | 613 for(index = EXT_INTERFACE_MUX_OFFSET; index < EXT_INTERFACE_SENSOR_CNT-1; index++) |
| 617 { | 614 { |
| 618 if(pMap[index] == SENSOR_GNSS) | 615 if(pMap[index] == SENSOR_GNSS) |
| 619 { | 616 { |
| 620 for(index2 = 0; index2 < MAX_ADC_CHANNEL; index2++) | 617 for(index2 = 0; index2 < MAX_ADC_CHANNEL; index2++) |
| 621 { | 618 { |
| 657 | 654 |
| 658 void externalInterface_AutodetectSensor() | 655 void externalInterface_AutodetectSensor() |
| 659 { | 656 { |
| 660 static uint8_t sensorIndex = 0; | 657 static uint8_t sensorIndex = 0; |
| 661 static uint8_t uartMuxChannel = 0; | 658 static uint8_t uartMuxChannel = 0; |
| 659 #ifdef ENABLE_GNSS_SUPPORT | |
| 660 static uint8_t detectionDelayCnt = 0; | |
| 661 #endif | |
| 662 uint8_t index = 0; | 662 uint8_t index = 0; |
| 663 #ifdef ENABLE_GNSS_SUPPORT | 663 |
| 664 uint8_t detectionDelayCnt = 0; | |
| 665 #endif | |
| 666 uint8_t cntSensor = 0; | 664 uint8_t cntSensor = 0; |
| 667 uint8_t cntUARTSensor = 0; | 665 uint8_t cntUARTSensor = 0; |
| 668 #ifdef ENABLE_CO2_SUPPORT | 666 #ifdef ENABLE_CO2_SUPPORT |
| 669 uint8_t cmdString[10]; | 667 uint8_t cmdString[10]; |
| 670 uint8_t cmdLength = 0; | 668 uint8_t cmdLength = 0; |
| 839 | 837 |
| 840 | 838 |
| 841 #if defined ENABLE_SENTINEL_MODE || defined ENABLE_GNSS_SUPPORT | 839 #if defined ENABLE_SENTINEL_MODE || defined ENABLE_GNSS_SUPPORT |
| 842 #ifdef ENABLE_GNSS_SUPPORT | 840 #ifdef ENABLE_GNSS_SUPPORT |
| 843 externalAutoDetect = DETECTION_GNSS_0; | 841 externalAutoDetect = DETECTION_GNSS_0; |
| 842 externalInterface_SwitchUART(EXT_INTERFACE_UART_GNSS); | |
| 844 #else | 843 #else |
| 845 #ifdef ENABLE_SENTINEL_MODE | 844 #ifdef ENABLE_SENTINEL_MODE |
| 846 externalAutoDetect = DETECTION_SENTINEL; | 845 externalAutoDetect = DETECTION_SENTINEL; |
| 847 #endif | 846 #endif |
| 848 #endif | 847 #endif |
| 865 tmpSensorMap[uartMuxChannel - 1 + EXT_INTERFACE_MUX_OFFSET] = SENSOR_NONE; | 864 tmpSensorMap[uartMuxChannel - 1 + EXT_INTERFACE_MUX_OFFSET] = SENSOR_NONE; |
| 866 uartMuxChannel = 1; | 865 uartMuxChannel = 1; |
| 867 tmpSensorMap[EXT_INTERFACE_MUX_OFFSET] = SENSOR_GNSS; | 866 tmpSensorMap[EXT_INTERFACE_MUX_OFFSET] = SENSOR_GNSS; |
| 868 externalInterface_SensorState[EXT_INTERFACE_MUX_OFFSET] = UART_COMMON_INIT; | 867 externalInterface_SensorState[EXT_INTERFACE_MUX_OFFSET] = UART_COMMON_INIT; |
| 869 externalInterface_CheckBaudrate(SENSOR_GNSS); | 868 externalInterface_CheckBaudrate(SENSOR_GNSS); |
| 870 externalInterfaceMuxReqIntervall = 200; /* iterations needed for module config */ | 869 externalInterfaceMuxReqIntervall = 500; /* iterations needed for module config */ |
| 871 detectionDelayCnt = 3; | 870 detectionDelayCnt = 6; |
| 872 // uartGnss_SendCmd(GNSSCMD_MODE_POLL, cmdString, &cmdLength); | |
| 873 } | 871 } |
| 874 break; | 872 break; |
| 875 case DETECTION_GNSS_0: | 873 case DETECTION_GNSS_0: |
| 876 case DETECTION_GNSS_1: | 874 case DETECTION_GNSS_1: |
| 877 case DETECTION_GNSS_2: | 875 case DETECTION_GNSS_2: |
| 1056 index++; | 1054 index++; |
| 1057 if(index == MAX_MUX_CHANNEL) | 1055 if(index == MAX_MUX_CHANNEL) |
| 1058 { | 1056 { |
| 1059 index = 0; | 1057 index = 0; |
| 1060 } | 1058 } |
| 1061 if(((pmap[index + EXT_INTERFACE_MUX_OFFSET] == SENSOR_DIGO2) || (pmap[index + EXT_INTERFACE_MUX_OFFSET] == SENSOR_CO2) || (pmap[index + EXT_INTERFACE_MUX_OFFSET] == SENSOR_GNSS)) | 1059 if(((pmap[index + EXT_INTERFACE_MUX_OFFSET] == SENSOR_DIGO2) |
| 1060 || (pmap[index + EXT_INTERFACE_MUX_OFFSET] == SENSOR_CO2) | |
| 1061 || (pmap[index + EXT_INTERFACE_MUX_OFFSET] == SENSOR_GNSS)) | |
| 1062 && (index != activeUartChannel)) | 1062 && (index != activeUartChannel)) |
| 1063 { | 1063 { |
| 1064 newChannel = index; | 1064 newChannel = index; |
| 1065 break; | 1065 break; |
| 1066 } | 1066 } |
| 1157 retryRequest = 0; | 1157 retryRequest = 0; |
| 1158 timeToTrigger = 1; | 1158 timeToTrigger = 1; |
| 1159 | 1159 |
| 1160 if((externalInterface_SensorState[activeSensorId] == UART_O2_REQ_O2) /* timeout */ | 1160 if((externalInterface_SensorState[activeSensorId] == UART_O2_REQ_O2) /* timeout */ |
| 1161 || (externalInterface_SensorState[activeSensorId] == UART_O2_REQ_RAW) | 1161 || (externalInterface_SensorState[activeSensorId] == UART_O2_REQ_RAW) |
| 1162 || (externalInterface_SensorState[activeSensorId] == UART_CO2_OPERATING)) | 1162 || (externalInterface_SensorState[activeSensorId] == UART_CO2_OPERATING) |
| 1163 || (externalInterface_SensorState[activeSensorId] == UART_GNSS_GET_PVT)) | |
| 1163 { | 1164 { |
| 1164 forceMuxChannel = 1; | 1165 forceMuxChannel = 1; |
| 1166 externalInterface_SensorState[activeSensorId] = UART_O2_IDLE; | |
| 1165 switch(pmap[activeSensorId]) | 1167 switch(pmap[activeSensorId]) |
| 1166 { | 1168 { |
| 1167 case SENSOR_DIGO2: setExternalInterfaceChannel(activeSensorId,0.0); | 1169 case SENSOR_DIGO2: setExternalInterfaceChannel(activeSensorId,0.0); |
| 1168 break; | 1170 break; |
| 1169 case SENSOR_CO2: externalInterface_SetCO2Value(0.0); | 1171 case SENSOR_CO2: externalInterface_SetCO2Value(0.0); |
