ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
29 марта
622126 Топик полностью
Ксения (30.09.2015 12:59 - 13:47, просмотров: 256) ответил Petrovich на А зачем вообще нужна система событий? Как она переплетается с системой прерываний и чем отличается?
Система событий - совершенно гениальное изобретение! По сути это просто отдельные электрические линии (вероятно триггеры), каждая из которых может перейти в активное состояние по событию, выбранному программистом. И по этому же активному состоянию линии можно вызвать какие-то действия (в общем случае множественные). Например, выбрав наобум любую свободную линию системы событий, я могу подключить ее вход, например, к 7-му пину порта F (фактически к любому пину почти любого порта), предварительно (еще в самом порту) указав направление фронта срабатывания. Тогда выход этой линии я теперь могу подключить к чему хочу: если подключу к счетному входу таймера, то он станет считать импульсы с 7-ой ноги порта F. Причем выход линии события можно подключать одновременно к нескольким потребителям, например, один таймер может считать эти импульсы, другой делать захват, третий ресетиться, АЦП стартовать, вызывать прерывания и т.п. Но самый смак все-таки в том, чтобы прерываний не вызывать, а напрямую инициировать какие-то действия. В этом случае работа идет чисто на триггерном уровне, минуя процессор. Т.е. будет работать даже в том случае, если процессор зависнет на каком-то бесконечном ожидании. Например, если на вход линии системы событий пустить прерывание 1-го таймера по переполнению, а выход их нее присоединить к счетному входу 2-го таймера, то оба эти таймера фактически "срастутся", превратившись в один длинный счетчик (2-ой будет выдавать старшую часть числа, а 1-ый младшую). На этом же принципе я когда-то счетчик частоты делала: 1-ый таймер считает импульсы, а 2-ой таймер ведет счет времени. Каждую секунду 2-ой таймер через линию системы событий заставляет 1-ый таймер запомнить/захватить число, которое он сосчитал, и затем сброситься на нуль. А заодно 2-ый таймер вызывает и обычное прерывание, в котором запомненное 1-ыи таймером число переносится в память. Т.е. при такой организации счета неизбежная задержка вызова и выполнения процедуры прерывания не влияет на точность счета. Одно лишь плохо, что в Xmega не доделали выход с системы событий назад на пины портов. А если бы доделали, то было бы совсем замечательно - можно было бы задать логику ногодыгов на системе событий, и тогда контроллер мог отвечать на входные импульсы выходными, вообще не пользуясь "головой" :), т.е. наличие системы событий позволяет задавать безусловные рефлексы, работающие на автомате.