[an error occurred while processing this directive] [an error occurred while processing this directive]
Читать что байт, что слово - один такт, поэтому читают сразу 2 байта.
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
[an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive]

Отправлено BLACKEAGLE 14 марта 2002 г. 00:57
В ответ на: Подключение 16 bit MCU к Flash памяти тоже 16 разрядной ??? отправлено Kettle-man 13 марта 2002 г. 23:25

Ненужный игнорируют, если была команда чтения байта. А вот с записью так не поступишь - если надо писать в один байт, то что тогда делать с другим? Вот поэтому и делают 2 строба записи (WRL/WRH) и один строб чтения (RD). Выборка (т.е. CE/CS) делается, как и чтение, общей для старшего и младшего байтов, поэтому младший бит адреса не нужен - выбирается сразу слово, содержащее и байт N, и байт N+1.

Здесь кроется весьма неприятное ограничение, заключающееся в необходимости выравнивания 16-битных переменных по байтовым адресам, кратным 2 - если этого не сделать и расположить 16-битную переменную по нечетному байтовому адресу, то первая ее половина окажется в старшем байте слова N, а вторая - в младшем байте слова N+1, и придется делать еще одну выборку (слова N+1). В разных архитектурах это решено по-разному, есть и такие, которые не требуют выравнивания, но в большинстве это необходимо.

Пример:


.org 1000h
var1: .dw 1234h ;Слово по четному адресу
.org 1003h
var2: .dw 5678h ;Слово по нечетному адресу


code:
mov R2,var1 ;= mov R2L,low(var1) и mov R2H,high(var1)
mov R3,var2 ;= mov R3L,high(var2) и mov R3H,low(var2+1)


Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru