Обсуждаем контроллеры компании Atmel.
Пт янв 07, 2022 14:42:42
BOB51, вот честно. Мне проще взять МК потолще и написать на Си, нежели считать байты флеша и писать на ассемблере. Просто быстрее выходит.
Но знание асма и архитектуры АВРки позволяет критичные участки писать на си аккуратно. И не наступать на грабли с атомарностью, например.
А с I2C - повторюсь, достаточно проверить АСК при отправке адреса. А дальше проверки не нужны. Ведомый отозвался - ура, работаем на ожиданиях. Не отозвался - показать пользователю ЕГГОГ.
a1000, для DS18B20 тоже делайте на ожиданиях, не забыв запретить прерывания на период чтения/записи одного бита и отсчитывания таймингов.
Тайминги сделайте на циклах. 15 мкс получится на однобайтовом цикле - это 240 тактов при 16 мгц (я выше кидал примерный алгоритм цикла). Стартовое значение счетчика цикла либо посчитать по тактам, либо подобрать в эмуляторе студии. 45 мкс - три раза дернуть задержку 15 мкс. 480 мкс - 32 раза по 15 мкс.
Обратите внимание - сброс-пауза-ожидание presence должно быть атомарным блоком, т.е. перед сбросом запретить прерывания, а разрешить только после проверки presence.
Чтение/запись бита тоже должно быть атомарным - запретить прерывания, прижать линию на 15/45 мкс (при записи) или на 15 мкс, отсчитать 45 и посмотреть что на линии (при чтении), потом разрешить прерывания.
Пт янв 07, 2022 15:04:05
GoldenAndy писал(а):Ведомый отозвался - ура, работаем на ожиданиях.
я очень дико извиняюсь - о каких ожиданиях вы тут говорите? если я правильно помню, то в и2ц после того, как сделал нужный фронт SCL, можно сразу читать SDA - задержки там будут настолько малые, что ожидания не потребуется. возможно, один NOP... и то не уверен, что на самом деле необходимо. (давно с и2ц работал, пишу по воспоминаниям)
Пт янв 07, 2022 15:23:07
ARV, сформировали старт, подождали , пока в статусном регистре старт не подтвердится. Это быстро.
А вот чтение/запись данных - тут надо ждать, ибо формирование SCL, чтение/запись SDA делает блок TWI самостоятельно. Все 8 бит.
Т.е. отправили байт адреса - ждем, пока он отправится и прилетит/не прилетит АСК.
Это 9 тактов несущей i2c. для 400 кГц - это 22.5 мкс. Вот эти 22.5 мкс можно протупить в ожидании или заняться своими делами.
Пт янв 07, 2022 15:28:53
I2C штука медленная - 100/400 кГц поэтому и вставляем задержки.
Одна из версий программного лаподрыга с учетом возможных ошибок (из старых коллекций библиотечек-заготовок)
Пт янв 07, 2022 15:29:50
Мне в этом плане нравится либа ДиХальта (не знаю, есть ли она на асме) i2c ultimate. Там скармливается режим, объем данных и адрес буфера. И подается старт. А дальше оно в фоне на прерываниях само отработает и выдаст коллбеком результат.
Пт янв 07, 2022 15:32:06
Это уже забота обработчика.
У меня там только минимальный драйвер приема-передачи.
Пт янв 07, 2022 16:46:38
GoldenAndy писал(а):А вот чтение/запись данных - тут надо ждать, ибо формирование SCL, чтение/запись SDA делает блок TWI самостоятельно.
вот сроду TWI не применял, даже не пробовал, всегда хватало программного дрыгонога
Пт янв 07, 2022 21:16:13
ARV, ну мне наоборот, проще аппаратный TWI использовать. Хотя в каком то проектике пришлось программный i2c делать.там да, тупой ногодрыг на задержках.
Сб янв 08, 2022 11:08:14
Не у всех МК (тем более "устаревших" или малолапых да из других семейств) имеется аппаратный TWI.
Дополнительные минусы - практически обязательное наличие еррат и, как результат, необходимость детального изучения конкретного модуля в конкретной версии выбранного МК, невозможность переброса выводов для более удобной разводки монтажа.
Так что алгоритмы и библиотеки с программным ногодрыгом всегда актуальными будут.
Пн янв 10, 2022 18:07:31
что касается последних сообщений, касающихся LD, то меня просто возмущает отсутствие желания у вопрошающего прочитать о системе команд AVR.
Злой ты какой то...
Да я знаю что я ленивая свинья. Но свинья с чувством юмора,могущая посмеяться над собой
и над обстоятельствами.И способная, и с интеллектом выше среднего.Да если хотите знать,я самая лучшая в мире свинья!
Последний раз редактировалось
главный колбасист Пн янв 10, 2022 20:58:46, всего редактировалось 1 раз.
Пн янв 10, 2022 19:44:56
Не злой, а солидный (учёный КОТЯРА)!
Положено мелких КОТЯТОК носом в миску тыкать.
Пн янв 10, 2022 20:30:57
BOB51, оффтопик.
У нас есть кошка.
Когда ей было 7 лет - взяли еще одну кошку-подростка. Уличную бандитку 6-7 месяцев.
Когда это малолетнее, отпихнув старшую, полезло в ее миску - старшая сделала просто. Лапой эту молодую мордой в миску - и держала. Хватило одного раза, что бы малая не лезла.
Пн янв 10, 2022 21:30:46
Были времена когда мы под стол пешком ходили и не знали сколько дважды два будет,не то что
подпрограммы какие то там.
Над нами насмехались родители(старшие),мол какой ты тупой,че книжки
не читаешь?
Да,лень,знаю.
Просто был переход по условию rjmp на метку,смотрю, rcall точно так же переходит ,и невдомек было
что он че то там сохраняет в стеке адрес текущей команды ,и еще в три такта,пока не начала вылазить
ошибка переполнения в симуляторе.
Пн янв 10, 2022 22:57:58
главный колбасист, ну вот я не верю что вы ученик 6 класса, когда информатику еще не читают. И что понятия цикл, подпрограмма, процедура/функция вам в школе не объясняли.
(Даже на микрокалькуляторах МК-61 были команды БП и ПП... Безусловный Переход и ПодПрограмма )
И мнемоники jmp (jump) и call в переводе с иноземного - прыжок и вызов - ни на что не намекают?
Учить ассемблер методом ненаучного тыка можно, но сложно. Гораздо проще прочитать какую то книжку, а их по асму АВРок вагон и тележка... Причем на русском языке...
Вт янв 11, 2022 10:33:41
А есть еще и хитрые
ICALL
IJMP
Да условный возврат с подстановкой адреса через стек.
(у I8080 проще было - там набор команд возврата по флагам условий)
Чт янв 13, 2022 14:07:30
Книжек целая коллекция уже,Белов,Мортон,Ревич,Шпак,и т.д. Че то в сон тянет,через минут двадцать,вот прям напасть какая то.Ничего не могу с собой сделать.С AVR-студией чуть веселее,там активного диалога требует,но тоже через пол часа начинаешь позевывать.
А вот скажите пожалуйста,где в сервоприводе XD-15-TN и им подобных,омрон,настройки коммуникации
по rs485 ? Понимаю что не в тему.Проблема у меня с прошлой осени.В англоязычном мануале 333стр. этот раздел почему то отсутствует. Специализированные форумы не помогли. пока.
Чт янв 13, 2022 14:24:54
главный колбасист, вы во все темы на форуме будете пихать свой вопрос про XD-15-TN ?
В Котуинку написали, теперь тут....
Сделайте отдельную тему уже - если кто знает - в новой теме увидит быстрее...
Вс янв 16, 2022 21:59:56
Когда это малолетнее, отпихнув старшую, полезло в ее миску - старшая сделала просто. Лапой эту молодую мордой в миску - и держала. Хватило одного раза, что бы малая не лезла.
куда дели мою мадмуазель кики?
Вс янв 16, 2022 23:14:18
главный колбасист, И чито?
Примите это как маркетинговый ход и получите 16 ассемблерных мнемоник по цене 2 команд.
Не, ви таки конечно можете писать brbs/brbc, но таки вам потом тяжелее будет разобраться...
Мало того я вам открою страшную-престрашную тайну (которую из Мальчиша-Кибальчиша так и не смогли выбить Злые Буржуины)
Мнемоника установки битов в регистре SBR Rx, K и мнемоника логического ИЛИ регистра и константы ORI Rx, K - это одна и та же машинная команда!!!!!!
ORI Rx, K в машинном коде выглядит вот так: 0110 KKKK rrrr KKKK
например, для ORI R16, 0xA5 и для SBR R16, 0xA5 получается один и тот же код 0110 1010 0000 0101 = 0x6A05
То же относится и к мнемоникам сброса битов в регистре CBR Rx, K и логического И регистра и константы ANDI Rx, K.
Только компилятор в случае мнемоники CBR константу К запишет как 255-К (инверсия).
ANDI Rx, K - 0111 KKKK rrrr KKKK
для ANDI R16,0xA5 будет машинный код 0111 1010 0000 0101 = 0x7A05
а для CBR R16, 0xA5 - 0111 0101 0000 1010 = 0x750A.
Пн янв 17, 2022 06:49:55
...куда дели мою мадмуазель кики?
Инициатором был я, пожаловавшись модератору на эту кики. Вы, на мой взгляд, переводите техраздел в мяу.
По вопросу. Есть команды условного перехода, анализирующие до 3-х флагов одновременно. И это хорошо.
- Вложения
-
- AVR_INSTR_SET.PNG
- (93.16 KiB) Скачиваний: 157
Powered by phpBB © phpBB Group.
phpBB Mobile / SEO by Artodia.