Atmega вектора прерываний

Здравствуйте У Atmeg (в частности Atmega8) можно менять приоритет прерываний. Если да, то куда смотреть, в даташите чего-то не нашёл :(. С уважением, Шаповалов Алексей

Reply to
Shapovalov Alexey Ivanovich
Loading thread data ...

Mon Jul 04 2005 22:31, Shapovalov Alexey Ivanovich wrote to All:

SAI> У Atmeg (в частности Atmega8) можно менять приоритет прерываний. Если SAI> да, то куда смотреть, в даташите чего-то не нашёл :(.

Система прерываний у AVR очень жесткая: обработку прерывания могут прервать либо все прерывания, либо ни одно. Приоритеты фиксированные (неизменяемые) и используются только при выборе источника, который будет обработан первый. Тоже самое с MSP430. У PIC18 с этим получше: у прерываний есть изменямый приоритет, который может быть низким или высоким.

С уважением, Денис

Reply to
Denis Y. Borisov

Tue Jul 05 2005 14:14, Denis Y. Borisov wrote to Shapovalov Alexey Ivanovich:

DYB> Система прерываний у AVR очень жесткая: обработку прерывания могут DYB> прервать либо все прерывания, либо ни одно.

В начале кеждого обработчика запрещаешь прерывания, у которых приоритет ниже чем у этого обработчика. Потом делаешь sei. Так делается многоуровневая система прерываний на AVR. Желающие могут реализовать циклический сдвиг приоритетов и пр.

VLV

"Как мне быть добрым? Ведь все стоит так дорого!" (c) Б. Брехт

Reply to
Vladimir Vassilevsky

Tue Jul 05 2005 19:39, Vladimir Vassilevsky wrote to Denis Y. Borisov:

VV> В начале кеждого обработчика запрещаешь прерывания, у которых приоритет VV> ниже чем у этого обработчика. Потом делаешь sei. Так делается VV> многоуровневая система прерываний на AVR.

Так и делаю. Но время реакции на события значительно увеличивается и не достигается основная цель: поделить обработчики на "очень быстрые" и "обычные".

С уважением, Денис

Reply to
Denis Y. Borisov

Wed Jul 06 2005 08:44, Denis Y. Borisov wrote to Vladimir Vassilevsky:

VV>> В начале кеждого обработчика запрещаешь прерывания, у которых приоритет VV>> ниже чем у этого обработчика. Потом делаешь sei. Так делается VV>> многоуровневая система прерываний на AVR.

DYB> Так и делаю. Hо время реакции на события значительно увеличивается и не DYB> достигается основная цель: поделить обработчики на "очень быстрые" и DYB> "обычные".

Хм. Что это за задачи, если не хватает скорости реакции AVR на 20MHz? Hаверное, все-таки процессор выбран неадекватно и стоит посмотреть на тот же dsPIC или TMS24xx?

VLV

"Как мне быть добрым? Ведь все стоит так дорого!" (c) Б. Брехт

Reply to
Vladimir Vassilevsky

Здравствуй, Denis!

Wednesday July 06 2005 08:44, Denis Y. Borisov пucaл k Vladimir Vassilevsky:

VV>> В начале кеждого обработчика запрещаешь прерывания, у которых приоритет VV>> ниже чем у этого обработчика. Потом делаешь sei. Так делается VV>> многоуровневая система прерываний на AVR. DB> Так и делаю. Hо время реакции на события значительно увеличивается и не DB> достигается основная цель: поделить обработчики на "очень быстрые" и DB> "обычные".

В аpхитектуpе пpеpываний используется стаpое классическое pешение более известное как пpиоpитетный шифpатоp - 155ив1, ив3. Hа стаpых 580 пpоцах до появления 580вн59 его и использовали. В меге тоже самое поменять пpиоpитет низя без вышеназваных VV изгибов, но пpи некотоpом кол-ве пpеpываний лазить по флагам ну его нафиг :( Я выкpучиваюсь с недавних поp пеpеходом на несколько мег :) Если это конечно тебе подойдет - у меня одна мега на связь и LCD, а втоpая на железо с быстpой pеакцией. Пpи таком pазделении SPI оказался не нужон обошелся связью между поpтами - 4 pазpяда - 16 pежимов pаботы дешево и сеpдито. Всего наилучшего! Федор Почечуев

Reply to
Fedor Pochechuyev

Wed Jul 06 2005 18:58, Vladimir Vassilevsky wrote to Denis Y. Borisov:

VV> Хм. Что это за задачи, если не хватает скорости реакции AVR на 20MHz?

Дополнительный программный UART. Вроде целых 20 MIPS, но из-за примитивной системы прерываний эффективность работы с критичными по времени реакции событиями значительно снижается.

VV> Hаверное, все-таки процессор выбран неадекватно

Любой контроллер с 2 UART'ами стоит сравнительно дорого, а цена - основной критерий выбора.

С уважением, Денис

Reply to
Denis Y. Borisov

Sat Jul 09 2005 12:57, Denis Y. Borisov wrote to Vladimir Vassilevsky:

VV>> Хм. Что это за задачи, если не хватает скорости реакции AVR на 20MHz? DYB> Дополнительный программный UART.

В AVR помещается пара программных UARTов на скорость до 38400. Если прочие прерывания не создают блокировок в сумме не более чем на ~четверть бита. Hо тогда имеет смысл отказаться от других прерываний и делать обработку прочих событий в таймерном прерывании, от которого крутятся софтовые UARTы.

VLV

"Как мне быть добрым? Ведь все стоит так дорого!" (c) Б. Брехт

Reply to
Vladimir Vassilevsky

Sat Jul 09 2005 23:06, Vladimir Vassilevsky wrote to Denis Y. Borisov:

VV> В AVR помещается пара программных UARTов на скорость до 38400. VV> Если прочие прерывания не создают блокировок в сумме не более чем VV> на ~четверть бита.

Пара полноценных дуплексных UART'ов с 3 выборками в середине бита на расстоянии 1/16 бита друг от друга?

VV> Hо тогда имеет смысл отказаться от других прерываний VV> и делать обработку прочих событий в таймерном прерывании, от которого VV> крутятся софтовые UARTы.

Прочие прерывания могут обрабатываться дольше, чем 1/16 бита...

С уважением, Денис

Reply to
Denis Y. Borisov

Mon Jul 11 2005 09:53, Denis Y. Borisov wrote to Vladimir Vassilevsky:

VV>> В AVR помещается пара программных UARTов на скорость до 38400. DYB> Пара полноценных дуплексных UART'ов с 3 выборками в середине бита на DYB> расстоянии 1/16 бита друг от друга?

Зачем? Просто регулярные выборки на трехкратной частоте битрейта. От таймерного прерывания. Можно даже с усреднением по трем выборкам, хотя совершенно необязательно. VV>> Hо тогда имеет смысл отказаться от других прерываний VV>> и делать обработку прочих событий в таймерном прерывании, от которого VV>> крутятся софтовые UARTы. DYB> Прочие прерывания могут обрабатываться дольше, чем 1/16 бита...

Во-первых, не 1/16. Достаточно ~1/4. Во-вторых, об том и речь, чтобы не использовать никаких прерываний кроме UART.

VLV

"Как мне быть добрым? Ведь все стоит так дорого!" (c) Б. Брехт

Reply to
Vladimir Vassilevsky

Mon Jul 11 2005 18:04, Vladimir Vassilevsky wrote to Denis Y. Borisov:

VV>>> В AVR помещается пара программных UARTов на скорость до 38400. DYB>> Пара полноценных дуплексных UART'ов с 3 выборками в середине бита на DYB>> расстоянии 1/16 бита друг от друга?

VV> Просто регулярные выборки на трехкратной частоте битрейта.

При использовании мажоритарной схемы 2 из 3 это снижает суммарную допустимую погрешность задающих генераторов (ЗГ) пары UART'ов с 7/16 бита на 10 бит (~4,3%) до 1/3 на 10 (~3,3%). Вроде не смертельно, но иногда может не хватить (если например частота ЗГ - 4, 8, 16, 20 МГц вместо 3.6864, 7.3728, 14.7456,

18.432. Про использование "упрощенных" схем - ниже.

VV> Можно даже с усреднением по трем выборкам, хотя совершенно VV> необязательно.

На серьезных объектах с помехами - обязательно. Иначе придется сильно снижать скорость.

Итого: можно делать и одну выборку на бит, но максимальная эффективность может быть достигнута при использовании 16 выборок (хотя можно и больше) и мажоритарной схемы "2 из 3".

С уважением, Денис

Reply to
Denis Y. Borisov

Tue Jul 12 2005 10:50, Denis Y. Borisov wrote to Vladimir Vassilevsky:

DYB> From: "Denis Y. Borisov" snipped-for-privacy@stav.ru

DYB> Mon Jul 11 2005 18:04, Vladimir Vassilevsky wrote to Denis Y. Borisov:

VV>>>> В AVR помещается пара программных UARTов на скорость до 38400. VV>> Можно даже с усреднением по трем выборкам, хотя совершенно VV>> необязательно. DYB> Hа серьезных объектах с помехами - обязательно.

Достаточно перед UART поставить простейший RC ФHЧ с граничной частотой примерно 1/2 битрейта. Это работает лучше, чем усреднения и мажорирования. DYB> Иначе придется сильно DYB> снижать скорость. Hе только снижать скорость, но и увеличивать число выборок на бит. То есть пытаться реализовать тот же ФHЧ программно после отцифровки.

DYB> Итого: можно делать и одну выборку на бит, но максимальная эффективность DYB> может быть достигнута при использовании 16 выборок (хотя можно и больше) DYB> и мажоритарной схемы "2 из 3".

Хардверный UART сделан так из соображений простоты. Копировать его логику в софте бессмысленно. Это не даст никакого выигрыша. VLV

"Как мне быть добрым? Ведь все стоит так дорого!" (c) Б. Брехт

Reply to
Vladimir Vassilevsky

Wed Jul 13 2005 21:55, Anatoly Mashanov wrote to Vladimir Vassilevsky:

VV>>> Просто регулярные выборки на трехкратной частоте битрейта. AM> Думается(с), что вполне достаточно мерить время между переходами уровня AM> на входных ногах и пересчитывать его в данные.

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

AM> Я видел некий многоканальный AM> порт, собранный по этому принципу на одной 8250.

Однажды мне пришлось сделать UART на 9600, работающий от прерывания с частотой 32kHz, т.е. некратного. Выглядело страшновато, но работало совершенно нормально. VLV

"Как мне быть добрым? Ведь все стоит так дорого!" (c) Б. Брехт

Reply to
Vladimir Vassilevsky

Hello Vladimir!

12 Jul 05 10:50, Denis Y. Borisov wrote to you:

VV>> Просто регулярные выборки на трехкратной частоте битрейта.

DB> При использовании мажоритарной схемы 2 из 3 это снижает суммарную DB> допустимую погрешность задающих генераторов (ЗГ) пары UART'ов с 7/16

Думается(с), что вполне достаточно мерить время между переходами уровня на входных ногах и пересчитывать его в данные. Для этого достаточно RC цепочки для подавления дребезга, прерывания по переходу уровня и прерывания от таймера для обработки ситуации, когда старший бит байта - единица. И передатчик в фоновой задаче. Я видел некий многоканальный порт, собранный по этому принципу на одной

8250.

Anatoly

Reply to
Anatoly Mashanov

Tue Jul 12 2005 19:04, Vladimir Vassilevsky wrote to Denis Y. Borisov:

VV> Достаточно перед UART поставить простейший RC ФHЧ с граничной частотой VV> примерно 1/2 битрейта. Это работает лучше, чем усреднения и VV> мажорирования.

Но только с одним постоянным битрейтом. При проектировании системы, состоящей из одних и тех же устройств, битрейт может зависеть от расстояний и окружающей обстановки. Поэтому IMHO фильтры - решение не универсальное.

С уважением, Денис

Reply to
Denis Y. Borisov

Wed Jul 20 2005 10:56, Denis Y. Borisov wrote to Vladimir Vassilevsky:

VV>> Достаточно перед UART поставить простейший RC ФHЧ с граничной частотой VV>> примерно 1/2 битрейта.

DYB> Hо только с одним постоянным битрейтом. При проектировании системы, DYB> состоящей из одних и тех же устройств, битрейт может зависеть от DYB> расстояний и окружающей обстановки.

Тем более нужно ФHЧ. Понижается битрейт а число выборок на бит остается таким же. Помехоустойчивость не изменилась.

BTW, а вы видели хотя бы одну систему на UART ,где битрейт меняется от обстановки? VLV

"Как мне быть добрым? Ведь все стоит так дорого!" (c) Б. Брехт

Reply to
Vladimir Vassilevsky

Hi Vladimir, hope you are having a nice day!

20 Июл 05, Vladimir Vassilevsky wrote to Denis Y. Borisov:

VV> BTW, а вы видели хотя бы одну систему на UART ,где битрейт меняется VV> от обстановки?

От обстановки не видел, но сетка стандартных скоростей вполне типичный случай для разных сетей. Т.е. прибор один и тот же, но на какой скорости он будет работать в данной сети заранее неизвестно. Перестраиваемый ФHЧ, конечно, можно сделать, но это на мой взгляд только лишний геморрой.

WBR, AVB

Reply to
Alexey V Bugrov

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.