Цитата(Копейкин @ Dec 5 2012, 19:47)

Выглядеть будет так:
IOWR_16DIRECT( base, reg * 2, val);
где номер регистра reg = 0, 1, 2, 3...n
reg - 16-битный регистр.
Так как адресация процессора всё равно байтовая.
В железе младший адрес адресной шины будет выбран
автоматически, согласно разрядности шины данных.
Поэтому в железе смещение будет на 1.
reg0 - 0x00
reg1 - 0x01
reg2 - 0x02 ...
Спасибо. Работает. Тоесть чтобы записать данные в пользовательский регистр 01 нужно выполнить IOWR_16DIRECT( base, 2, val);
не совсем понятны рассуждения.
Команда IOWR_16DIRECT( base, reg * 2, val); пишет данные
val в 16 битный регистр по базовому адресу
base со смещением относительно базового адреса на reg * 2
Тоесть если бы в пользовательской логике был регистр 8 разрядный то смещение нужно было-бы делать reg * 4 и команда должна быть IOWR_8DIRECT( base, 4, val);
. Это верно? Или все же reg + 4, а в предыдущем случае reg + 2?
Сообщение отредактировал Acvarif - Dec 7 2012, 07:57