реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> ATmega64 с внешней SRAM, BS62LV256
AndreyVN
сообщение May 23 2012, 16:18
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 754
Регистрация: 29-06-06
Из: Volgograd
Пользователь №: 18 458



Всем привет!
Подключил к 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 надо еще что-то прописать???
Например, чтобы корректно работали шины адреса/данных???

Прикрепленное изображение
Go to the top of the page
 
+Quote Post
zombi
сообщение May 23 2012, 16:54
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Цитата(AndreyVN @ May 23 2012, 19:18) *
Может, при включении внешней памяти помимо MCUCR=80 надо еще что-то прописать???
Например, чтобы корректно работали шины адреса/данных???

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

Цитата(AndreyVN @ May 23 2012, 19:18) *
Код работы с внешней памяти пока закомментировал.
Схема внизу, все стробы соответствуют описанию, ALE начинает плясать, все биты адреса тоже пляшут, никто не зашунтирован.

Не должно плясать если нет обращений к внешней sram!
Go to the top of the page
 
+Quote Post
AndreyVN
сообщение May 24 2012, 09:22
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 754
Регистрация: 29-06-06
Из: Volgograd
Пользователь №: 18 458



Цитата(zombi @ May 23 2012, 20:54) *
Не должно плясать если нет обращений к внешней 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.
Go to the top of the page
 
+Quote Post
zombi
сообщение May 24 2012, 21:42
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Цитата(AndreyVN @ May 24 2012, 12:22) *
А как Вам такое удалось?!
Вот выдержка из Datasheet (p.28 , подраздел Using the External Memory Interface):

Сорри, ввёл Вас в заблуждение.
Давно когдато смотрел, но видать только RD и WR да и то на меге 8515 и 162.
Действительно согласно DS адреса и але должны плясать.

А что значит "программа зависает"? и при этом "ALE начинает плясать, все биты адреса тоже пляшут".
Go to the top of the page
 
+Quote Post
AndreyVN
сообщение May 25 2012, 04:18
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 754
Регистрация: 29-06-06
Из: Volgograd
Пользователь №: 18 458



Цитата(zombi @ May 25 2012, 01:42) *
А что значит "программа зависает"? и при этом "ALE начинает плясать, все биты адреса тоже пляшут".


Это система сбора данных у которой на борту АЦП, LCD, часики RTC, клавиатура. Интерфейс отлажен без внешней памяти.
Как только выставляю MCUCR=80h, LCD, клавиатура перестают работать. Никаких признаков работоспособности программы.
Ясно, что проблема аппаратная, видимо, связанная с шиной адреса/данных.
Сейчас пишу чисто программную реализацию работы с XRAM через порты, иначе, похоже, не разобраться,
что у меня происходит.
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение May 25 2012, 06:30
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Цитата(AndreyVN @ May 25 2012, 08:18) *
Как только выставляю MCUCR=80h, LCD, клавиатура перестают работать.

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


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
Jury093
сообщение May 25 2012, 07:26
Сообщение #7


Знающий
****

Группа: Участник
Сообщений: 959
Регистрация: 11-01-06
Из: Санкт-Петербург
Пользователь №: 13 050



Цитата(AndreyVN @ May 23 2012, 19:18) *
Никаких обращений к внешней памяти нет. Компилятор не знает о наличии внешней памяти.

отложите свою программу в сторону и напишите примитивную прогу на асме (в даташите есть пример). добейтесь ее успешного запуска.. а уж после внедряйте в свой проект работу с расширенной памятью..
в свое время делал поделку на Мега128, для интереса поставил дополнительный чип памяти - все строго по даташиту. заработало сразу и без чудес,,
Go to the top of the page
 
+Quote Post
AndreyVN
сообщение May 25 2012, 09:03
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 754
Регистрация: 29-06-06
Из: Volgograd
Пользователь №: 18 458



Цитата(ILYAUL @ May 25 2012, 10:30) *
А на каких портах они "сидят"?

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

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

А что будет сигнализировать об успешном запуске? Светодиодик?
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение May 25 2012, 10:35
Сообщение #9


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Цитата(AndreyVN @ May 25 2012, 13:03) *
Схема в первом сообщении.

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


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
Jury093
сообщение May 25 2012, 14:05
Сообщение #10


Знающий
****

Группа: Участник
Сообщений: 959
Регистрация: 11-01-06
Из: Санкт-Петербург
Пользователь №: 13 050



Цитата(AndreyVN @ May 25 2012, 13:03) *
А что будет сигнализировать об успешном запуске? Светодиодик?

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

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

Сообщение отредактировал Jury093 - May 25 2012, 14:09
Go to the top of the page
 
+Quote Post
zombi
сообщение May 26 2012, 18:38
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Цитата(AndreyVN @ May 23 2012, 19:18) *
Предполагал обращаться к внешней памяти вот так:
Код
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 оных.
Go to the top of the page
 
+Quote Post
AndreyVN
сообщение May 26 2012, 19:38
Сообщение #12


Знающий
****

Группа: Свой
Сообщений: 754
Регистрация: 29-06-06
Из: Volgograd
Пользователь №: 18 458



Цитата(zombi @ May 26 2012, 21:38) *
На СИ не пишу и не знаю можно ли так "нагло" использовать 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.
Почему-то чувствую себя дураком. sad.gif
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th June 2025 - 13:37
Рейтинг@Mail.ru


Страница сгенерированна за 0.01475 секунд с 7
ELECTRONIX ©2004-2016