mirror of
https://github.com/elua/elua.git
synced 2025-01-25 01:02:54 +08:00
A few fixes for system buffer-free ADC.
Also, single sample requests should be a bit faster when buffering is enabled.
This commit is contained in:
parent
da05fc6f2f
commit
5fc2961439
@ -43,6 +43,7 @@ void adc_update_dev_sequence( unsigned dev_id )
|
||||
s = adc_get_ch_state( id );
|
||||
d->ch_state[ d->seq_ctr ] = s;
|
||||
s->value_ptr = &( d->sample_buf[ d->seq_ctr ] );
|
||||
s->value_fresh = 0;
|
||||
d->seq_ctr++;
|
||||
}
|
||||
}
|
||||
@ -191,13 +192,13 @@ void adc_smooth_data( unsigned id )
|
||||
|
||||
// Replace Oldest Value in Buffer
|
||||
#if defined( BUF_ENABLE_ADC )
|
||||
if ( s->smooth_ready == 1 )
|
||||
buf_read( BUF_ID_ADC, id, ( t_buf_data* )&sample );
|
||||
else
|
||||
if ( s->value_fresh == 1 )
|
||||
{
|
||||
sample = *( s->value_ptr );
|
||||
s->value_fresh = 0;
|
||||
}
|
||||
else
|
||||
buf_read( BUF_ID_ADC, id, ( t_buf_data* )&sample );
|
||||
#else
|
||||
sample = *( s->value_ptr );
|
||||
s->value_fresh = 0;
|
||||
@ -243,9 +244,9 @@ u16 adc_get_processed_sample( unsigned id )
|
||||
else if ( s->logsmoothlen == 0 )
|
||||
{
|
||||
#if defined( BUF_ENABLE_ADC )
|
||||
if( adc_samples_available( id ) == 1 )
|
||||
if( s->value_fresh == 1 )
|
||||
{
|
||||
sample = *( s->value_ptr ); // Don't hit buffer if only one sample is available
|
||||
sample = *( s->value_ptr );
|
||||
s->value_fresh = 0;
|
||||
}
|
||||
else
|
||||
@ -303,7 +304,6 @@ void adc_wait_samples( unsigned id, unsigned samples )
|
||||
|
||||
if( adc_samples_available( id ) < samples && s->blocking == 1 )
|
||||
while( s->op_pending == 1 && adc_samples_available( id ) < samples );
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
@ -559,8 +559,9 @@ void ADCIntHandler( void )
|
||||
// Fill in smoothing buffer until warmed up
|
||||
if ( s->logsmoothlen > 0 && s->smooth_ready == 0)
|
||||
adc_smooth_data( s->id );
|
||||
|
||||
#if defined( BUF_ENABLE_ADC )
|
||||
else
|
||||
else if ( s->reqsamples > 1 )
|
||||
{
|
||||
buf_write( BUF_ID_ADC, s->id, ( t_buf_data* )s->value_ptr );
|
||||
s->value_fresh = 0;
|
||||
|
@ -654,7 +654,7 @@ void DMA1_Channel1_IRQHandler(void)
|
||||
if ( s->logsmoothlen > 0 && s->smooth_ready == 0)
|
||||
adc_smooth_data( s->id );
|
||||
#if defined( BUF_ENABLE_ADC )
|
||||
else
|
||||
else if ( s->reqsamples > 1 )
|
||||
{
|
||||
buf_write( BUF_ID_ADC, s->id, ( t_buf_data* )s->value_ptr );
|
||||
s->value_fresh = 0;
|
||||
|
Loading…
x
Reference in New Issue
Block a user