Форум myROBOT.ru » Шаг за шагом » Программирование микроконтроллеров » Ника не разобраться с прерыванием

Страниц (1): [1]
 

1. redcat - 24 Января, 2009 - 00:51:07 - перейти к сообщению
Уже третий день пытаюсь запустить функцию от прерывания по сигналу на USART
Все компиляторы ругаются, в ВинАвр синтаксис один, в CodeVisionAVR Синтаксис, другой... по книге вообще бред получается! нихрена не понимаю. Может кто прояснит!?

МС - Attiny2313
Компилятор - WinAvr
Язык - C

Накидайте плиз кусочек кода в котором по прерыванию (Приём на УСАРТ) функция N вызывается.... Замешательство
2. бот_м_16 - 24 Января, 2009 - 11:59:58 - перейти к сообщению
Запусти cvar в мастере кода сделай настройку потом ctrl+c ctrl+v и будет тебе счастье
ЗЫ
А ваабще иди читай курс avr123.nm.ru тебе нужно z5
3. redcat - 24 Января, 2009 - 12:51:24 - перейти к сообщению
Там он использует компилятов Codevision AVR, а это мне не подходит. Куча функций не работает в других компиляторах из-за того, что библиотеки этих функций есть только в CVAVR. Это не позволяет глубоко изучать С AVR.
Например в данном примере - interrupt [USART_RXC], другой кмпилятор будет ругаться на квадратные скобки.....

Короче я так понимаю без ассемблера тут не обойтись.
4. бот_м_16 - 25 Января, 2009 - 14:48:04 - перейти к сообщению
зачем асм? рёв в три ручья просто в скобки поставь номер вектора прирывания из дс
ЗЫ
А чем cvavr не угодил ?
5. redcat - 26 Января, 2009 - 12:44:32 - перейти к сообщению
Странно! номер не проходит, компилятор ругается.

Компилятор думае что обьявляю функцию interrupt(vector_nr){}...
6. redcat - 26 Января, 2009 - 18:48:20 - перейти к сообщению
ПОМОГИИТЕ!

Как Работать с прерыванием в WINAVR!!!
7. Белый Волк - 26 Января, 2009 - 19:45:39 - перейти к сообщению
В файле WinAVR\avr\include\avr\iotn2313.h есть:

#define SIG_INT0 _VECTOR(1) /* External Interrupt Request 0 */
#define SIG_INT1 _VECTOR(2) /* External Interrupt Request 1 */
#define SIG_TIMER1_CAPT _VECTOR(3) /* TIMER1 CAPT Timer/Counter1 Capture
Event */
#define SIG_TIMER1_COMPA _VECTOR(4) /* TIMER1 COMPA Timer/Counter1 Compare
Match A */
#define SIG_TIMER1_OVF _VECTOR(5) /* TIMER1 OVF Timer/Counter1 Overflow */
#define SIG_TIMER0_OVF _VECTOR(6) /* TIMER0 OVF Timer/Counter0 Overflow */
#define SIG_USART0_RX _VECTOR(7) /* USART0 RX USART0, Rx Complete */
#define SIG_USART0_UDRE _VECTOR(8) /* USART0 UDRE USART0 Data Register
Empty */
#define SIG_USART0_TX _VECTOR(9) /* USART0 TX USART0, Tx Complete */
#define SIG_ANALOG_COMP _VECTOR(10) /* ANALOG COMP Analog Comparator */
#define SIG_PCINT _VECTOR(11) /* Pin Change Interrupt on PORTB */
#define SIG_TIMER1_COMPB _VECTOR(12) /* Timer/Counter1 Compare Match B */
#define SIG_TIMER0_COMPA _VECTOR(13) /* Timer/Counter0 Compare Match A */
#define SIG_TIMER0_COMPB _VECTOR(14) /* Timer/Counter0 Compare Match B */
#define SIG_USI_START _VECTOR(15) /* USI Start Condition */
#define SIG_USI_OVERFLOW _VECTOR(16) /* USI Overflow */
#define SIG_EE_READY _VECTOR(17) /* EEPROM Ready */
#define SIG_WDT_OVERFLOW _VECTOR(18) /* Watchdog Timer Overflow */

Точно работают конструкци вида:
int __vector_3() //прерывание по совпадению таймера с OCR2
{
PORTD |= 1; //Установить младший бит порта D
sei(); //Глобальное разрешение прерываний
return(0);
}
8. redcat - 27 Января, 2009 - 09:35:29 - перейти к сообщению
ISR(vector)
{
;
}

ВОТ!
Функция interrupt в новой версии отсутствует!