В HTML      В PDF
микроэлектроника, микросхема, транзистор, диод, микроконтроллер, память, msp430, Atmel, Maxim, LCD, hd44780, t6963, sed1335, avr, mega128
Предприятия Компоненты Документация Применения Статьи Новости

 
Пересюхтюмя


13-я Международная выставка электронных компонентов и комплектующих для электронной промышленности





Выставка Передовые Технологии Автоматизации





Главная > Обзоры по типам > Микроконтроллеры > ARM > Система команд
Пересюхтюмя


13-я Международная выставка электронных компонентов и комплектующих для электронной промышленности





Выставка Передовые Технологии Автоматизации


Команды обмена данными с сопроцессором (LDC,STC)

Эти команды будут выполнены, если условие истинно. Все различные условия их выполнения перечислены в таблице 6. Машинный код обеих команд приведен на рис.35.

Команды обмена данными с сопроцессором
Рис. 35. Команды обмена данными с сопроцессором

Команды этого класса используются для чтения (LDC) или записи (STC) регистров сопроцессоров непосредственно из/в память. Ядро ARM7TDMI передает сопроцессору адрес ячейки памяти, а сопроцессор в свою очередь возвращает ядру данные и их количество в словах.

Поля сопроцессора

Поле CP# используется для идентификации того сопроцессора, который должен передать или принять данные, при этом команду выполнит только тот сопроцессор, номер которого совпадает с номером в поле CP#.

Поле CRd и бит N содержат информацию, которая может по-разному интерпретироваться различными сопроцессорами. Но регистр CRd всегда выполняет роль регистра, который должен быть передан (или первый регистр из списка при блочной передаче), а бит N определяет длину передачи: при N=0 обмен производиться только с одним регистром (CRd), при N=1 - со всеми регистрами (для переключения контекста задач).

Режимы адресации

ARM7TDMI отвечает за предоставление адреса, используемого системой памяти для передачи, и режимы ее адресации, которые позволяют разложить длинную передачу на серию команд однократной передачи данных. Необходимо отметить, что поле смещения - это 8-битная константа, определяющая смещение кратно одному слову для обмена данными с сопроцессором, но в самих командах передачи она фактически имеет 12 битную ширину и определяет смещение кратно одному байту.

Во время выполнения команды содержимое поля смещения сдвигается влево на 2 бита (умножить на 4) и потом либо складывается (U=1) с содержимым базового регистра (Rn), либо вычитается из него (U=0); эти действия могут быть выполнены либо до непосредственно самой передачи (P=1), либо после нее (P=0). Модифицированное значение базового регистра либо может быть перезаписано обратно в него же (W=1), либо сохранить свое прежнее значения до выполнения команды. Кроме того, что команды SDC и STC требуют явного указания значения бита W в отличии от команд LDR и STR, в которых всегда происходит модификация базового регистра (W=1) при пост-индексной адресации.

Содержимое базового регистра, к которому уже добавлено (вычтено) смещение в команде пред-индексной адресации, используется как адрес первого слова для передачи. Второе слово (если передается более чем одно слово) буде записано/прочитано по адресу на одно слово больше (4 байта), чем адрес первого слова, и для каждого последующего слова адрес передачи будет инкрементирован на 4 байта.

Выравнивание адреса

Базовый адрес должен быть выровнен по границе одного слова (4 байта). Однако младшие 2 бита адреса A[1:0] могут использоваться системой управления памятью, например, для эмуляции передачи слова выполняя последовательность из четырех байтовых (8-битная адресация) или двух полусловарных (16-битная адресация) выборок.

Использование регистра R15

Если регистра Rn - это регистр R15, то содержимым Rn будет адрес самой команды плюс 8 байт. При этом бит перезаписи в команде должен быть сброшен (W=0).

Прерывания во время передачи данных (data aborts)

Если адрес, используемый в команде SWP, недоступен для системы управления памятью, то диспетчер памяти может сообщить об этом посредством установки сигнала ABORT в активное высокое состояние. Если W=1, то содержимое базового регистра уже успеет измениться, но состояние процессора будет сохранено. На сам сопроцессор все же возлагается часть забот для возможности успешного повтора прерванной команды после того, как причина прерывания будет выявлена и устранена.

Число машинных тактов

Команда LDC и STC выполняются за (n-1)S + 2N + bl, где n - число передаваемых слов, b - число машинных тактов, необходимых для выполнения пустых тактов сопроцессора, а S, N и I зависят от типа машинных тактов.

Синтаксис в ассемблере

<LDC|STC>{cond}{L} p#,cd,<Адрес>

где:

{cond}: двухсимвольная мнемоника условия выполнения команды (см. табл. 6);
LDC: загрузить из памяти и отправить в сопроцессор;
STC: загрузить из сопроцессор и записать в память;
{L}: определяет необходимость передачи более одного слова (N=1);
p#: номер сопроцессора, которому адресована команда;
cd: выражение, которое определяет номера регистра сопроцессора для поля CRd;
<Адрес>: возможны следующие варианты:
  1. Адрес вычисляется в процессе компиляции согласно выражению:

    <выражение>

    Ассемблер попытается выполнить команду, используя содержимое PC в качестве базового адреса, а выражение - в качестве непосредственного смещения в виде константы. В этом случае этот адрес является прединдексным относительно регистра PC. Если вычисленный адрес выходит за допустимые пределы, то будет сгенерирована ошибка.

  2. Пред-индексная адресация:
    [Rn] - смещение от нуля
    [Rn,<#выражение>]{!}
    <выражение> - смещение в байтах
  3. Пост-индексная адресация:

    [Rn],<#выражение>,

    где

    <выражение> - смещение в байтах

    {!}: разрешить запись вычисленного адреса обратно в базовый регистр (устанавливает в команде в единицу бит W);

    Rn: выражение, которое определяет номер регистра общего назначения.

Примечание: если Rn = R15, то ассемблер вычтет 8 из смещения, это необходимо для правильной работы конвейера команд ARM7TDMI.

Примеры

LDC     p1,c2,table      ; Загрузить регистр с2 сопроцессора #1 из ячейки 
                         ; памяти по адресу "table", 
                         ; используя адрес, относительно содержимого PC.
STCEQL  p2,c3,[R5,#24]!	 ; Условно записать содержимое c3 сопроцессора #2
                         ; в ячейку памяти по адресу R5+24.
                         ; После чего записать в R5 значение R5+24
                         ; и применить длинную передачу 
                         ; (возможно, блочную запись данных).

Примечание: хотя смещение адреса и выражается в байтах, но смещение в самой команде все же выражается в словах. Ассемблер автоматически исправит это поле.



<---- Вернуться к Системе команд --->