777777 0 4 ноября, 2009 Опубликовано 4 ноября, 2009 · Жалоба если в момент обнуления TIMSK (в момент исполнения этой команды или за одну команду до неё) начнёт обрабатываться запрос на прерывание по таймеру то он будет обработан Вы для начала расскажите, чего вы хотите добиться в самом общем виде, а то непонятно зачем обнулять TIMSK да еще при этом делать общий запрет прерываний. Почему вы боитесь, что прерывание может выполниться сразу после обнуления TIMSK, но не боитесь, что оно выполнится за несколько команд до него. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bekas 0 25 ноября, 2009 Опубликовано 25 ноября, 2009 (изменено) · Жалоба Товарищи специалисты, у меня тоже есть вопрос относительно прерываний. Хочу предупредить я в этом деле ещё чайник. Есть ATiny2313 и нужно организовать прерывание по совпадению таймера Т1, загружаю в регистры следующее: TIMSK - 01000000 (Разрешить прерывания по совпадению канала А таймера Т1) TCCR1B - 00001010 (Сброс таймера при совпадении, частота таймера 1/8 тактовой) OCR1AL и OCR1AН некоторые числа Провожу отладку симулятором AVR Studio, при совпадении значения таймера TCNT1 и OCR1A появляется флаг TIFR, сбрасывается значение TCNT1, но прерывание не происходит, можете мне сказать что я забыл сделать??? Изменено 25 ноября, 2009 пользователем bekas Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
NullPointer 0 25 ноября, 2009 Опубликовано 25 ноября, 2009 · Жалоба ...можете мне сказать что я забыл сделать???Разрешить прерывания глобально. Флаг I в SREG. Команды SEI, CLI. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Duhas 0 25 ноября, 2009 Опубликовано 25 ноября, 2009 · Жалоба мб разрешить прерывания глобально? SEI... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bekas 0 25 ноября, 2009 Опубликовано 25 ноября, 2009 · Жалоба не помогает, следующеедействие после команды SEI это переход по адресу $001 при этом даже флаг TIFR не успевает установиться Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ILYAUL 0 25 ноября, 2009 Опубликовано 25 ноября, 2009 · Жалоба не помогает, следующеедействие после команды SEI это переход по адресу $001 при этом даже флаг TIFR не успевает установиться Вам эта таблица знакома? Там команда типа RJMP существует ? Table 21. Reset and Interrupt Vectors Vector No. Program Address Source Interrupt Definition 1 0x0000 RESET External Pin, Power-on Reset, Brown-out Reset, and Watchdog Reset 2 0x0001 INT0 External Interrupt Request 0 3 0x0002 INT1 External Interrupt Request 1 4 0x0003 TIMER1 CAPT Timer/Counter1 Capture Event 5 0x0004 TIMER1 COMPA Timer/Counter1 Compare Match A 6 0x0005 TIMER1 OVF Timer/Counter1 Overflow 7 0x0006 TIMER0 OVF Timer/Counter0 Overflow 8 0x0007 USART0, RX USART0, Rx Complete 9 0x0008 USART0, UDRE USART0 Data Register Empty 10 0x0009 USART0, TX USART0, Tx Complete 11 0x000A ANALOG COMP Analog Comparator 12 0x000B PCINT Pin Change Interrupt 13 0x000C TIMER1 COMPB Timer/Counter1 Compare Match B 14 0x000D TIMER0 COMPA Timer/Counter0 Compare Match A 15 0x000E TIMER0 COMPB Timer/Counter0 Compare Match B 16 0x000F USI START USI Start Condition 17 0x0010 USI OVERFLOW USI Overflow 18 0x0011 EE READY EEPROM Ready 19 0x0012 WDT OVERFLOW Watchdog Timer Overflow Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
smac 0 25 ноября, 2009 Опубликовано 25 ноября, 2009 · Жалоба не помогает, следующеедействие после команды SEI это переход по адресу $001 при этом даже флаг TIFR не успевает установиться Дык это похоже у вас еще и прерывания по фронту или спаду int0 включены, и событие по которому происходит прерывание уже произошло. Естественно флаг прерывания защелкнулся, поэтому как только Вы глобально разрешили прерывания происходит переход на обработчик. Наверное лучше бы Вам код выложить, может и подскажут что дельное. Вот пока писал Вам уже предыдущий оратор правильную дорогу (к таблице векторов прерываний) показал. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ILYAUL 0 25 ноября, 2009 Опубликовано 25 ноября, 2009 · Жалоба Вот пока писал Вам уже предыдущий оратор правильную дорогу (к таблице векторов прерываний) показал. Это не главное , главное научиться ей пользоваться Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bekas 0 25 ноября, 2009 Опубликовано 25 ноября, 2009 (изменено) · Жалоба Да, были разрешены внешние прерывания, по умолчанию на низкий уровень входа INT0 и при наладке я этот вход не использовал-отсюда скачёк по адресу $001. Теперь вроде работает. Спасибо всем. Изменено 25 ноября, 2009 пользователем bekas Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bekas 0 11 декабря, 2009 Опубликовано 11 декабря, 2009 · Жалоба Появился ещё один вопрос: после обработки прерывания насколько мне кажется прогграмма должна продолжить выполняться с места вызова прерывания, а у меня она почемуто снова вызывает прерывание и выполняет его циклически. Как с этим бороться?? Для наглядности ниже текст программы: ; Начало программы rjmp Init ;$000 Первая выполняемая комманда reti reti reti rjmp Time ;====================================== Time: inc Book nop nop nop cli reti; ;====================================== Init: ldi temp, 0b01000000 out TIMSK, temp ldi temp, 0b00001010 ; out TCCR1B,temp out OCR1AL, temp ldi Book,0 ; задаём начальное ;==================================================================== Begine: SEI nop nop nop CLI rjmp Begine Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
defunct 0 11 декабря, 2009 Опубликовано 11 декабря, 2009 · Жалоба Для наглядности ниже текст программы: По тексту программы - для наглядности надо бы: 1. указать МК, для которого пишется программа .include "tn2313def.inc" 2. вместо веселых нечитаемых констант 0b0100000, пользовать осмысленные имена битов (1 << OCIE1A) чтобы было видно какие биты включаются. 3. поудалять бездумно натыканные команды CLI. 4. описать всю таблицу прерываний как в даташите. 5. вынести SEI за переделы основного цикла. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться