1
0
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:
James Snyder 2009-03-26 03:10:16 +00:00
parent da05fc6f2f
commit 5fc2961439
3 changed files with 9 additions and 8 deletions

View File

@ -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

View File

@ -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;

View File

@ -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;