코드정리
This commit is contained in:
@@ -152,7 +152,7 @@ const uint16_t *piezo_measure_single_buffer(void)
|
||||
*/
|
||||
int piezo_measure_start_session(void)
|
||||
{
|
||||
DBG_PRINTF("[MBB] piezo session start\r\n");
|
||||
DBG_PRINTF("[SWEEP] piezo session start\r\n");
|
||||
|
||||
int err = piezo_init();
|
||||
if (err)
|
||||
@@ -178,7 +178,7 @@ int piezo_measure_start_session(void)
|
||||
return ECHO_STATUS_ADC_INIT;
|
||||
}
|
||||
|
||||
DBG_PRINTF("[MBB] piezo session ready\r\n");
|
||||
DBG_PRINTF("[SWEEP] piezo session ready\r\n");
|
||||
return ECHO_STATUS_OK;
|
||||
}
|
||||
|
||||
@@ -191,7 +191,7 @@ int piezo_measure_sweep(void)
|
||||
const piezo_config_t *cfg = piezo_config_get();
|
||||
uint16_t capture_delay_us = cfg->delay_us;
|
||||
|
||||
/* 너무 짧은 delay가 들어오면 burst 직후 ADC capture가 겹치므로 최소 delay 보장 */
|
||||
// 너무 짧은 delay가 들어오면 burst 직후 ADC capture가 겹치므로 최소 delay 보장
|
||||
if (capture_delay_us < PIEZO_BURST_TO_ADC_DELAY_US)
|
||||
{
|
||||
capture_delay_us = PIEZO_BURST_TO_ADC_DELAY_US;
|
||||
@@ -199,12 +199,9 @@ int piezo_measure_sweep(void)
|
||||
|
||||
for (uint8_t ch = 0; ch < PIEZO_NUM_CHANNELS; ch++)
|
||||
{
|
||||
DBG_PRINTF("[MBB] sweep ch=%d start\r\n", ch);
|
||||
DBG_PRINTF("[SWEEP] ch=%d start\r\n", ch);
|
||||
|
||||
/*
|
||||
* MUX 채널 선택
|
||||
* 드라이버 내부에서 1.3 ms settle을 기다리고, 아래에서 measurement layer settle 0.5 ms를 추가로 기다린다.
|
||||
*/
|
||||
// MUX 채널 선택
|
||||
int err = piezo_select_channel(ch);
|
||||
if (err)
|
||||
{
|
||||
@@ -214,7 +211,7 @@ int piezo_measure_sweep(void)
|
||||
|
||||
k_busy_wait(PIEZO_POST_SELECT_SETTLE_US);
|
||||
|
||||
/* ADC dummy read/wake (채널 전환 직후 첫 ADC 접근을 실제 데이터에 섞지 않기 위한 준비 단계) */
|
||||
// ADC dummy read/wake 2byte (채널 전환 직후 첫 ADC 접근을 실제 데이터에 섞지 않기 위한 준비 단계)
|
||||
err = echo_adc_wake();
|
||||
if (err)
|
||||
{
|
||||
@@ -222,10 +219,7 @@ int piezo_measure_sweep(void)
|
||||
return ECHO_STATUS_CAPTURE;
|
||||
}
|
||||
|
||||
/*
|
||||
* Dummy burst + dummy capture
|
||||
* 결과는 버리고, piezo/mux/ADC 입력의 이전 상태가 real 평균에 섞이지 않도록 함
|
||||
*/
|
||||
// Dummy burst + dummy capture - 결과는 버리고, piezo/mux/ADC 입력의 이전 상태가 real 평균에 섞이지 않도록 함
|
||||
for (uint8_t dummy = 0; dummy < PIEZO_DUMMY_CAPTURE_COUNT; dummy++)
|
||||
{
|
||||
k_busy_wait(PIEZO_AVG_INTER_BURST_GAP_US);
|
||||
@@ -240,25 +234,25 @@ int piezo_measure_sweep(void)
|
||||
}
|
||||
}
|
||||
|
||||
/* 마지막 dummy capture와 첫 real capture 사이에도 같은 회복 시간을 둔다. */
|
||||
// 마지막 dummy capture와 첫 real capture 사이에도 같은 회복 시간
|
||||
k_busy_wait(PIEZO_AVG_INTER_BURST_GAP_US);
|
||||
|
||||
/* 여기부터 실제 평균에 들어갈 capture */
|
||||
// 여기부터 실제 평균에 들어갈 capture
|
||||
memset(echo_accum, 0, sizeof(echo_accum));
|
||||
|
||||
for (uint16_t avg = 0; avg < cfg->avg; avg++)
|
||||
{
|
||||
if (avg > 0U)
|
||||
{
|
||||
k_busy_wait(PIEZO_AVG_INTER_BURST_GAP_US);
|
||||
}
|
||||
k_busy_wait(PIEZO_AVG_INTER_BURST_GAP_US);
|
||||
|
||||
/* burst-to-capture 사이 타이밍 흔들림을 줄이기 위해 real capture 구간만 IRQ를 잠금 */
|
||||
// burst-to-capture 사이 타이밍 흔들림을 줄이기 위해 real capture 구간만 IRQ를 잠금
|
||||
unsigned int key = irq_lock();
|
||||
|
||||
// burst + delay + capture
|
||||
piezo_burst_sw((uint8_t)cfg->cycles);
|
||||
k_busy_wait(capture_delay_us);
|
||||
|
||||
err = echo_adc_capture(echo_capture, cfg->samples);
|
||||
|
||||
// IRQ 잠금 해제
|
||||
irq_unlock(key);
|
||||
if (err)
|
||||
{
|
||||
@@ -266,29 +260,30 @@ int piezo_measure_sweep(void)
|
||||
return ECHO_STATUS_CAPTURE;
|
||||
}
|
||||
|
||||
/* 같은 sample index끼리 누적 */
|
||||
// 같은 sample index끼리 누적
|
||||
for (uint16_t i = 0; i < cfg->samples; i++)
|
||||
{
|
||||
echo_accum[i] += echo_capture[i];
|
||||
}
|
||||
}
|
||||
|
||||
/* 채널별 최종 평균 파형 저장 - 이후 cmd handler가 reb: 패킷으로 전송 */
|
||||
// 채널별 최종 평균 파형 저장 - 이후 cmd handler가 reb: 패킷으로 전송
|
||||
for (uint16_t i = 0; i < cfg->samples; i++)
|
||||
{
|
||||
piezo_channels[ch][i] = (uint16_t)(echo_accum[i] / cfg->avg);
|
||||
}
|
||||
|
||||
DBG_PRINTF("[MBB] sweep ch=%d done\r\n", ch);
|
||||
DBG_PRINTF("[SWEEP] ch=%d done\r\n", ch);
|
||||
}
|
||||
|
||||
DBG_PRINTF("[MBB] sweep done\r\n");
|
||||
DBG_PRINTF("[SWEEP] done\r\n");
|
||||
return ECHO_STATUS_OK;
|
||||
}
|
||||
|
||||
/*
|
||||
* 테스트용
|
||||
* 단일 채널 burst + echo capture
|
||||
* mec? 디버그/테스트 명령에서 사용하며, 결과는 echo_capture에 평균 저장된다.
|
||||
* mec? 디버그/테스트 명령에서 사용하며, 결과는 echo_capture에 평균 저장
|
||||
*/
|
||||
int piezo_measure_single_capture(uint8_t cycles,
|
||||
uint16_t delay_us,
|
||||
@@ -306,7 +301,7 @@ int piezo_measure_single_capture(uint8_t cycles,
|
||||
return ECHO_STATUS_CAPTURE;
|
||||
}
|
||||
|
||||
/* averaging 0은 명령 파라미터 누락/미지정으로 보고 1회 capture로 보정한다. */
|
||||
/* averaging 0은 명령 파라미터 누락/미지정으로 보고 1회 capture로 보정 */
|
||||
if (averaging == 0U)
|
||||
{
|
||||
averaging = 1U;
|
||||
@@ -326,7 +321,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);
|
||||
@@ -340,7 +335,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));
|
||||
@@ -378,8 +373,9 @@ int piezo_measure_single_capture(uint8_t cycles,
|
||||
}
|
||||
|
||||
/*
|
||||
* 단일 채널 ADC-only capture.
|
||||
* piezo burst 없이 현재 echo ADC 입력만 평균해서 확인할 때 사용한다.
|
||||
* 테스트용
|
||||
* 단일 채널 ADC-only capture
|
||||
* piezo burst 없이 현재 echo ADC 입력만 평균해서 확인할 때 사용
|
||||
*/
|
||||
int piezo_measure_adc_only_capture(uint16_t num_samples,
|
||||
uint16_t averaging,
|
||||
@@ -423,7 +419,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