реклама на сайте
подробности

 
 
> bit set, C
i.dmitry
сообщение Jul 22 2007, 09:14
Сообщение #1


Участник
*

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



Правильно ли я понял:
1)
Код
TIMSK = (1 << OCIE2);

2)
Код
TIMSK |= (1 << OCIE2);

----------
В первом случае установится только бит OCIE2, остальные будут нулями.
Во втором случае все биты кроме OCIE2 останотся неизменными, а этот бит станет единицей.
----------
Правильно?

-dmitry.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
CD_Eater
сообщение Jul 26 2007, 23:14
Сообщение #2


Частый гость
**

Группа: Новичок
Сообщений: 173
Регистрация: 3-09-04
Из: Moscow
Пользователь №: 595



Вы зря беспокоитесь. Это недоподправленный даташит. Копируют кусками из старых даташитов, не все детали замечают.
Go to the top of the page
 
+Quote Post
=GM=
сообщение Jul 27 2007, 11:36
Сообщение #3


Ambidexter
*****

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



Цитата(CD_Eater @ Jul 26 2007, 22:14) *
Вы зря беспокоитесь. Это недоподправленный даташит. Копируют кусками из старых даташитов, не все детали замечают

Ох, вашими бы устами...да мёд пить(:-) И не беспокоюсь совсем, подумаешь ADIF, да на этот ацп со слезами не взглянешь(:-).

Расскажите лучше, как они реализовали SBI/CBI без чтения-модификации-записи?


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
ReAl
сообщение Jul 27 2007, 12:55
Сообщение #4


Нечётный пользователь.
******

Группа: Свой
Сообщений: 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, это может "развалить" времянки у существующих программ. Хотя я предпочёл бы ускорение :-)


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
=GM=
сообщение Jul 27 2007, 13:42
Сообщение #5


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 (!).


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
ReAl
сообщение Jul 27 2007, 16:59
Сообщение #6


Нечётный пользователь.
******

Группа: Свой
Сообщений: 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. На уровне жонглирования булевыми выражениями результат тот же, в кремнии реализуют тот, который окажется компактнее или быстрее, на картинке в даташите нарисуют тот, который нагляднее.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
=GM=
сообщение Jul 27 2007, 21:20
Сообщение #7


Ambidexter
*****

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



Опять как-то неоправданно сложно у вас, а ведь еще надо оставить обычный доступ к портам. Я бы сделал следующим образом, используя алгоритм чтение-модификация запись.

1) Читаем один из 32 портов.

2) Обнуляем те спецбиты порта, которые сбрасываются записью логической единицы. Т.е. логическое И содержимого порта и выхода таблицы (по числу портов), в которой прописаны спецбиты.

3) Устанавливаем бит, заданный командой SBI/CBI.

4) Записываем результат обратно в порт.

Вот как-то так. Ну а если таблица для нового чипа не подправлена, то будет баг, что мы и наблюдаем.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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
- - 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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 15:19
Рейтинг@Mail.ru


Страница сгенерированна за 0.01465 секунд с 7
ELECTRONIX ©2004-2016