CodeVision AVR работа с внешней памятью

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 198
Зарегистрирован: Вт ноя 07, 2006 00:09:58
Откуда: Москва

Сообщение Gurvinok »

Доброго время суток.
Поможите кто может.
Как в CodeVision AVR записывать во внешнюю память и читать по адресу ячейки?
Требуется память на 1024 байт. Чтение должно проходить от первой ячейки (для меги8515 это адрес 0х260) до последней по очереди.
В хелпе нашел только вот это:

/* the integer variable "a" is stored in RAM at address 80h */
int a @0x80;

Все здорово, но немогу же я создать 1024 переменных.
Как создать что-то вроде массива?
Я не волшебник, я только лечусь
Контактная информация:
Реклама
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

Сообщение uk8amk »

Ну номер элемента массива и физический адрес ячейки - это очень разные вещи. Я так понял что вы используете чип Atmega8515, но вы не уточнили каким образом хотите организовать доступ к памяти. Этот контроллер имеет возможность подключения до 64КБ SRAM, причем при соотвтетствующей настройке обращение к внешней ОЗУ происходит на аппаратном уровне(за 4 такта) когда вы обращаетесь за границы внутренней ОЗУ. В этом случае просто объявляете массив нужной размерности и в нужный момент контроллер сам обратится куда надо.
Но ничто не мешает обращаться к внешней ОЗУ чисто программно:
1.подали на память сигнал разрешения чтения
2.вывели в порт адрес ячейки
3.считали содержимое ЯП
Тоже самое при записи.
Реклама
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1287
Зарегистрирован: Пн окт 13, 2008 11:45:54
Откуда: РФ, Крым, г.Бахчисарай

Сообщение Danko »

Gurvinok писал(а):...записывать во внешнюю память...
Если совсем внешнюю, то наверное самим близким для Вас будет что-то типа AT24C08.
Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений.
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
Контактная информация:
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 198
Зарегистрирован: Вт ноя 07, 2006 00:09:58
Откуда: Москва

Сообщение Gurvinok »

Именно так и подключена память. При попытке создать массив с числом ячеек больше чем память на кристалле, КодВижн жалуется и не дает выхода к ячейкам памяти. Попробую с двумя защелками программно. Мне нужно только читать память и все. Так что по скорости вполне хватит. Но все равно спасибо за ответ.
Я не волшебник, я только лечусь
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

Сообщение uk8amk »

Интересный случай. Вообще можно поколдовать с инструкциями чтения из SRAM LD/LDD/LDS и загрузки ST/STD/STS, но я даже не знаю как связать в пределах одной функции какой-то регистр с временной переменной. Может кто подскажет как такое провернуть?

Одного чтения наверно будет мало, т.к. перед тем как читать туда надо что-то записать.
Возможно у вас в настройках проекта что-то неправильно выставлено. А какая версия компилятора?
Программно достаточно и одной защелки, посмотрите стандартную схему подключения чипа SRAM к контроллеру.
Реклама
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 198
Зарегистрирован: Вт ноя 07, 2006 00:09:58
Откуда: Москва

Сообщение Gurvinok »

Я как раз начал по стандартной схеме с одной защелкой. Версия компилятора 2.04.4а. Я читал в хелпе. Можно только адресовать глобальные переменные. А с проектом все хорошо. Просто данные во внешнюю ОЗУ другой контроллер скидывает, а 8515-й только считывает.
Я не волшебник, я только лечусь
Контактная информация:
Реклама
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

Сообщение uk8amk »

В таком случае остается только программная реализация алгоритма чтения данных. Т.к. при аппаратном подключении вы не будете знать в каком состоянии находятся порты передающего и принимающего контроллеров в моменты простоя. А это уже чревато горелыми портами. Поставте со стороны каждого контроллера шинные формирователи с третьем состоянием и управляйте направлением передачи с приемного контроллера.

Про глобальные переменные я тоже подумал, но компилятор их размещает как попало не только в регистровой области а еще и в области SRAM. У ассемблерных команд аргументом должна быть именно ЯП в регистровом файле.
Прорезались зубы
Сообщения: 231
Зарегистрирован: Пт ноя 16, 2007 13:52:44
Откуда: Рига, Латвия

Сообщение Pe3ucTop »

Не знаю именно про CodeVision, но для проэкта должны быть настроики - присутствия внешней памяти. И тогда массив вам дастся.. :) Во вторых - для вашего случая советую посмотреть определиние типа:
volatile int x[...] @...
И ещё, флаги Атмеги тоже фолжны быть настроены на присутствие внешней памяти, что наверное напрямую зависит от настроек проэкта..
А, и ещё, призабыл как определялось, но отличия возможны при определении переменных (масива) : т.е. адресация или до байта (256) или слова (65536), но это надо проверять.
Поглядел в мануале - для проэкта должна определятся внешняя память !
Вложения
CVavr.gif
(23.63 КБ) 476 скачиваний
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1287
Зарегистрирован: Пн окт 13, 2008 11:45:54
Откуда: РФ, Крым, г.Бахчисарай

Сообщение Danko »

Я не зря спрашивал о типе памяти. Посмотрите на даташник (стр.25) как у меги8515 организован доступ к внешней памяти. А0-А15 шина адреса при этом А0-А7 это (более правильно AD0-AD7) шина данных сосмещена с шиной адреса (мультиплексирование) т.е. ни о какой последовательной памяти речи быть не может.

Для организации работы с внешней последовательной памятью нужно отправлять адрес ячейки и данные для записи (в упрощенном виде) и никакого массива!!!
Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений.
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
Контактная информация:
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 198
Зарегистрирован: Вт ноя 07, 2006 00:09:58
Откуда: Москва

Сообщение Gurvinok »

Мне массив и не нужен. Я читал мануал и память подключена как положено. Мне нужно жестко по конкретному адресу обращаться во внешней ОЗУ. Вот товарищ Pe3ucTop очень хорошую идейку подбросил. Главное чтоб этот массив располагался именно во внешней ОЗУ. Будем пытаться, а так подвиги есть с двумя защелками и пару функций чтения записи.
Я не волшебник, я только лечусь
Контактная информация:
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 198
Зарегистрирован: Вт ноя 07, 2006 00:09:58
Откуда: Москва

Сообщение Gurvinok »

Кстати вопрос правда не по теме. Ктонить знает как установить АВР студио любой версии. Сколько не бился, начиная с 3 по 4.18 версию, почему-то по среди установки вываливает ошибку и ту-ту. Прям засада какая-то.
Я не волшебник, я только лечусь
Контактная информация:
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1287
Зарегистрирован: Пн окт 13, 2008 11:45:54
Откуда: РФ, Крым, г.Бахчисарай

Сообщение Danko »

Danko писал(а):... для Вас будет что-то типа AT24C08.
Gurvinok писал(а):Именно так и подключена память...
Danko писал(а):... т.е. ни о какой последовательной памяти речи быть не может.
Gurvinok писал(а):Я читал мануал и память подключена как положено.
Так все-таки какая у Вас память? И как её звать?
Первое, что привлекает в программировании, объяснить просто: ты говоришь компьютеру что то сделать, и он это делает. Безошибочно. Всегда. Без возражений.
---------------------
Линус Торвальдс. "Just for fun. Рассказ нечаянного революционера"
Контактная информация:
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 198
Зарегистрирован: Вт ноя 07, 2006 00:09:58
Откуда: Москва

Сообщение Gurvinok »

:))) Разговор слепого с немым)) У меня параллельная память КР537РУ10 2Кх8 подключенная с регистром защелкой 74НС573.
Я не волшебник, я только лечусь
Контактная информация:
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

Сообщение uk8amk »

Gurvinok писал(а): Мне нужно жестко по конкретному адресу обращаться во внешней ОЗУ. .
Вот наковырял в хелпе для первой версии, не знаю насколько это актуально для второй(а она стоит на другом винте и надо долго перезагружаться).

The prototypes for these functions are placed in the file mem.h, located in the ..\INC subdirectory. This file must be #include -ed before using the functions.

void pokeb(unsigned int addr, unsigned char data)


this function writes the byte data to SRAM at address addr.


void pokew(unsigned int addr, unsigned int data)

this function writes the word data to SRAM at address addr.
The LSB is written at address addr and the MSB is written at address addr+1.


unsigned char peekb(unsigned int addr)

this function reads a byte located in SRAM at address addr.

unsigned int peekw (unsigned int addr)

this function reads a word located in SRAM at address addr.
The LSB is read from address addr and the MSB is read from address addr+1.
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 198
Зарегистрирован: Вт ноя 07, 2006 00:09:58
Откуда: Москва

Сообщение Gurvinok »

Уважаемый uk8amk! Благодарю за помощь! Ща попробую, а то тут с портами чет не получается.
Я не волшебник, я только лечусь
Контактная информация:
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»