Rst7 5 18 января, 2006 Опубликовано 18 января, 2006 · Жалоба Добрый день. Вы гденибудь читали в документации, что обращение к памяти SRAM по адресу 0x0380 будет обрабатываться также как обращение по адресу 0х0080 ? Я такого там не видел, думаю, что претензии в этом случае неправомерны. Я ожидаю, что при выполнении сл. действий: X=0x380; LD R16,X+; будет в регистровой паре X число 0x381. Этого не происходит. Зато, и это уже обсуждалось на другом форуме, в Tiny26 есть другие грабли: 1. напряжение встроенного опорного источника имеет очень широкий разброс от экземпляра к экземпляру до 2,8 в 2. в документации написано: If a different data channel is selected while a conversion is in progress, the ADC will finish the current conversion before performing the channel change. Так вот, у меня при попытке сменить канал сразу или через 2-3 команды после запуска АЦП на однократное преобразование результат преобразования был испорчен. Пришлось отказаться от переключения канала до окончания преобразования. Было это год назад. Это не имеет отношения к обсуждаемому вопросу. :angry2: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
prottoss 0 18 января, 2006 Опубликовано 18 января, 2006 · Жалоба И с какой стати Вы взяли, что результат должен быть 3? Вы грузите в R16 число из ячейки по адресу 0х80 !!! Вы не заметили, что после использования X, следующей коммандой я переношу R27 в R16, ведь меня интересует именно состояние XH!!!!!! И оно должно быть 3, а в камне - 0. Извиняюсь, не заметил. Но все-таки в Tiny2313, на асме, я пользовался всего одним регистром в качестве указателя, при этом в старших половинах указателей хранил глобальные переменные программы, и все работало на ура... Я ожидаю, что при выполнении сл. действий: X=0x380; LD R16,X+; будет в регистровой паре X число 0x381. Этого не происходит. Вообще-то ячейки SRAM с адресом 0x380 в ATtiny26 не существует, если уж подходить к этому вопросу принципиально, и МК имеет полное право заглючить с данным указателем. В даташите на рассматриваемый МК ничего не сказано по поводу обращений к несуществующим адресам. там сказано про 16-разрядные указатели при обращении к памяти, и что область памяти расположена с 0х0060 по 0х00DF. Вы пробовали обращаться к валидным адресам? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
prottoss 0 18 января, 2006 Опубликовано 18 января, 2006 · Жалоба Я ожидаю, что при выполнении сл. действий: X=0x380; LD R16,X+; будет в регистровой паре X число 0x381. Этого не происходит. А Вы пробовали обращаться по валидному адресу (0х0000 - 0х00DF)? В даташите ничего не сказано об обращении по несуществующим адресам, соответсвенно МК имеет полное право глючить. Зато там сказано про формировании адреса с помощью регистровой пары. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Rst7 5 18 января, 2006 Опубликовано 18 января, 2006 · Жалоба Извиняюсь, не заметил. Но все-таки в Tiny2313, на асме, я пользовался всего одним регистром в качестве указателя, при этом в старших половинах указателей хранил глобальные переменные программы, и все работало на ура... ... Вообще-то ячейки SRAM с адресом 0x380 в ATtiny26 не существует, если уж подходить к этому вопросу принципиально, и МК имеет полное право заглючить с данным указателем. В даташите на рассматриваемый МК ничего не сказано по поводу обращений к несуществующим адресам. там сказано про 16-разрядные указатели при обращении к памяти, и что область памяти расположена с 0х0060 по 0х00DF. Вы пробовали обращаться к валидным адресам? Не я обращаюсь к невалидным адресам. ИАР С в старшем байте X хранит переменную (как Вы на Tiny2313). Когда он использует X+ (при этом в младшем байте валидный поинтер), старший байт (и соответственно, переменная) портится. На прошлых процах такого не было. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Rst7 5 18 января, 2006 Опубликовано 18 января, 2006 · Жалоба Вообщем так. Вытащил свежий 8-bit AVR Instruction Set от 11/05. В нем открытым текстом написано: LD - Load Indirect from Data Space to Register using Index X .... Регистр-указатель X может быть неизменен или может быть пост-икрементирован или пред-декрементирован .... Имейте в виду, что только младший байт X-указателя изменяется в устройствах с размером области данных не более 256 байт. Для этих устройств старший байт указателя НЕ ИСПОЛЬЗУЕТСЯ ПРИ ВЫПОЛНЕНИИ ИНСТРУКЦИИ И МОЖЕТ БЫТЬ ИСПОЛЬЗОВАН ДЛЯ ДРУГИХ ЦЕЛЕЙ (большие буквы - мои ;) Перевод тоже)... ЧТД. Значит таки глюк в ядре. Обидно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
beer_warrior 0 18 января, 2006 Опубликовано 18 января, 2006 · Жалоба А портиться только после Х+/Х- ? При обычном использовании порядок? Не пробовали тот же фокус с Y и Z? Попробую завтра поиграться. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
defunct 0 18 января, 2006 Опубликовано 18 января, 2006 · Жалоба Я ожидаю, что при выполнении сл. действий: X=0x380; LD R16,X+; будет в регистровой паре X число 0x381. Этого не происходит. В эмуляторе все так и есть, но ведь в реальном чипе вполне возможна загрузка константы 0 при выходе за границу максимального адреса. Вы же читаете с несуществующего адреса, что уже само по себе неправильно и может привести к любым непредсказуемым последствиям. По большому счету, скажите зачем использовать IAR для камня с 2kb Flash и 128 байт RAM? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Rst7 5 19 января, 2006 Опубликовано 19 января, 2006 · Жалоба Я ожидаю, что при выполнении сл. действий: X=0x380; LD R16,X+; будет в регистровой паре X число 0x381. Этого не происходит. В эмуляторе все так и есть, но ведь в реальном чипе вполне возможна загрузка константы 0 при выходе за границу максимального адреса. Вы же читаете с несуществующего адреса, что уже само по себе неправильно и может привести к любым непредсказуемым последствиям. Вы невнимательно читаете мои посты. Я уже привел перевод из документации Atmel, который черным по белому говорит, что то, что я ожидаю, должно произойти и не должно привести к каким-либо непредсказуемым последствиям. По большому счету, скажите зачем использовать IAR для камня с 2kb Flash и 128 байт RAM? Так надо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
defunct 0 19 января, 2006 Опубликовано 19 января, 2006 · Жалоба Вы невнимательно читаете мои посты. Я уже привел перевод из документации Atmel, который черным по белому говорит, что то, что я ожидаю, должно произойти и не должно привести к каким-либо непредсказуемым последствиям. Понимаете, доверие к фирме Atmel у меня будет чуть-чуть повыше чем к Вам и намного выше чем к глючному IAR. Тема поднятая Вами достаточно серьезная. Либо Вы обнаружили баг ядра, который впоследствии появится в errata, либо баг IAR, либо третий наиболее неприятный вариант - вам померещилось. В том самом даташите имеется допущение: Not all variants of this instruction is available in all devices. Refer to the device specific instruction set summary. Полагаю оно относится к Tiny15, но кто знает, может быть и к tiny26 оно тоже относится. Хотя буду откровенен, считаю, что оно не относится к tiny26. Для чистоты эксперимента, предлагаю Вам скомпилировать Ваш код в AVR Studio, и проверить на реальном чипе. Если XH точно также затрется, тогда это явно баг ядра, если нет, тогда это явный баг IAR'а, и тогда следует писать в IAR, а не в Atmel. PS: такой эксперимент я уже проделал, угадайте результат. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Rst7 5 19 января, 2006 Опубликовано 19 января, 2006 · Жалоба Вы невнимательно читаете мои посты. Я уже привел перевод из документации Atmel, который черным по белому говорит, что то, что я ожидаю, должно произойти и не должно привести к каким-либо непредсказуемым последствиям. Понимаете, доверие к фирме Atmel у меня будет чуть-чуть повыше чем к Вам и намного выше чем к глючному IAR. Тема поднятая Вами достаточно серьезная. Либо Вы обнаружили баг ядра, который впоследствии появится в errata, либо баг IAR, либо третий наиболее неприятный вариант - вам померещилось. В том самом даташите имеется допущение: Not all variants of this instruction is available in all devices. Refer to the device specific instruction set summary. Полагаю оно относится к Tiny15, но кто знает, может быть и к tiny26 оно тоже относится. Хотя буду откровенен, считаю, что оно не относится к tiny26. Перевожу то, что вы процитировали: Не все варианты этой инструкции доступны во всех устройтвах. Все описаные варианты данной инструкции доступны в Tiny26. Памяти данных у нее не более 256 байт, следовательно, старший байт игнорируется (см. посты выше). Все очень прозрачно написано. Для чистоты эксперимента, предлагаю Вам скомпилировать Ваш код в AVR Studio, и проверить на реальном чипе. Если XH точно также затрется, тогда это явно баг ядра, если нет, тогда это явный баг IAR'а, и тогда следует писать в IAR, а не в Atmel. PS: такой эксперимент я уже проделал, угадайте результат. Как Вы думаете, я не на живом камне третий день е....сь? :angry2: Про код, который я написал - это проверочная вставка, для того, чтобы убедится, что именно камень. Код компилирован правильно, т.е. так, как я написал - один к одному, без всяких изменений. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
defunct 0 19 января, 2006 Опубликовано 19 января, 2006 · Жалоба Как Вы думаете, я не на живом камне третий день е....сь? :angry2: Про код, который я написал - это проверочная вставка, для того, чтобы убедится, что именно камень. Код компилирован правильно, т.е. так, как я написал - один к одному, без всяких изменений. Сделал нехитрый дивайс - разъем для ISP и 2 светодиода. Воткнул tiny26, написал такой код: .include "tn26def.inc" START: ldi YL, $FF out DDRA, YL ldi XH, $3 ldi XL, $81 ldi YL, $50 st X+, YL inc YL st X+, YL ldi XH, $3 ldi XL, $81 ld YL, X+ cpi XH, 3 brne _show_red_led _show_green_led: sbi PortA, 1 rjmp _halt _show_red_led: sbi PortA, 0 _halt: rjmp _halt скомпилировал в AVR-Studio, светится зеленый... Что я делаю не так? Чип маркирован ATMEL 0442 ATTINY26-16PI, с обратной стороны - 4H2020 35570C 1-U0442 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Rst7 5 19 января, 2006 Опубликовано 19 января, 2006 · Жалоба Я тоже сделал код: #include "iotiny26.h" NAME main PUBLIC main ORG $0 RJMP main RSEG CODE main ldi r16,0xFF out DDRA,r16 ldi r16,0 out PORTA,r16 ldi r26,0x60 ldi r27,0x55 ld r16,x+ out PORTA,r27 dead_loop rjmp dead_loop END main Что должно быть на порту А? Правильно - 01010101. Смотрим на лапы - 00000000. Убираем "ld r16,x+". На порту A - 01010101. Что я делаю неправильно? 2 камня, с L и без L Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ObitJr 0 19 января, 2006 Опубликовано 19 января, 2006 · Жалоба Бинарники смотрели ? Может криво компилятор генерит... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Rst7 5 19 января, 2006 Опубликовано 19 января, 2006 · Жалоба Бинарники смотрели ? Может криво компилятор генерит... Грузил в AVRStudio, смотрел на дизасм, трассировал, сравнивал код с даташитом. Все правильно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
prottoss 0 19 января, 2006 Опубликовано 19 января, 2006 · Жалоба Бинарники смотрели ? Может криво компилятор генерит... Грузил в AVRStudio, смотрел на дизасм, трассировал, сравнивал код с даташитом. Все правильно. А если пойти другим путем, тестовый Ваш код запустить на другом камне, вернее другого типа - тини13,14, 15 или любом другом тини? Какие там будут результаты? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться