Поиск по сайту:

 


По базе:  

микроэлектроника, микросхема, микроконтроллер, память, msp430, MSP430, Atmel, Maxim, LCD, hd44780, t6963, sed1335, SED1335, mega128, avr, mega128  
  Главная страница > Обзоры по типам > Микроконтроллеры > MAXQ

реклама

 




Мероприятия:




Доступ к памяти данных

Доступ к памяти данных осуществляется через регистры указателя данных DP[0] и DP[1] или указатель кадра ВР[Offs]. Как только данные в одном из этих регистров устанавливаются, указанные данные могут быть считаны или записаны в качестве источников или получателей при помощи мнемоник @DP[0], @DP[1] или @BP [OFFS].

    move    DP[0], #0000h   ; установка указателя на позицию 0000h
    move    A[0], @DP[0]    ; считывание из памяти данных
    move    @DP[0], #55h    ; запись в память данных

Оба указателя данных после считывания или перед записью могут быть увеличены или уменьшены при помощи следующего синтаксиса.

    move    A[0], @DP[0]++  ; увеличение DP[0] после считывания
    move    @++DP[0], A[1]  ; увеличение DP[0] перед записью
    move    A[5], @DP[1]--  ; уменьшение DP[1] после считывания
    move    @--DP[1], #00h  ; уменьшение DP[1] перед записью

Указатель кадра (ВР[OFFS]) фактически составлен из основного указателя (ВР) и смещения основного указателя (OFFS). Для указателя кадра регистр смещения (OFFS) используется в режиме автоматического увеличения или уменьшения. Основной указатель (ВР) не изменяется при увеличении или уменьшении указателя кадра. Подобно указателям DP[n], регистр OFFS после чтения или перед записью может быть увеличен или уменьшен.

    move    A[0], @BP[OFFS--]   ; уменьшение OFFS после считывания
    move    @BP[++OFFS], A[1]   ; увеличение OFFS перед записью

Все три указателя данных поддерживают побайтный и пословный режимы доступа к памяти. Для выбора режима доступа каждый указатель данных имеет свой собственный бит управления (WBSn). Эти три бита регистра (WBS2, который управляет режимом выбора регистра смещения [Offs]; WBS1, который управляет режимом выбора регистра DP[1]; и WBS0, который управляет режимом выбора регистра DP[0]), постоянно находится регистре управления указателем данных (Data Pointer Control - DPC). Когда служебный бит WBSn установлен в единицу, то соответствующий указатель работается в режиме пословного доступа. Когда бит WBSn сброшен в ноль, то указатель работается в режиме побайтного доступа. Пословный режим доступа позволяет обращаться к 64К слов памяти данных, а побайтный режим доступа позволяет обращаться к 64КБ памяти данных.

Каждый указатель данных (DP[n]) и основной регистр указателя кадра (ВР) фактически реализован в виде 17- битного регистра. Регистр смещения указателя кадра (OFFS) реализован в вид 9- битного регистра. Бит WBSn для соответствующего указателя определяет, используются ли старшие 16 бит (16:1) указателя, как это имеет место в пословном режиме (WBSn = 1), или младшие 16 бит (15:0), как это имеет место в побайтовом режиме (WBSn = 0). Бит WBS2 определяет, используются ли старшие 8 бит (8:1), как это имеет место при WBS2 = 1, или младшие 8 бит (7:0), как это имеет место при WBS2 = 0. Все регистры указателя данных считываются, записываются и автоматически увеличиваются/уменьшаются с учетом установленного соответствующего бита WBSn. Увеличение/уменьшение затрагивают только те биты, которые используются в конкретном режиме. Изменение режима доступа не изменяет содержимое указателя данных. Поэтому, важно поддержать последовательность значения адреса указателя данных в пределах данного режима доступа.

    move    DPC, #0             ; DP[0] в режиме побайтового доступа
    move    DP[0], #2345h       ; DP[0]=2345h (побайтовый режим)
                                ; загружаются биты 15:0
    move    DPC, #4             ; DP[0] в режиме пословного доступа
    move    DP[0], #2345h       ; DP[0]=2345h (пословный доступ)
                                ; загружаются биты 16:1
    move    DPC, #0             ; DP[0] в режиме побайтового доступа
    move    GR, DP[0]           ; GR = 468Bh (рассматриваются биты 15:0)

Эти три указателя для чтения и записи используют один и тот же порт памяти данных и таким образом, пользователь должен перед использованием сознательно активировать необходимый указатель. Это может быть сделано явно путем выбора битов указателя данных (SDPS1:0; DPC.1:0) или неявно, записывая DP[n], ВР или OFFS регистры, как это показано ниже. Любая косвенная операция записи памяти, используя указатель данных установит биты SDPS, активируя таким образом указатель записи как указатель активного источника.

   move    DPC, #2           ; (явно) выбор FP в качестве указателя
   move    DP[1], DP[1]      ; (явно) выбор DP[1]; установка SDPS1:0=01b
   move    OFFS, src         ; (явно) выбор FP; установка SDPS1=1
   move    @DP[0], src       ; (явно) выбор DP[0]; установка SDPS1:0=00b

После того, как был осуществлен выбор указателя, он останется в силе до тех пор, пока:

  • биты выбора указателя данных источника не будут изменены явно или неявно, как это было описано выше
  • память, к которой обращается указатель данных, не будет сделана доступной для использования в качестве памяти программы
  • не будет произведена операция записи, использующая другой указатель данных.
    move    DP[1], DP[1]       ; выбор DP[1] в качестве активного указателя
    move    dst, @DP[1]        ; считывание данных указателя
    move    @DP[1], src        ; запись, использующая указатель данных
                               ; DP[0] затребован
    move    DP[0], DP[0]       ; выбор DP[0] в качестве активного указателя

Для упрощения операций увеличения/уменьшения указателя данных без использования регистра данных, был введен виртуальный получатель NUL, которому присвоен адрес в системном модуле, равный 6, и индекс, равный 7. Ниже приведены команды, позволяющие автоматически увеличить/уменьшить указатель данных без изменения содержимого любого другого регистра:

   move     NUL, @DP[0]++       ; увеличение DP[0]
   move     NUL, @DP[0]--       ; уменьшение DP[0]

С указателем данных недопустимы приведенные ниже операции:

    move    @++DP[1], @DP[1]++
    move    @BP[++Offs], @BP[Offs++]
    move    @--DP[0], @DP[0]--
    move    @--DP[1], @DP[1]--
    move    @BP[--Offs], @BP[Offs--]
    move    @++DP[0], @DP[0]--
    move    @++DP[1], @DP[1]--
    move    @BP[++Offs], @BP[Offs--]
    move    @BP[++Offs], @BP[Offs--]
    move    @--DP[0], @DP[0]++
    move    @--DP[1], @DP[1]++
    move    @BP[--Offs], @BP[Offs++]
    move    @DP[0], @DP[0]++
    move    @DP[1], @DP[1]++
    move    @BP[Offs], @BP[Offs++]
    move    @DP[0], @DP[0]--
    move    @DP[1], @DP[1]--
    move    @BP[Offs], @BP[Offs--]
    move    DP[0], @DP[0]++
    move    DP[0], @DP[0]--
    move    DP[1], @DP[1]++
    move    DP[1], @DP[1]--
    move    Offs, @BP[Offs--]
    move    Offs, @BP[Offs++]


<-- Предыдущая страница Оглавление Следующая страница -->





 
Впервые? | Реклама на сайте | О проекте | Карта портала
тел. редакции: +7 (995) 900 6254. e-mail:info@eust.ru
©1998-2023 Рынок Микроэлектроники