Перейти к содержанию
    

ATmega64 с внешней SRAM

Всем привет!

Подключил к 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 надо еще что-то прописать???

Например, чтобы корректно работали шины адреса/данных???

 

post-18458-1337789607_thumb.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Может, при включении внешней памяти помимо MCUCR=80 надо еще что-то прописать???

Например, чтобы корректно работали шины адреса/данных???

MCUCR=0x80 должно быть достаточно.

 

Код работы с внешней памяти пока закомментировал.

Схема внизу, все стробы соответствуют описанию, ALE начинает плясать, все биты адреса тоже пляшут, никто не зашунтирован.

Не должно плясать если нет обращений к внешней sram!

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не должно плясать если нет обращений к внешней 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.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А как Вам такое удалось?!

Вот выдержка из Datasheet (p.28 , подраздел Using the External Memory Interface):

Сорри, ввёл Вас в заблуждение.

Давно когдато смотрел, но видать только RD и WR да и то на меге 8515 и 162.

Действительно согласно DS адреса и але должны плясать.

 

А что значит "программа зависает"? и при этом "ALE начинает плясать, все биты адреса тоже пляшут".

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А что значит "программа зависает"? и при этом "ALE начинает плясать, все биты адреса тоже пляшут".

 

Это система сбора данных у которой на борту АЦП, LCD, часики RTC, клавиатура. Интерфейс отлажен без внешней памяти.

Как только выставляю MCUCR=80h, LCD, клавиатура перестают работать. Никаких признаков работоспособности программы.

Ясно, что проблема аппаратная, видимо, связанная с шиной адреса/данных.

Сейчас пишу чисто программную реализацию работы с XRAM через порты, иначе, похоже, не разобраться,

что у меня происходит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как только выставляю MCUCR=80h, LCD, клавиатура перестают работать.

А на каких портах они "сидят"?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Никаких обращений к внешней памяти нет. Компилятор не знает о наличии внешней памяти.

отложите свою программу в сторону и напишите примитивную прогу на асме (в даташите есть пример). добейтесь ее успешного запуска.. а уж после внедряйте в свой проект работу с расширенной памятью..

в свое время делал поделку на Мега128, для интереса поставил дополнительный чип памяти - все строго по даташиту. заработало сразу и без чудес,,

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А на каких портах они "сидят"?

Схема в первом сообщении.

 

отложите свою программу в сторону и напишите примитивную прогу на асме (в даташите есть пример). добейтесь ее успешного запуска..

А что будет сигнализировать об успешном запуске? Светодиодик?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Схема в первом сообщении.

Кто нибудь увидел , кроме меня, где на схеме подключены LCD и клавиатура? Help!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А что будет сигнализировать об успешном запуске? Светодиодик?

зависит от того, что у вас есть под рукой. светодиод, лампочка, осциллограф..

сначала убедитесь, что железо исправно и работает, а уж потом внедряйте поддержку в свой код, который сейчас выступает лишним сочлением..

в мане на камень есть фрагменты программ на асме и "си" для обращения в расширенную память - они заведомо должны работать..

не заработали - проверяйте железо - попиново и на залипухи

заработали - смотрите стартап своей программы и читайте описание компилятора..

 

если монтаж и чипы исправны, то я бы покопал в сторону ремапинга или потери стека..

Изменено пользователем Jury093

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Предполагал обращаться к внешней памяти вот так:

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 оных.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На СИ не пишу и не знаю можно ли так "нагло" использовать 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.

Почему-то чувствую себя дураком. :(

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...