Initial Commit
This commit is contained in:
@@ -23,13 +23,10 @@
|
||||
#define PIEZO_CFG_SAMPLES_MAX 117
|
||||
#define PIEZO_CFG_DELAY_MAX_US 50
|
||||
|
||||
/*
|
||||
* piezo_select_channel() 안에서 MUX settle 1.3 ms를 이미 기다린 뒤,
|
||||
* measurement layer에서 analog path/ADC 입력 안정화를 위해 0.5 ms를 한 번 더 기다린다.
|
||||
*/
|
||||
/* piezo_select_channel() 안에서 MUX settle 1.3 ms를 이미 기다린 뒤 analog path/ADC 입력 안정화를 위해 0.5 ms를 한 번 더 기다림 */
|
||||
#define PIEZO_POST_SELECT_SETTLE_US 500
|
||||
|
||||
/* 평균/dummy burst 사이의 회복 시간 */
|
||||
/* burst 사이의 회복 시간 */
|
||||
#define PIEZO_AVG_INTER_BURST_GAP_US 650
|
||||
|
||||
/* real capture 전에 같은 채널에서 버스트+ADC capture를 버리는 횟수(dummy) */
|
||||
@@ -83,8 +80,7 @@ bool piezo_config_validate(const piezo_config_t *cfg)
|
||||
return false;
|
||||
}
|
||||
|
||||
if ((cfg->samples < PIEZO_CFG_SAMPLES_MIN) ||
|
||||
(cfg->samples > PIEZO_CFG_SAMPLES_MAX))
|
||||
if ((cfg->samples < PIEZO_CFG_SAMPLES_MIN) || (cfg->samples > PIEZO_CFG_SAMPLES_MAX))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
@@ -219,24 +215,20 @@ int piezo_measure_sweep(void)
|
||||
return ECHO_STATUS_CAPTURE;
|
||||
}
|
||||
|
||||
// Dummy burst + dummy capture - 결과는 버리고, piezo/mux/ADC 입력의 이전 상태가 real 평균에 섞이지 않도록 함
|
||||
for (uint8_t dummy = 0; dummy < PIEZO_DUMMY_CAPTURE_COUNT; dummy++)
|
||||
if (ch == 0U) // 채널 0 시작 전에만 dummy burst 수행 TESTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT
|
||||
{
|
||||
k_busy_wait(PIEZO_AVG_INTER_BURST_GAP_US);
|
||||
piezo_burst_sw((uint8_t)cfg->cycles);
|
||||
k_busy_wait(capture_delay_us);
|
||||
|
||||
err = echo_adc_capture(echo_capture, cfg->samples);
|
||||
if (err)
|
||||
// Dummy burst - ADC caputre는 수행하지 않음
|
||||
for (uint8_t dummy = 0; dummy < PIEZO_DUMMY_CAPTURE_COUNT; dummy++)
|
||||
{
|
||||
DBG_PRINTF("[ECHO] dummy capture fail ch=%d dummy=%d err=%d\r\n", ch, dummy, err);
|
||||
return ECHO_STATUS_CAPTURE;
|
||||
k_busy_wait(PIEZO_AVG_INTER_BURST_GAP_US);
|
||||
piezo_burst_sw((uint8_t)cfg->cycles);
|
||||
k_busy_wait(capture_delay_us);
|
||||
}
|
||||
|
||||
// 마지막 dummy capture와 첫 real capture 사이에도 같은 회복 시간
|
||||
k_busy_wait(PIEZO_AVG_INTER_BURST_GAP_US + 3000);
|
||||
}
|
||||
|
||||
// 마지막 dummy capture와 첫 real capture 사이에도 같은 회복 시간
|
||||
k_busy_wait(PIEZO_AVG_INTER_BURST_GAP_US);
|
||||
|
||||
|
||||
// 여기부터 실제 평균에 들어갈 capture
|
||||
memset(echo_accum, 0, sizeof(echo_accum));
|
||||
|
||||
@@ -285,11 +277,7 @@ int piezo_measure_sweep(void)
|
||||
* 단일 채널 burst + echo capture
|
||||
* mec? 디버그/테스트 명령에서 사용하며, 결과는 echo_capture에 평균 저장
|
||||
*/
|
||||
int piezo_measure_single_capture(uint8_t cycles,
|
||||
uint16_t delay_us,
|
||||
uint16_t num_samples,
|
||||
uint16_t averaging,
|
||||
uint8_t channel)
|
||||
int piezo_measure_single_capture(uint8_t cycles, uint16_t delay_us, uint16_t num_samples, uint16_t averaging, uint8_t channel)
|
||||
{
|
||||
if (channel >= PIEZO_NUM_CHANNELS)
|
||||
{
|
||||
@@ -321,7 +309,7 @@ int piezo_measure_single_capture(uint8_t cycles,
|
||||
return ECHO_STATUS_CAPTURE;
|
||||
}
|
||||
|
||||
/* real capture 전에 같은 채널에서 dummy burst/capture를 수행하고 버림 */
|
||||
// real capture 전에 같은 채널에서 dummy burst/capture를 수행하고 버림
|
||||
for (uint8_t dummy = 0; dummy < PIEZO_DUMMY_CAPTURE_COUNT; dummy++)
|
||||
{
|
||||
k_busy_wait(PIEZO_AVG_INTER_BURST_GAP_US);
|
||||
@@ -335,7 +323,7 @@ int piezo_measure_single_capture(uint8_t cycles,
|
||||
}
|
||||
}
|
||||
|
||||
/* 마지막 dummy capture와 첫 real capture 사이에도 같은 회복 시간 */
|
||||
// 마지막 dummy capture와 첫 real capture 사이에도 같은 회복 시간
|
||||
k_busy_wait(PIEZO_AVG_INTER_BURST_GAP_US);
|
||||
|
||||
memset(echo_accum, 0, sizeof(echo_accum));
|
||||
@@ -377,9 +365,7 @@ int piezo_measure_single_capture(uint8_t cycles,
|
||||
* 단일 채널 ADC-only capture
|
||||
* piezo burst 없이 현재 echo ADC 입력만 평균해서 확인할 때 사용
|
||||
*/
|
||||
int piezo_measure_adc_only_capture(uint16_t num_samples,
|
||||
uint16_t averaging,
|
||||
uint8_t channel)
|
||||
int piezo_measure_adc_only_capture(uint16_t num_samples, uint16_t averaging, uint8_t channel)
|
||||
{
|
||||
if (channel >= PIEZO_NUM_CHANNELS)
|
||||
{
|
||||
@@ -419,7 +405,7 @@ int piezo_measure_adc_only_capture(uint16_t num_samples,
|
||||
k_busy_wait(PIEZO_AVG_INTER_BURST_GAP_US);
|
||||
}
|
||||
|
||||
/* burst가 없으므로 ADC capture 자체의 간섭만 줄이기 위해 짧게 IRQ를 잠금 */
|
||||
// burst가 없으므로 ADC capture 자체의 간섭만 줄이기 위해 짧게 IRQ를 잠금
|
||||
unsigned int key = irq_lock();
|
||||
err = echo_adc_capture(echo_capture, num_samples);
|
||||
irq_unlock(key);
|
||||
|
||||
Reference in New Issue
Block a user