| AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR... |
Таймер на Atmega644
29.06.2013, 11:20
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 10.01.2007
Сообщений: 3,411
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Re: Таймер на Atmega644
Сообщение от bvn123
|
|
по datasheet "64 I/O Registers $0020 - $005F"
|
И какой вывод из этого?
См. сами:
__________________
There's always more than one way to skin a cat.
Последний раз редактировалось tempora; 29.06.2013 в 11:23.
|
|
|
|
29.06.2013, 12:23
|
|
|
Частый гость
Регистрация: 16.11.2005
Сообщений: 46
Сказал спасибо: 0
Сказали Спасибо 11 раз(а) в 11 сообщении(ях)
|
Re: Таймер на Atmega644
вы правы,
материал из Help дает однозначный диапазон с верхней границей 63 ($3F)
|
|
|
|
29.06.2013, 12:51
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 7,458
Сказал спасибо: 3,227
Сказали Спасибо 3,512 раз(а) в 2,393 сообщении(ях)
|
Re: Таймер на Atmega644
Если чё, Atmel уже подсуетился с макросами, автоматически определяющими способ работы с периферией: https://kazus.run/forums/showpost.php?p=641593&postcount=6
|
|
|
|
29.06.2013, 13:24
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 10.01.2007
Сообщений: 3,411
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Re: Таймер на Atmega644
Сообщение от ForcePoint
|
|
Если чё, Atmel уже подсуетился с макросами
|
Причем, на это уже указывалось дважды!
__________________
There's always more than one way to skin a cat.
|
|
|
|
29.06.2013, 17:12
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
|
Re: Таймер на Atmega644
Сообщение от bvn123
|
Сообщение от omercury
|
Сообщение от bvn123
|
|
важно, что это не вызовет увеличения числа команд/времени исполнения
|
Так таки и не вызовет?
|
не вызовет
|
Вызовет.
За сколько тактов выполняется out и за сколько sts ?
Сообщение от bvn123
|
в регистр TCCR0B запись не выполнится,
куда выполнится:
в "Register summary" (datasheet)
0x25 (0x45) TCCR0B
0x05 (0x25) PORTB
|
Заметил. Только подумать - почему - не судьба?
Сообщение от bvn123
|
если нет подвоха, почему в *def.inc не используются адреса в скобках? тогда всюду можно было бы использовать sts вместо out,
это упростило бы перенос программ на другой микроконтроллер
|
Потому, что дефайны заданы для команды out, которая выполняет сохранение со смещением в 32 адреса (РОН). Кстати, что запрещает переназначить дефайны??
Сообщение от bvn123
|
|
материал из Help дает однозначный диапазон с верхней границей 63 ($3F)
|
Какой документ важнее - спецификация (datasheet) на контроллер или Help непонятно от чего? 
А теперь загляните наконец в спецификацию на МК в раздел Memory Map и посчитайте, сколько это всё места занимает. Заодно с адресацией разберитесь.
|
|
|
|
30.06.2013, 10:04
|
|
|
Частый гость
Регистрация: 16.11.2005
Сообщений: 46
Сказал спасибо: 0
Сказали Спасибо 11 раз(а) в 11 сообщении(ях)
|
Re: Таймер на Atmega644
›omercury: Вызовет.За сколько тактов выполняется out и за сколько sts ?
нет, в результате выполнения macro outr ассемблером будет использована либо команда out, либо sts в зависимости от регистра, к которому обращается команда, дополнительных команд, соответственно и циклов, не будет, несмотря на то, что macro выглядит объемно;
можно проверить, вызвав при отладке дизассемблер AVR Studio:
.include "m644def.inc"
.macro outr
.if ( @0 ‹ $40 )
out @0,@1
.else
sts @0,@1
.endif
.endm
ldi r16,$5a
outr TIMSK0,r16
outr TCCR0B,r16
---
help AVR studio / команды ассемблера out и in; help распространяется на все МК, поддерживаемые AVR studio;
код будет рабочим как при границе $3F (она используется в макро по ссылке ForcePoint), так и при $5F - следует из Register Summary (datasheet ATmega644);
нет гарантии, что не появится серия МК с регистрами в диапазоне адресов $40...$5F;
граница $3f безопаснее: macro и help универсальны, datasheet на конкретный МК
›"Заметил. Только подумать - почему - не судьба?" -
? манера общения?
Последний раз редактировалось bvn123; 30.06.2013 в 10:21.
|
|
|
|
30.06.2013, 19:54
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 10.01.2007
Сообщений: 3,411
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Re: Таймер на Atmega644
Сообщение от bvn123
|
|
? манера общения?
|
Вы неправы - он Вам трижды пытался помочь, а Вы трижды отвечали "всё непра! я не ве!", не дав себе труда хорошенько подумать, проверить свои предположения и выводы. Так что, Вы сами индуцировали такой финал.
__________________
There's always more than one way to skin a cat.
|
|
|
|
01.07.2013, 00:20
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
|
Re: Таймер на Atmega644
Сообщение от bvn123
|
|
можно проверить
|
Ну так проверьте в конце-то концов, что команды in и out выполняются за один машинный цикл, а команды ld и st за два машинных цикла, о чём совершенно определённо написано в datasheet, так как первые имеют короткую адресацию, а вторые используют полную адресацию.
Сообщение от bvn123
|
|
? манера общения?
|
Вы писатель?
Вам открытым текстом написали, почему так происходит, но Вы не видите.
Дефайны в стандартных .inc файлах предназначены для команд in/out, поэтому и обозначены они с адреса $00, хотя фактически находятся с адреса $20. В результате поле регистров (РОН и SFR) занимает 32+64 ($20+$40)=96($60)байт и заканчивается по адресу $5F.
Напишите себе единственный раз свой файл определений (define) на самый крутой AVR, который найдёте и используйте его для всех без исключения (кроме хмег) AVR, применяя команды LD для чтения и ST для сохранения значений. Хоть напрямую, хоть косвенно.
Да, инициализация МК будет проходить немного дольше, но от путаницы избавит навсегда.
RTFM в общем.
В datasheet всё есть! (с)
Вот об этом Вам собственно и талдычу на протяжении всего топика.
|
|
|
|
01.07.2013, 06:36
|
|
|
Частый гость
Регистрация: 16.11.2005
Сообщений: 46
Сказал спасибо: 0
Сказали Спасибо 11 раз(а) в 11 сообщении(ях)
|
Re: Таймер на Atmega644
;прямое использование команд:
sts TIMSK0,r16 ;2 цикла
out TCCR0B,r16 ;1 цикл
;то же при использовании macro:
outr TIMSK0,r16 ;2 цикла
outr TCCR0B,r16 ;1 цикл
;в обоих случаях число циклов одинаково
неизменность числа циклов при прямом вызове команд и при использовании макрозаписи проверял до сообщения https://kazus.run/forums/showpost.ph...1&postcount=17 - там же комментарий по этому поводу, который вызвал Ваше несогласие, omercury.
стоило ли расписывать тему о макрозаписи?
первый вопрос темы - "почему команда
out TIMSK0,temp
вызывает ошибку?"
Думаю, при таком вопросе сведения о макрозаписях полезны,
к тому же при анонимном входе на сайт ссылка на pdf и avr001.zip с макрозаписями не видна
=====
о границе - какая запись условия в макрозаписи корректнее:
.if ( @0 ‹ $40 ) ; (эта граница в avr001.zip и https://kazus.run/forums/showpost.ph...4&postcount=21)
или
.if ( @0 ‹ $60 ) ; (эта граница здесь: https://kazus.run/forums/showpost.ph...8&postcount=12)
при ассемблировании команды
"out $40,r16" (здесь превышение границы @0‹$40)
возникает ошибка: \t.asm(19): error: Operand 1 out of range: 0x40,
то есть, корректнее граница @‹$40 (@‹64), что соответствует сведениям help AVR Studio "0 ≤ A ≤ 63":
OUT A,Rr 0 ≤ r ≤ 31, 0 ≤ A ≤ 63
====
Сообщение от omercury
|
›bvn123 но в симуляторе запись в регистр TCCR0B при использовании sts не выполнится
Выполнится. Вопрос - куда?
|
куда и почему - ответил здесь https://kazus.run/forums/showpost.ph...0&postcount=20,
и вопросов по этому поводу не задавал
===
комментарии желательны с полным фрагментом того, что комментируете, возможно, тогда комментарии будут соответствовать цитатам,
по вопросу "писатель?" - сдерживайте себя
Последний раз редактировалось bvn123; 01.07.2013 в 06:59.
|
|
|
|
01.07.2013, 20:12
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
|
Re: Таймер на Atmega644
Сообщение от bvn123
|
то есть, корректнее граница @‹$40 (@‹64), что соответствует сведениям help AVR Studio "0 ≤ A ≤ 63":
OUT A,Rr 0 ≤ r ≤ 31, 0 ≤ A ≤ 63
|
При использовании дефайнов из стандартных .inc файлов, безусловно, правильным будет адрес $40, который специально предназначен для команд in и out и только для них (о чём пишу уже в третий раз). В противном случае надо добавлять смещение в 32 байта ($20) так как Регистры Общего Назначения занимают первые 32 байта в общей области памяти данных. О чём, кстати, тоже уже писал.
Сообщение от bvn123
|
почему команда
out TIMSK0,temp
вызывает ошибку?"
Думаю, при таком вопросе сведения о макрозаписях полезны
|
Не просто полезны, а необходимы знания об устройстве и принципах работы используемого ядра. Макроси всего лишь частный случай.
Сообщение от bvn123
|
;прямое использование команд:
sts TIMSK0,r16 ;2 цикла
out TCCR0B,r16 ;1 цикл
;то же при использовании macro:
outr TIMSK0,r16 ;2 цикла
outr TCCR0B,r16 ;1 цикл
;в обоих случаях число циклов одинаково
|
На меня, видимо, ещё не снизошло озарение, что команды in и out, подставляемые макрозаписью при условной компиляции и прямое написание тех же команд может выполняться за одинаковое количество тактов и занимать одинаковое количество места в памяти. 
Они не просто обязаны выполняться за одинаковое число тактов. Скажу даже более - иначе быть просто не может.
Сообщение от bvn123
|
|
и вопросов по этому поводу не задавал
|
Так это был ответ? 
Осознание сего чудесного факта произошло всего лишь на третий день...
Простите. 
Молю Вас - не прячьте столь глубокие мысли за высоконаучными изъяснениями и витиеватыми выражениями. Кладите их на поверхность, дабы мы, недостойные даже беглого взгляда на наши пустопорожние словоблудия, по слепошарости своей таёжной не дай Бог, не пропустили их при первом же прочтении...
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 09:52.
|
|