/* measure and return the microseconds */ uint16_t US_Measure_us(void) { int timeout; FRTOS1_xSemaphoreTake(mutexHandle, portMAX_DELAY); usDevice.signalState = US_SIGNAL_OK; /* default state */ /* send 10us pulse on TRIG line. */ TRIG_SetVal(usDevice.trigDevice); WAIT1_Waitus(10); usDevice.state = ECHO_TRIGGERED; TU_US_Enable(usDevice.echoDevice); TRIG_ClrVal(usDevice.trigDevice); timeout = 30; /* timout in ms */ while(usDevice.state!=ECHO_FINISHED) { /* measure echo pulse */ if (usDevice.state==ECHO_OVERFLOW) { /* measurement took too long? */ usDevice.signalState = US_SIGNAL_NO_ECHO; break; /* no echo, error case */ } WAIT1_WaitOSms(1); timeout--; if (timeout==0) { usDevice.signalState = US_SIGNAL_TIMEOUT; break; } } /* while */ if (usDevice.state==ECHO_FINISHED) { usDevice.lastValue_us = (usDevice.capture*1000UL)/(TU_US_CNT_INP_FREQ_U_0/1000); usDevice.signalState = US_SIGNAL_OK; } else { usDevice.lastValue_us = 0; /* error case */ } usDevice.state = ECHO_IDLE; FRTOS1_xSemaphoreGive(mutexHandle); return usDevice.lastValue_us; }
/* measure and return the microseconds */ uint16_t US_Measure_us(void) { int timeout; FRTOS1_xSemaphoreTake(mutexHandle, portMAX_DELAY); /* send 10us pulse on TRIG line. */ TRIG_SetVal(usDevice.trigDevice); WAIT1_Waitus(10); usDevice.state = ECHO_TRIGGERED; TRIG_ClrVal(usDevice.trigDevice); timeout = 30; while(usDevice.state!=ECHO_FINISHED && timeout>0) { /* measure echo pulse */ if (usDevice.state==ECHO_OVERFLOW) { /* measurement took too long? */ usDevice.state = ECHO_IDLE; /* go back to idle */ break; /* no echo, error case */ } WAIT1_WaitOSms(1); timeout--; } /* while */ if (usDevice.state==ECHO_FINISHED) { usDevice.lastValue_us = (usDevice.capture*1000UL)/(TU_US_CNT_INP_FREQ_U_0/1000); } else { usDevice.lastValue_us = 0; /* error case */ } usDevice.state = ECHO_IDLE; FRTOS1_xSemaphoreGive(mutexHandle); return usDevice.lastValue_us; }
/* measure and return the microseconds */ uint16_t US_Measure_us(void) { /* send 10us pulse on TRIG line. */ TRIG_SetVal(usDevice.trigDevice); WAIT1_Waitus(10); usDevice.state = ECHO_TRIGGERED; TRIG_ClrVal(usDevice.trigDevice); while(usDevice.state!=ECHO_FINISHED) { /* measure echo pulse */ if (usDevice.state==ECHO_OVERFLOW) { /* measurement took too long? */ usDevice.state = ECHO_IDLE; /* go back to idle */ return 0; /* no echo, error case */ } } usDevice.lastValue_us = (usDevice.capture*1000UL)/(TU_US_CNT_INP_FREQ_U_0/1000); return usDevice.lastValue_us; }