|
|
  |
Побайтовое обращение к памяти., NiosII |
|
|
|
Nov 30 2008, 04:11
|

Гуру
     
Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988

|
Цитата(slog @ Nov 30 2008, 01:44)  А КАК ПРОЧИТАТЬ 0x03020100 ? должны работать и IORD_32DIRECT(SRAM_BASE, i), и IORD(SRAM_BASE, i). они отличаются тем, что в первом случае смещение измеряется в байтах, а во втором в словах. т.е. будет либо IORD_32DIRECT(SRAM_BASE, 0); IORD_32DIRECT(SRAM_BASE, 4); либо IORD(SRAM_BASE, 0); IORD(SRAM_BASE, 1); может запись косячит? выведите IORD_8DIRECT(SRAM_BASE, i); плата своя или кит? сигналы правильно подключены? про IORD/IOWR посмотрите в <io.h>
|
|
|
|
|
Nov 30 2008, 09:31
|

Гуру
     
Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988

|
Цитата(slog @ Nov 30 2008, 14:10)  Плата готовая, рабочая, проект для FPGA мой, теоретически может быть косяк с назначением адресов или byte enable. Только никак не пойму где.
IORD_8DIRECT(BASE,i) возвращает правильный байт. Т.е. по адресу 0 =0, адрес 1 =1 и т.д. Косяк с внешним ОЗУ точно есть, потому что с ONCHIP_MEM памятью все нормально. IORD_32DIRECT возвращает 0x03020100 0x03020100 0x03020100 0x03020100 0x07060504
IORD 0x03020100 0x07060504
т.е. вроде так и должно быть. тоже про byte enable подумал. стоит посмотреть SignalTap-ом. попробуйте еще так: int* x __attribute__ ((aligned (1))); int y; x=(BASE+i); y=*x; по идее, это чтение 4 байт начиная с произвольного адреса.
|
|
|
|
|
Nov 30 2008, 10:06
|
Частый гость
 
Группа: Свой
Сообщений: 168
Регистрация: 6-07-04
Пользователь №: 266

|
У NIOS-a есть определенная ерунда с чтением. Конкретно в вашем случае все вроде должно работать правильно, если только вы не подключили свою RAM к авалону как 8-битный слейв. Насчет заморочек с чтением посмотрите мой топик на niosforum.com, может что-то прояснит в вашем случае. Ambiguous ldbuio instruction, how to read 8 bit peripheral?Digitally yours, cms
|
|
|
|
|
  |
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0
|
|
|