AndreyVN 0 23 мая, 2012 Опубликовано 23 мая, 2012 · Жалоба Всем привет! Подключил к ATmega64 внешнюю память, как только выставляю флажок доступности внешней SRAM (MCUCR=80h) программа зависает. Никаких обращений к внешней памяти нет. Компилятор не знает о наличии внешней памяти. Предполагал обращаться к внешней памяти вот так: adr_RAM = (char *) 0x1100; #asm lds R26, _adr_RAM; Загрузить адрес куда производится запись данных lds R27, _adr_RAM+1; Содержимое переменной в регистр X ..... st X+,r1;сохранить содержимое r1 по адресу X с постинкрементом #endasm Код работы с внешней памяти пока закомментировал. Схема внизу, все стробы соответствуют описанию, ALE начинает плясать, все биты адреса тоже пляшут, никто не зашунтирован. Регистр-защелку (74HCT573) проверял, байт защелкивает при ALE=0, стробы RD,WR (BS62LV256) висят в "1". То есть обращений к внешней памяти нет, выход SRAM находится в высокоомном состоянии. Может, при включении внешней памяти помимо MCUCR=80 надо еще что-то прописать??? Например, чтобы корректно работали шины адреса/данных??? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zombi 0 23 мая, 2012 Опубликовано 23 мая, 2012 · Жалоба Может, при включении внешней памяти помимо MCUCR=80 надо еще что-то прописать??? Например, чтобы корректно работали шины адреса/данных??? MCUCR=0x80 должно быть достаточно. Код работы с внешней памяти пока закомментировал. Схема внизу, все стробы соответствуют описанию, ALE начинает плясать, все биты адреса тоже пляшут, никто не зашунтирован. Не должно плясать если нет обращений к внешней sram! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AndreyVN 0 24 мая, 2012 Опубликовано 24 мая, 2012 · Жалоба Не должно плясать если нет обращений к внешней sram! А как Вам такое удалось?! Вот выдержка из Datasheet (p.28 , подраздел Using the External Memory Interface): When the XMEM interface is enabled, also an internal access will cause activity on address-, data- and ALE ports, but the RD and WR strobes will not toggle during internal access. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zombi 0 24 мая, 2012 Опубликовано 24 мая, 2012 · Жалоба А как Вам такое удалось?! Вот выдержка из Datasheet (p.28 , подраздел Using the External Memory Interface): Сорри, ввёл Вас в заблуждение. Давно когдато смотрел, но видать только RD и WR да и то на меге 8515 и 162. Действительно согласно DS адреса и але должны плясать. А что значит "программа зависает"? и при этом "ALE начинает плясать, все биты адреса тоже пляшут". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AndreyVN 0 25 мая, 2012 Опубликовано 25 мая, 2012 · Жалоба А что значит "программа зависает"? и при этом "ALE начинает плясать, все биты адреса тоже пляшут". Это система сбора данных у которой на борту АЦП, LCD, часики RTC, клавиатура. Интерфейс отлажен без внешней памяти. Как только выставляю MCUCR=80h, LCD, клавиатура перестают работать. Никаких признаков работоспособности программы. Ясно, что проблема аппаратная, видимо, связанная с шиной адреса/данных. Сейчас пишу чисто программную реализацию работы с XRAM через порты, иначе, похоже, не разобраться, что у меня происходит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ILYAUL 0 25 мая, 2012 Опубликовано 25 мая, 2012 · Жалоба Как только выставляю MCUCR=80h, LCD, клавиатура перестают работать. А на каких портах они "сидят"? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Jury093 2 25 мая, 2012 Опубликовано 25 мая, 2012 · Жалоба Никаких обращений к внешней памяти нет. Компилятор не знает о наличии внешней памяти. отложите свою программу в сторону и напишите примитивную прогу на асме (в даташите есть пример). добейтесь ее успешного запуска.. а уж после внедряйте в свой проект работу с расширенной памятью.. в свое время делал поделку на Мега128, для интереса поставил дополнительный чип памяти - все строго по даташиту. заработало сразу и без чудес,, Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AndreyVN 0 25 мая, 2012 Опубликовано 25 мая, 2012 · Жалоба А на каких портах они "сидят"? Схема в первом сообщении. отложите свою программу в сторону и напишите примитивную прогу на асме (в даташите есть пример). добейтесь ее успешного запуска.. А что будет сигнализировать об успешном запуске? Светодиодик? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ILYAUL 0 25 мая, 2012 Опубликовано 25 мая, 2012 · Жалоба Схема в первом сообщении. Кто нибудь увидел , кроме меня, где на схеме подключены LCD и клавиатура? Help! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Jury093 2 25 мая, 2012 Опубликовано 25 мая, 2012 (изменено) · Жалоба А что будет сигнализировать об успешном запуске? Светодиодик? зависит от того, что у вас есть под рукой. светодиод, лампочка, осциллограф.. сначала убедитесь, что железо исправно и работает, а уж потом внедряйте поддержку в свой код, который сейчас выступает лишним сочлением.. в мане на камень есть фрагменты программ на асме и "си" для обращения в расширенную память - они заведомо должны работать.. не заработали - проверяйте железо - попиново и на залипухи заработали - смотрите стартап своей программы и читайте описание компилятора.. если монтаж и чипы исправны, то я бы покопал в сторону ремапинга или потери стека.. Изменено 25 мая, 2012 пользователем Jury093 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zombi 0 26 мая, 2012 Опубликовано 26 мая, 2012 · Жалоба Предполагал обращаться к внешней памяти вот так: adr_RAM = (char *) 0x1100; #asm lds R26, _adr_RAM; Загрузить адрес куда производится запись данных lds R27, _adr_RAM+1; Содержимое переменной в регистр X ..... st X+,r1;сохранить содержимое r1 по адресу X с постинкрементом #endasm На СИ не пишу и не знаю можно ли так "нагло" использовать R26,27? Вы уверены что компилятор не использует их в том месте где добавляется асм код? Я бы добавил PUSH/POP оных. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AndreyVN 0 26 мая, 2012 Опубликовано 26 мая, 2012 · Жалоба На СИ не пишу и не знаю можно ли так "нагло" использовать R26,27? Вы уверены что компилятор не использует их в том месте где добавляется асм код? Я бы добавил PUSH/POP оных. Пишу на разных диалектах "C" около 20 лет, PUSH/POP всех регистров используемых в коде вставки - это "само собой". Сейчас убрал #asm вставку, заменив ее практически тем-же кодом на "C": char *adr_RAM; adr_RAM = (char *) 0x1100; //Начальный адрес внешней RAM *adr_RAM = cx1; //Записать байт во внешнюю RAM cx2 = *adr_RAM; //Прочитать байт из внешней RAM adr_RAM++; //Следующий адрес Проблема с "зависанием" решилась. Сделал процедуру тестирования памяти через программное обращение к портам, и обнаружил, что LCD "сдыхает" при обращении по A14, который оказался подкорочен на Reset LCD. Почему-то чувствую себя дураком. :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться