Интересная мысль пришла по поводу того, как разрулить конфликт прерываний!
А что, если мы в обработчике неглавного прерывании (в данном случае в прерывании таймера1) разрешим прерывания?
То есть в нормальной ситуации прерывания обрабатываются так - при возникновении определённого события выставляется соответствующий флаг в регистре прерываний, и контроллер обрабатывает эти флаги по очереди, в зависимости от приоритета.
Когда начинается обработка прерывания, все остальные прерывания запрещаются, и пока обработчик не выполнит свою работу, другие обработчики не запустятся.
И вот возникает ситуация - прерывание таймера1 работает, а пора уже формировать новый импульс на ИК-диоде, но этого не происходит, так как прерывание таймера1 ещё не выполнило весь код.
В несущей частоте образуется "провал", и TSOP это фиксирует - пакет забракован.
А теперь, если при обработке прерывания таймера1 мы принудительно разрешим остальные прерывания, то в момент, когда нужно будет сформировать очередной импульс для ИК диода, обработка прерывания таймера1 прекратитья, и выполнится обработчик прерывания, формируюшего несущую (то есть таймера2).
И тогда, по идее, срыва несущей не должно произойти!
Возможно, качество звука немного пострадает, но это же не критично!
Как думаете, сработает?
Кто нибудь баловался таким образом с прерываниями?
Вот и статейку нашел по теме
[url]http://roboforum.ru/wiki/AVR:Прерывания/Приоритетность[/url]
Прорвемся!
Разобрался с прерываниями!
Только, помимо глобального разрешения прерываний не забывайте запрещать само прерывание , в обработчике которого вы это делаете (а перед выходом из обработчика снова разрешить), иначе обработчик улетает в такую рекурсию!