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

 
 
 
Reply to this topicStart new topic
> Запись в DDR2, NIOS II
x66
сообщение Mar 3 2015, 09:17
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 65
Регистрация: 7-05-10
Пользователь №: 57 122



Написал простенькую прогу по записи данных в ОЗУ.
int main()
{
unsigned long *data_inp;
unsigned long *ddr_addr;
data_inp=(unsigned long*)0x4030000;
ddr_addr=(unsigned long*)0x2000003;
while (1)
{
*ddr_addr=*data_inp;
iprintf("input %08x %03i\n", data_inp, *data_inp);
iprintf("ddr %08x %04i\n", ddr_addr, *ddr_addr );
ddr_addr++;
}
}

Результаты в консоли
input 04030000 255
ddr 02000003 0255
input 04030000 255
ddr 02000007 0255
...
input 04030000 255
ddr 02000203 0255
input 04030000 255
ddr 02000207 281018391
input 04030000 255
ddr 0200020b -524288489
...

в начале пишет нормально в ОЗУ, а потом после адреса 02000203 начинает писать всякую ерунду. Что надо прописать в проге, чтобы нормально происходила дальше запись?

Сообщение отредактировал x66 - Mar 3 2015, 10:37
Go to the top of the page
 
+Quote Post
doom13
сообщение Mar 3 2015, 10:22
Сообщение #2


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

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Цитата(x66 @ Mar 3 2015, 12:17) *

Что-то результат работы вообще не соответствует приведённому коду, где у Вас там инкремент указателя? Как оно работает если указатель не изменяется? Должно писать одни и те же данные по одному адресу.
Go to the top of the page
 
+Quote Post
x66
сообщение Mar 3 2015, 10:30
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 65
Регистрация: 7-05-10
Пользователь №: 57 122



Цитата(doom13 @ Mar 3 2015, 13:22) *
Что-то результат работы вообще не соответствует приведённому коду, где у Вас там инкремент указателя? Как оно работает если указатель не изменяется? Должно писать одни и те же данные по одному адресу.


При инкременте адреса увеличиваются не на 1, а на 4 (может и на другое число увеличиваться в зависимости от типа данных). Вот в консоли ddr 02000003 0255; ddr 02000007 0255 ..., первое число это адрес, а второе это содержимое по адресу.

Сообщение отредактировал x66 - Mar 3 2015, 10:30
Go to the top of the page
 
+Quote Post
doom13
сообщение Mar 3 2015, 10:34
Сообщение #4


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

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Цитата(x66 @ Mar 3 2015, 13:30) *
При инкременте адреса увеличиваются не на 1, а на 4 (может и на другое число увеличиваться в зависимости от типа данных). Вот в консоли ddr 02000003 0255; ddr 02000007 0255 ..., первое число это адрес, а второе это содержимое по адресу.

А где инкремент адреса в коде:
Цитата
Код
int main()
{
      unsigned long *data_inp;
      unsigned long *ddr_addr;

      data_inp=(unsigned long*)0x4030000;
      ddr_addr=(unsigned long*)0x2000003;

      while (1)
      {
             *ddr_addr=*data_inp;
             iprintf("input %08x %03i\n", data_inp, *data_inp);
             printf("ddr %08x %04i\n", ddr_addr, *ddr_addr );
      }
}

???
Go to the top of the page
 
+Quote Post
x66
сообщение Mar 3 2015, 10:37
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 65
Регистрация: 7-05-10
Пользователь №: 57 122



Цитата(doom13 @ Mar 3 2015, 13:34) *
А где инкремент адреса в коде:

???


Извиняюсь, подчищал код от других записей случайно удалил, подправил код в 1 сообщени. Инкремент делаю ddr_addr++;

Сообщение отредактировал x66 - Mar 3 2015, 10:38
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Mar 3 2015, 10:50
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



ну остается узнать, вы точно по DDR идете а не по внутреннему раму с зациклом адресов?
Go to the top of the page
 
+Quote Post
x66
сообщение Mar 3 2015, 10:52
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 65
Регистрация: 7-05-10
Пользователь №: 57 122



Цитата(Golikov A. @ Mar 3 2015, 13:50) *
ну остается узнать, вы точно по DDR идете а не по внутреннему раму с зациклом адресов?


в QSYS адреса DDR выставлены от 0x2000000 до 0x3ffffff.

#define ALTMEMDDR_0_BASE 0x2000000
#define ALTMEMDDR_0_SPAN 33554432

Сообщение отредактировал x66 - Mar 3 2015, 10:57
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 16:32
Рейтинг@Mail.ru


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