AT90S и WinAVR

добрый вечер

Почемуто не вызывается прерывание. Проверял на живом МК и на VMLAB подскажите плиз.

=== CUT === #include <avr/io.h>

#include <avr/io2313.h>

#include <avr/interrupt.h>

#include <avr/signal.h>

void ioinit() { DDRB = 0xff; // Установим порт 'B' на выход (11111111b если 1 то соотв. нога на выход 0 вход) PORTB == 0xff; }

void interrupt_init() { TCCR0 = 0x05; // устанавливаем делитель частоты кварца на 1024

timer_enable_int(_BV (TOIE0)); // разрешить прерывание от таймера 0 (функция _BV() переводит бит в число). sei(); // разрешить прерывания }

// Функция прерывания таймера 0 вызывается при достижении TCCR0 == 256 и сбрасывается на 0 // т.е. начинается отсчет сначала SIGNAL(SIG_OVERFLOW0) { //TCCR0 = 100; // переопределим с какого числа считать таймеру. //~~~~~???????????????????

switch (PORTB) { case 0x00: {PORTB == 0xff;break;} case 0xff: {PORTB == 0x00;break;} }

}

int main (void) { ioinit (); interrupt_init();

while (1) { }

return (0); } === CUT ===

...

formatting link

Reply to
Sasha Leshinsky
Loading thread data ...

Привет Sasha!

25 May 05 00:00, Sasha Leshinsky писал ALL:

SL> Почемуто не вызывается прерывание. Проверял на живом МК и на VMLAB SL> подскажите плиз.

SL> === CUT === SL> === CUT ===

Убедись, что взведен нужный бит в регистре TIMSK (просто установить флаг i недостаточно).

Всего наилучшего, [Team PCAD 2000] Алексей М. ... О сколько нам открытий чудных готовит открывашки крюк!

Reply to
Alex Mogilnikov

Hello, Sasha!

Среда Май 25 2005 00:00, Sasha Leshinsky wrote to ALL: SL> Почемуто не вызывается прерывание. Проверял на живом МК и на VMLAB SL> подскажите плиз. SL> === CUT === SL> #include <avr/io.h>

SL> #include <avr/io2313.h>

^^^^^^^^^^^^^^ компиялтор ругается SL> #include <avr/interrupt.h>

SL> #include <avr/signal.h>

SL> case 0x00: {PORTB == 0xff;break;} ^^ не ошибся ли здесь?

Только что проверил. WinAvr от сентября 2003, vmlab 3.10. Все работает.

Best regards и все такое... Sergey. [Death/Black/Power Metal]

Reply to
Sergey Shopin

добрый вечер

■ Message posted by Alex Mogilnikov to Sasha Leshinsky ■ Subject: AT90S и WinAVR

AM> Убедись, что взведен нужный бит в регистре TIMSK (просто AM> установить флаг i недостаточно). Я написал в исходнике:

timer_enable_int(_BV (TOIE0));

Читаю доку:

=== CUT === Function Documentation

__inline__ void timer_enable_int ( unsigned char ints ) [static]

#include <avr/interrupt.h>

This function modifies the timsk register. The value you pass via ints is device specific. === CUT ===

И не работает почему-то :(

...

formatting link

Reply to
Sasha Leshinsky

Hello Sasha.

24 May 05 23:00, you wrote to all:

SL> void interrupt_init() SL> { SL> TCCR0 = 0x05; // устанавливаем делитель частоты кварца на 1024

SL> timer_enable_int(_BV (TOIE0)); // разрешить прерывание от таймера 0

Запиши в TIMSK вручную.

TIMSK = BV(TOIE0);

SL> SIGNAL(SIG_OVERFLOW0) SL> { SL> //TCCR0 = 100; // переопределим с какого числа считать таймеру. SL> //~~~~~???????????????????

Ты не попутал TCCR0 и TCNT0 ?

SL> switch (PORTB) SL> { SL> case 0x00: {PORTB == 0xff;break;} SL> case 0xff: {PORTB == 0x00;break;} SL> }

Это заменяется на PORTB ^= 0xFF;

Alexey

Reply to
Alexey Boyko

Привет Sasha!

26 May 05 23:37, Sasha Leshinsky писал Alex Mogilnikov:

AM>> Убедись, что взведен нужный бит в регистре TIMSK (просто AM>> установить флаг i недостаточно).

SL> Читаю доку:

SL> === CUT === SL> This function modifies the timsk register. The value you pass via ints SL> is device specific. SL> === CUT ===

SL> И не работает почему-то :(

Я написал не "убедись, что в доке написано, что бит взводится", а "убедись, что бит взведен". :) Ты никогда не сталкивался с ситуацией, когда в доке - одно, и на самом деле - другое? :)

Прерывание должно происходить при трех одновременно выполняющихся условиях:

- таймер включен;

- разрешено прерывание по его переполнению в TIMSK;

- установлен флаг I.

Кажется так. Если у тебя прерывания не происходит, значит одно из этих условий не выполняется. Из приведенного тобой кода наиболее вероятным мне показалось второе.

Всего наилучшего, [Team PCAD 2000] Алексей М. ... Западно-уральское региональное общество добровольных учредителей.

Reply to
Alex Mogilnikov

∙-─÷ Answer on message from BADMAIL ÷─--∙

добрый вечер

■ Message posted by Sergey Shopin to Sasha Leshinsky ■ Subject: AT90S и WinAVR

SL>> Почемуто не вызывается прерывание. Проверял на живом МК и на SL>> VMLAB подскажите плиз. SL>> === CUT === SL>> #include <avr/io.h>

SL>> #include <avr/io2313.h>

SS> ^^^^^^^^^^^^^^ компиялтор ругается

У меня не ругнулся WinAvr за февраль сего года.

SL>> #include <avr/interrupt.h>

SL>> #include <avr/signal.h>

SL>> case 0x00: {PORTB == 0xff;break;} SS> ^^ не ошибся ли здесь?

Спасибо. И как так по-пионерски я ошибся-то блин :(

SS> Только что проверил. WinAvr от сентября 2003, vmlab 3.10. Все SS> работает.

...

formatting link

Reply to
Sasha Leshinsky

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.