CODE
#include <stdint.h>
#include <avr/io.h>
#include <avr/interrupt.h>
//#include "PortDefine.h"
#include "avrlibdefs.h"
#include "avrlibtypes.h"
//#define USE_INT0
union {
uint16_t ADC_Data;
uint8_t ADC_Bute[2];
} Data;
#ifdef USE_INT0
ISR (INT0_vect)
{
ADCSRA |= (1 << ADSC);
}
#endif // USE_INT0
ISR (ADC_vect)
{
PORTD |= 1;
Data.ADC_Data = (unsigned short)inb(ADCL) | (unsigned short)(inb(ADCH) << 8);
PORTD &=~ 1;
}
int main( void )
{
// ADC
ADMUX |= (1 << REFS0) | (1 << MUX0) | (1 << MUX2); // ADC5, AVCC
ADCSRA |= (1 << ADEN) | (1 << ADATE) | (1 << ADIE);
ADCSRB |= (1 << ADTS1);
DDRC = 0;
PORTC = 0;
#ifdef USE_INT0
EICRA |= (1 << ISC01) | (1 << ISC00);
EIMSK |= (1 << INT0);
#endif // USE_INT0
DDRD = 0x03;
PORTD = 4;
sei();
ADCSRA |= (1 << ADSC);
while (1)
{
PORTD ^= 2;
}
return 0;
}
#include <avr/io.h>
#include <avr/interrupt.h>
//#include "PortDefine.h"
#include "avrlibdefs.h"
#include "avrlibtypes.h"
//#define USE_INT0
union {
uint16_t ADC_Data;
uint8_t ADC_Bute[2];
} Data;
#ifdef USE_INT0
ISR (INT0_vect)
{
ADCSRA |= (1 << ADSC);
}
#endif // USE_INT0
ISR (ADC_vect)
{
PORTD |= 1;
Data.ADC_Data = (unsigned short)inb(ADCL) | (unsigned short)(inb(ADCH) << 8);
PORTD &=~ 1;
}
int main( void )
{
// ADC
ADMUX |= (1 << REFS0) | (1 << MUX0) | (1 << MUX2); // ADC5, AVCC
ADCSRA |= (1 << ADEN) | (1 << ADATE) | (1 << ADIE);
ADCSRB |= (1 << ADTS1);
DDRC = 0;
PORTC = 0;
#ifdef USE_INT0
EICRA |= (1 << ISC01) | (1 << ISC00);
EIMSK |= (1 << INT0);
#endif // USE_INT0
DDRD = 0x03;
PORTD = 4;
sei();
ADCSRA |= (1 << ADSC);
while (1)
{
PORTD ^= 2;
}
return 0;
}
По идеи он должен запускать оцифровку по внешнему сигналу, но этого не происходит.
Если я открываю строку //#define USE_INT0 всё работает правильно, но при этом теряется время.
Строку инициализации EICRA убирал из под ифа, не помогает.
Может я чего в инициализации упускаю.