|
bit set, C |
|
|
|
Jul 22 2007, 09:14
|

Участник

Группа: Участник
Сообщений: 35
Регистрация: 8-07-07
Пользователь №: 28 963

|
Правильно ли я понял: 1) Код TIMSK = (1 << OCIE2); 2) Код TIMSK |= (1 << OCIE2); ---------- В первом случае установится только бит OCIE2, остальные будут нулями. Во втором случае все биты кроме OCIE2 останотся неизменными, а этот бит станет единицей. ---------- Правильно? -dmitry.
|
|
|
|
|
 |
Ответов
|
Jul 27 2007, 12:55
|

Нечётный пользователь.
     
Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417

|
Цитата(=GM= @ Jul 27 2007, 13:36)  Расскажите лучше, как они реализовали SBI/CBI без чтения-модификации-записи? Да хотя бы так - от каждого триггера порта линия EN идёт отдельно (а не все 8 соединяются, как было бы можно для RMW), по команде SBI на шину данных блока портов выставляется 0xFF (по CBI - 0x00), а на линии EN активный уровень только на выбранный дешифратором 3-на-8. По OUT же на шину EN выставляются активные уровни на все 8 линий, на данных - из команды. Добавляется небольшой дешифратор и, что может оказаться больнее, шина из 8 персональных EN для каждого бита плюс элемент 2И на входе EN каждого триггера. Убавляется ветвь в автомате для отработки команд, которая производила чтение порта, прогон через АЛУ с формированием нужной команды (OR/AND) и формирователь нужного байта данных для операции (по сути - тот же мелкий дешифратор, только на шину данных, а не шину EN), запись результата назад. Соответственно, команды SBI/CBI в таком виде легко могут быть однотактовыми, у них тот же путь исполнения, что и у OUT. Но, как правильно отметил CD_eater, это может "развалить" времянки у существующих программ. Хотя я предпочёл бы ускорение :-)
--------------------
Ну, я пошёл… Если что – звоните…
|
|
|
|
|
Jul 27 2007, 13:42
|

Ambidexter
    
Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282

|
Цитата(ReAl @ Jul 27 2007, 11:55)  Да хотя бы так - от каждого триггера порта линия EN идёт отдельно (а не все 8 соединяются, как было бы можно для RMW), по команде SBI на шину данных блока портов выставляется 0xFF (по CBI - 0x00), а на линии EN активный уровень только на выбранный дешифратором 3-на-8. По OUT же на шину EN выставляются активные уровни на все 8 линий, на данных - из команды. Добавляется небольшой дешифратор и, что может оказаться больнее, шина из 8 персональных EN для каждого бита плюс элемент 2И на входе EN каждого триггера. Убавляется ветвь в автомате для отработки команд, которая производила чтение порта, прогон через АЛУ с формированием нужной команды (OR/AND) и формирователь нужного байта данных для операции (по сути - тот же мелкий дешифратор, только на шину данных, а не шину EN), запись результата назад. Соответственно, команды SBI/CBI в таком виде легко могут быть однотактовыми, у них тот же путь исполнения, что и у OUT. Но, как правильно отметил CD_eater, это может "развалить" времянки у существующих программ. Хотя я предпочёл бы ускорение :-) Сложно у вас как-то...и сомнительно мне(:-) Вот смотрю я на рис.10-2 документа 4250, и не вижу никаких линий EN. Зато вижу два триггера и три линии WPx, WDx и WRx, ведущие на вход С. Атмельцы манипулируют, скорее всего, с сигналами синхронизации, а не с мифическими сигналами EN. Да и это тоже накладно, для 4 портов понадобится 64 линии связи, а для 32 портов - не менее 288 (!).
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
Jul 27 2007, 16:59
|

Нечётный пользователь.
     
Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417

|
Опять оффтопим... Цитата(=GM= @ Jul 27 2007, 15:42)  Вот смотрю я на рис.10-2 документа 4250, и не вижу никаких линий EN. Зато вижу два триггера и три линии WPx, WDx и WRx, ведущие на вход С. Атмельцы манипулируют, скорее всего, с сигналами синхронизации, а не с мифическими сигналами EN. Да и это тоже накладно, для 4 портов понадобится 64 линии связи, а для 32 портов - не менее 288 (!). Ну попробуйте нарисовать схему, которая может персонально записывать в 32*8 триггеров (порты*разрядность) без 128 управляющих линий. А куда они идут - на "мифические" EN или через те же логические элементы (но спрятанные от Вас за пределами поясняющего фрагмента схемы) напрямую на тактовый вход - разницы никакой. В любом случае - для независимой записи - независимые сигналы. По картинке из даташита невозможно записать отдельный бит, гляньте на примечание под ней. Теперь берём и разводим с дешифратора 3-на-8 восемь линий - по одной на каждый бит, линия одна на одноимённые биты всех портов. Теперь возле каждого WPx (которые "are common to all pins within the same port") поставим логику и замешаем для каждого бита "его" линию битовой выборки с признаком команды SBI и со стробом записи для данного регистра (тех же ACR/ACSR, не только для портов это сделано). Получим персональный сигнал. А для записи по OUT надо замешать бит шины данных, а не дешифрованный номер бита, но эта линия уже показана на том рисунке. Получается "жирная" логика на пути стробирующего сигнала - это всегда плохо, если Вы работали с ПЛИС, Вы, думаю, с этим согласны. Можно строб записи WR объединить c сигналом выборки ( ENABLE) регистра Px в логическом элементи за пределами показанного в даташите рисунка и получить строб WPx. Можно этот логический элемент в несколько другой форме поместить внутрь триггера и на строб записи подать напрямую WR, а на получившийся вход EN подать сигнал выборки Px. Если логика простая - то почти всё равно. Если логика усложняется, то с точки зрения быстродействия и отсутсвия всяких иголок может оказаться лучше на вход стробирования триггера подать "чистый" сигнал WR, а все независимые (порождаемые разными командами) разрешения свести по "ИЛИ" на входе EN. Смотрите - в той схеме, что в даташите, сигналы WPx и WRx получены каждый объединением по "И" процессорного сигнала WR, а потом они опять идут в логику. Можно наоборот - сначала всю логику разрешений записи по разным поводам свести в один сигнал "пишем" и результат комбинировать со стробом записи, тогда тот сигнал "пишем" и есть EN. На уровне жонглирования булевыми выражениями результат тот же, в кремнии реализуют тот, который окажется компактнее или быстрее, на картинке в даташите нарисуют тот, который нагляднее.
--------------------
Ну, я пошёл… Если что – звоните…
|
|
|
|
Сообщений в этой теме
i.dmitry bit set Jul 22 2007, 09:14 alux Совершенно верно.
В апноте avr035 все подробно опи... Jul 22 2007, 09:54 ReAl Цитата(i.dmitry @ Jul 22 2007, 12:14) Во ... Jul 22 2007, 18:40 SasaVitebsk Цитата(ReAl @ Jul 22 2007, 21:40) Если ст... Jul 22 2007, 20:17  =GM= Цитата(SasaVitebsk @ Jul 22 2007, 20:17) ... Jul 22 2007, 21:30   defunct Цитата(=GM= @ Jul 23 2007, 00:30) Известн... Jul 22 2007, 21:45  ReAl Цитата(SasaVitebsk @ Jul 22 2007, 22:17) ... Jul 22 2007, 22:07   SasaVitebsk Цитата(ReAl @ Jul 23 2007, 01:07) Так кто... Jul 23 2007, 13:04 _artem_ в iar mожно еще так :
PORTA_Bit4 = 1; Jul 22 2007, 19:03 zltigo Цитата(_artem_ @ Jul 22 2007, 22:03) в ia... Jul 22 2007, 19:45  _artem_ Цитата(zltigo @ Jul 22 2007, 22:45) Не ст... Jul 23 2007, 09:26 AndreyKeil Все станет ясно, если посмотреть дизассемблер. Jul 22 2007, 19:21 rezident Вообще говоря результат действия 1 << OCIE2 ... Jul 22 2007, 19:52 CD_Eater Цитата из ДШ мега48
Some of the Status Flags are c... Jul 22 2007, 23:43 ReAl Цитата(CD_Eater @ Jul 23 2007, 01:43) Неу... Jul 23 2007, 04:32  =GM= Цитата(ReAl @ Jul 23 2007, 03:32) =GM=, а... Jul 23 2007, 11:04 add ЦитатаНу с с выбросом меги8515 действительно можно... Jul 23 2007, 06:52 ReAl Цитата(add @ Jul 23 2007, 08:52) Выступлю... Jul 23 2007, 17:48 CD_Eater ЦитатаГлюк был бы, если бы SBI для этого кристалла... Jul 23 2007, 14:21 =GM= Цитата(CD_Eater @ Jul 23 2007, 13:21) Цит... Jul 24 2007, 14:31 add ЦитатаА m88 - слишком другой кристалл, см. выше. Х... Jul 23 2007, 19:07 defunct Цитата(add @ Jul 23 2007, 22:07) А вот м1... Jul 23 2007, 21:04 CD_Eater ЦитатаЕсть определённое поведение команды, есть ню... Jul 23 2007, 19:20 ReAl Цитата(CD_Eater @ Jul 23 2007, 21:20) Эти... Jul 23 2007, 19:38 SasaVitebsk Спасибо обоим. ReAlу за уточнение нюансов, а CD_Ea... Jul 23 2007, 21:01 CD_Eater 2 ReAl
Хорошо, про "глюк программы" нет ... Jul 23 2007, 21:12 ReAl Цитата(SasaVitebsk @ Jul 23 2007, 23:01) ... Jul 24 2007, 10:45 i.dmitry Спасибо всем. Все понял. Jul 24 2007, 16:45 CD_Eater ЦитатаВидимо вы не совсем правы, вот в документе н... Jul 24 2007, 22:43 =GM= Цитата(CD_Eater @ Jul 24 2007, 21:43) Всё... Jul 25 2007, 11:23 CD_Eater Уверяю Вас - если SBI не трогает немодифицируемые ... Jul 25 2007, 15:12 =GM= Цитата(CD_Eater @ Jul 25 2007, 14:12) Уве... Jul 26 2007, 11:25     =GM= Опять как-то неоправданно сложно у вас, а ведь еще... Jul 27 2007, 21:20      singlskv Цитата(=GM= @ Jul 28 2007, 01:20) 1) Чита... Jul 27 2007, 23:03       =GM= Цитата(singlskv @ Jul 27 2007, 23:03) вот... Jul 28 2007, 09:02      ReAl Цитата(=GM= @ Jul 27 2007, 23:20) Опять к... Jul 28 2007, 07:01
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|