Skip to content

Commit cd7894e

Browse files
committed
machine: esp32c6 adc - updated Get() according to ESP-IDF
1 parent 266a5d5 commit cd7894e

1 file changed

Lines changed: 17 additions & 2 deletions

File tree

src/machine/machine_esp32c6_adc.go

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,17 +78,32 @@ func (a ADC) Get() uint16 {
7878
if a.Pin > 6 {
7979
return 0
8080
}
81-
esp.APB_SARADC.SetONETIME_SAMPLE_SARADC_ONETIME_ATTEN(atten11dB)
81+
82+
// Clear stale DONE
8283
esp.APB_SARADC.SetINT_CLR_APB_SARADC1_DONE_INT_CLR(1)
83-
esp.APB_SARADC.SetONETIME_SAMPLE_SARADC_ONETIME_START(0)
84+
85+
// Disable oneshot conversion trigger for all the ADC units
86+
esp.APB_SARADC.SetONETIME_SAMPLE_SARADC1_ONETIME_SAMPLE(0)
87+
esp.APB_SARADC.SetONETIME_SAMPLE_SARADC2_ONETIME_SAMPLE(0)
88+
8489
esp.APB_SARADC.SetONETIME_SAMPLE_SARADC_ONETIME_CHANNEL(uint32(a.Pin))
90+
esp.APB_SARADC.SetONETIME_SAMPLE_SARADC_ONETIME_ATTEN(atten11dB)
91+
92+
// Select ADC1 one-time mode
8593
esp.APB_SARADC.SetONETIME_SAMPLE_SARADC1_ONETIME_SAMPLE(1)
94+
95+
// Trigger one-time conversion
96+
esp.APB_SARADC.SetONETIME_SAMPLE_SARADC_ONETIME_START(0)
97+
// No delay needed here because adc_ctrl_clk is fast (>= APB_CLK_FREQ/8).
98+
// ESP-IDF evaluates this condition and calls esp_rom_delay_us(0).
8699
esp.APB_SARADC.SetONETIME_SAMPLE_SARADC_ONETIME_START(1)
100+
87101
for esp.APB_SARADC.GetINT_RAW_APB_SARADC1_DONE_INT_RAW() == 0 {
88102
}
89103
raw := esp.APB_SARADC.GetSAR1DATA_STATUS_APB_SARADC1_DATA()
90104
esp.APB_SARADC.SetONETIME_SAMPLE_SARADC_ONETIME_START(0)
91105
esp.APB_SARADC.SetONETIME_SAMPLE_SARADC1_ONETIME_SAMPLE(0)
106+
92107
return uint16(raw&0xfff) << 4
93108
}
94109

0 commit comments

Comments
 (0)