File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff 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
You can’t perform that action at this time.
0 commit comments