- adaptions to PCB Hend-Control, Rev.0
git-svn-id: http://moon:8086/svn/projects/HendiControl@152 fda53097-d464-4ada-af97-ba876c37ca34
This commit is contained in:
@@ -11,48 +11,58 @@
|
||||
#include "adc.h"
|
||||
#include "message.h"
|
||||
|
||||
static volatile int16_t adc_value[16];
|
||||
static volatile size_t adc_ch = 0;
|
||||
static volatile uint8_t adc_ch = 0;
|
||||
static Fifo *g_pFifo = NULL;
|
||||
static Fifo g_conversionFifo;
|
||||
static int conversionBusy = 0;
|
||||
|
||||
ISR(ADC_vect)
|
||||
{
|
||||
conversionBusy = 0;
|
||||
int16_t value_low = (int16_t)ADCL;
|
||||
int16_t value_high = (int16_t)ADCH;
|
||||
ADCSRA |= (1<<ADIF);
|
||||
int16_t value = value_high << 8 | value_low;
|
||||
adc_value[adc_ch] = value;
|
||||
|
||||
Msg_t msg = {AdcComplete, adc_getChannel()};
|
||||
Msg_t msg =
|
||||
{
|
||||
.code = AdcComplete,
|
||||
.m.adc.ch = adc_ch,
|
||||
.m.adc.data = value,
|
||||
};
|
||||
fifo_push(g_pFifo, &msg);
|
||||
if (!fifo_isEmpty(&g_conversionFifo))
|
||||
{
|
||||
uint8_t ch;
|
||||
fifo_pop(&g_conversionFifo, &ch);
|
||||
adc_start_conversion(ch);
|
||||
}
|
||||
}
|
||||
|
||||
void adc_init(Fifo *pFifo)
|
||||
{
|
||||
g_pFifo = pFifo;
|
||||
fifo_init(&g_conversionFifo, 16, sizeof(uint8_t), "ConvFifo");
|
||||
PRR &= ~(1 << PRADC);
|
||||
ADCSRA |= (1 << ADEN) | 7;
|
||||
}
|
||||
|
||||
void adc_start_conversion(size_t ch)
|
||||
void adc_start_conversion(uint8_t ch)
|
||||
{
|
||||
ADMUX = (ADMUX & 0xF0) | (ch & 0x0F) | (1 << REFS0);
|
||||
ADCSRA |= (1 << ADSC) | (1 << ADIE);
|
||||
adc_ch = ch & 0x0F;
|
||||
conversionBusy = 1;
|
||||
}
|
||||
|
||||
int adc_is_fininshed()
|
||||
void adc_enqueue_conversion(uint8_t ch)
|
||||
{
|
||||
return (int)(0 == (ADCSRA & (1 << ADSC)));
|
||||
if (!conversionBusy)
|
||||
{
|
||||
adc_start_conversion(ch);
|
||||
}
|
||||
else
|
||||
{
|
||||
fifo_push(&g_conversionFifo, &ch);
|
||||
}
|
||||
}
|
||||
|
||||
size_t adc_getChannel()
|
||||
{
|
||||
return adc_ch;
|
||||
}
|
||||
|
||||
int16_t adc_getData()
|
||||
{
|
||||
return adc_value[adc_ch];
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user