Семейство микроконтроллеров MSP430X1XX, руководство пользователя (2004)
.pdf
Раздел III. |
|
|
|
|
|
16-разрядное RISC CPU |
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Рис. 3-4. Использование стека
Рис. 3-5. Последовательность PUSH SP – POP SP
Указатель стека изменяется после выполнения команды PUSH SP.
Указатель стека не изменяется после команды POP SP. Команда POP SP помещает SP1 в указатель стека SP (SP2=SP1).
3.2.3. Регистр статуса (SR)
Регистр статуса (SR/R2), используемый как регистр источника или получателя, может адресоваться в регистровом режиме только с помощью командслов. Прочие комбинации режимов адресации используются для поддержки генератора констант. На рис. 3.6 показаны биты регистра статуса SR.
Рис. 3-6. Биты регистра статуса
Библиотека Компэла |
|
41 |
|
MSP430x1xxFamily
В таблице 3.1 приведено описание битов регистра статуса.
|
|
Таблица 3.1. Описание битов регистра статуса |
|
Бит |
|
Описание |
|
|
|
|
|
|
Бит переполнения. |
||
|
Этот бит устанавливается, если результат арифметической операции имеет пере- |
||
|
полнение в области знаковых переменных. |
||
|
|
|
|
|
ADD(.B), |
Устанавливается, когда: |
|
|
Положительный + Положительный = Отрицательный |
||
V |
ADDC(.B) |
Отрицательный + Отрицательный = Положительный |
|
|
|
в противном случае сбрасывается |
|
|
|
|
|
|
SUB(.B), |
Устанавливается, когда: |
|
|
Положительный – Отрицательный = Отрицательный |
||
|
SUBC(.B), |
||
|
Отрицательный – Положительный = Позитивный |
||
|
CMP(.B) |
||
|
в противном случае сбрасывается |
||
|
|
||
|
|
|
|
SCG1 |
Системный тактовый генератор 1. |
||
Когда этот бит установлен, SMCLK выключен. |
|||
|
|||
|
|
||
|
Системный тактовый генератор 0. |
||
SCG0 |
Когда этот бит установлен, генератор DCO выключен, если DCOCLK не используется |
||
|
для MCLK или SMCLK. |
||
|
|
||
|
Выключение осциллятора. |
||
OSCOFF |
Когда этот бит установлен, осциллятор LFXT1, использующий кристалл, выключен, |
||
|
если LFXT1CLK не используется для MCLK или SMCLK. |
||
|
|
||
CPUOFF |
Выключение ЦПУ. |
||
Когда этот бит установлен, ЦПУ выключено. |
|||
|
|||
|
|
||
|
Общий бит разрешения прерываний. |
||
GIE |
Когда этот бит установлен, маскируемые прерывания разрешены. Когда сброшен, |
||
|
все маскируемые прерывания запрещены. |
||
|
|
||
|
Бит отрицательного результата. |
||
|
Этот бит устанавливается, когда результат операции с байтом или словом отрица- |
||
|
тельный и сбрасывается, когда результат не отрицательный. |
||
N |
Операции со словами: |
||
|
N устанавливается по значению бита 15 результата |
||
|
Операции с байтами: |
||
|
N устанавливается по значению бита 7 результата |
||
|
|
|
|
|
Бит нуля. |
|
|
Z |
Этот бит устанавливается, когда результат операции с байтом или словом равен «0» |
||
|
и очищается, если результат не равен «0». |
||
|
|
|
|
|
Бит переноса. |
|
|
CЭтот бит устанавливается, когда результат операции с байтом или словом имеет перенос и очищается, когда переноса нет.
42 |
|
Библиотека Компэла |
|
Раздел III. |
16-разрядное RISC CPU |
3.2.4. Регистры генератора констант CG1 и CG2
Шесть обычно используемых констант генерируются с помощью регистров R2 и R3 генератора констант, что исключает необходимость использования дополнительного 16-разрядного слова в программном коде. Константы выбираются путем изменения режима адресации (As) регистра-источника, в соответствии с таблицей 3.2.
Таблица 3.2. Значения генераторов констант CG1, CG2
Регистр |
As |
Константа |
Комментарий |
R2 |
00 |
- - - - - |
Регистровый режим |
R2 |
01 |
(0) |
Режим абсолютной (безусловной) адресации |
R2 |
10 |
00004h |
+4, побитовая обработка |
R2 |
11 |
00008h |
+8, побитовая обработка |
R3 |
00 |
00000h |
0, обработка по словам |
|
|
|
|
R3 |
01 |
00001h |
+1 |
|
|
|
|
R3 |
10 |
00002h |
+2, побитовая обработка |
|
|
|
|
R3 |
11 |
0FFFFh |
-1, обработка по словам |
|
|
|
|
Генератор констант обладает следующими преимуществами:
•Не требуются особые команды
•Код не содержит дополнительного слова для шести констант
•Не требуется код (команда) доступа к памяти для получения константы Ассемблер автоматически использует генератор констант, если одна из
шести констант используется как непосредственный исходный операнд. При использовании регистров R2 и R3 в режиме генерации констант, адресация к ним не может быть явной – они действуют только как регистры-источники.
Генератор команд – расширенная система команд
Набор RISС-команд семейства MSP430 состоит только из 27 команд. Однако, генератор констант позволяет поддерживать MSP430-ассемблеру 24 дополнительные эмулированные команды. К примеру, команда с одним операндом:
CLR dst
эмулируется командой с двумя операндами такой же длины:
MOV R3,dst
где #0 замещается ассемблером, а R3 используется в режиме As=00 Команда INC dst замещается командой ADD 0(R3),dst
Библиотека Компэла |
|
43 |
|
MSP430x1xxFamily
3.2.5. Регистры общего назначения R4-R15
Двенадцать регистров с R4 по R15 являются регистрами общего назначения. Все эти регистры могут быть использованы в качестве регистров данных, указателей адресов или индексных значений и доступны с помощью команд работы с байтами или словами, как показано на рис. 3.7.
Рис. 3-7. Операции регистр-байт/байт-регистр
|
Пример операции регистр-байт |
|
Пример операции байт-регистр |
||
|
R5=0A28Fh |
R5=01202Fh |
|||
|
R6=0203h |
R6=0223h |
|||
|
Mem(0203h)=012h |
Mem(0223h)=05Fh |
|||
|
ADD.B |
ADD.B |
|||
|
R5,0(R6) |
@R6,R5 |
|||
|
08Fh |
05Fh |
|||
|
+012h |
+002h |
|||
|
0A1h |
00061h |
|||
|
Mem(0203h)=0A1h |
R5=00061h |
|||
|
C=0, Z=0, N=1 |
C=0, Z=0, N=0 |
|||
|
(младший байт |
|
(адресуемый байт)+(младший байт |
||
|
регистра)+(адресуемый байт) |
|
|
регистра) |
|
|
->(адресуемый байт) |
|
->(младший байт регистра, ноль в |
||
|
|
|
|
старшем байте) |
|
3.3. Режимы адресации
Семь режимов адресации для операнда источника и четыре режима адресации для операнда назначения могут адресовать полное адресное пространство без исключений. В таблице 3.3 приводится конфигурация битов для режимов As (источник) и Ad (назначение).
Таблица 3.3 Режимы адресации операндов источника/получателя
As/Ad |
|
Режим адресации |
Синтаксис |
Описание |
|
00 / 0 |
|
Регистровый режим |
Rn |
Содержимое регистра является операндом |
|
01 / 1 |
|
Индексный режим |
X(Rn) |
Значение (Rn+X) указывает на операнд. X |
|
|
сохранен в следующем слове |
||||
|
|
|
|
||
|
|
|
|
|
Библиотека Компэла |
44 |
|
|
|
|
|
|
|
|
|
||
Раздел III. 16-разрядное RISC CPU
|
|
|
Таблица 3.3 (Окончание) |
|
|
|
|
|
|
As/Ad |
Режим адресации |
Синтаксис |
Описание |
|
|
|
|
Значение (PC+X) указывает на операнд. X |
|
01 / 1 |
Символьный режим |
ADDR |
сохранен в следующем слове. Использован |
|
|
|
|
индексный режим X(PC) |
|
|
Абсолютный (безу- |
|
Слово, следующее за командой, содержит |
|
01 / 1 |
&ADDR |
абсолютный адрес. X сохранен в следующем |
||
словный) режим |
||||
|
|
слове. Использован индексный режим X(SR) |
||
|
|
|
||
10 / - |
Косвенный регистро- |
@Rn |
Содержимое Rn использовано как указатель |
|
вый режим |
на операнд |
|||
|
|
|||
|
|
|
Содержимое Rn использовано как указатель |
|
11 / - |
Косвенный автоин- |
@Rn+ |
на операнд. Содержимое Rn впоследствии |
|
кремент |
увеличивается на 1 для байтовых команд и на |
|||
|
|
|||
|
|
|
2 для команд-слов. |
|
|
Прямой (непосред- |
|
Слово, следующее за командой, содержит |
|
11 / - |
#N |
непосредственную константу N. Использован |
||
ственный) режим |
||||
|
|
косвенный автоинкрементный режим @PC+ |
||
|
|
|
Семь упомянутых способов адресации подробно рассматриваются в следующих разделах. В большинстве примеров показаны схожие режимы адресации для источника и получателя, но в команде возможны любые правильные комбинации способов адресации источника и получателя.
Примечание: использование меток EDE и TONI
Везде в документации по семейству MSP430 используются универсальные метки EDE и TONI. Они являются только метками, не имеющими никакого специального назначения.
3.3.1. Регистровый режим
Регистровый режим описан в таблице 3.4.
|
|
|
|
|
Таблица 3.4. Описание регистрового режима |
||||||
|
Код ассемблера |
|
Содержимое ПЗУ |
|
|||||||
|
|
MOV R10,R11 |
|
|
MOV R10, R11 |
|
|||||
Длина: Одно или два слова |
|
|
|
|
|
|
|
||||
Операция: Пересылка содержимого R10 в R11. Содержимое R10 не изменяется. |
|
||||||||||
Комментарий: Действительно для источника и получателя. |
|
|
|
|
|
||||||
Пример: MOV R10,R11 |
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
||
|
|
До |
|
|
|
После |
|||||
R10 |
|
0A023h |
|
|
R10 |
|
0A023h |
|
|||
|
|
|
|
|
|
|
|||||
R11 |
|
0FA15h |
|
|
R11 |
|
0A023h |
|
|||
|
|
|
|
|
|
|
|||||
PC |
|
PCold |
|
|
PC |
|
PCold+2 |
|
|||
Библиотека Компэла |
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
45 |
|
|||
|
|
|
|
|
|
|
|||||
MSP430x1xxFamily
Примечание: данные в регистрах
Данные в регистре могут быть доступны с помощью байтовых команд или команд-слов. Если используются байтовые команды, старший байт всегда будет содержать в результате «0». Биты статуса обрабатываются согласно результату байтовой команды.
3.3.2. Индексный режим
Индексный режим описан в таблице 3.5.
|
Таблица 3.5. Описание индексного режима |
|
Код ассемблера |
|
Содержимое ПЗУ |
MOV 2(R5), 6(R6) |
|
MOV X(R5), Y(R6) X=2 Y=6 |
Длина: Два или три слова
Операция: Пересылка содержимого с исходного адреса (равного сумме содержимого R5 + 2) по адресу назначения (содержимое R6 + 6). Регистры источника и получателя (R5 и R6) не изменяются. В индексном режиме программный счетчик автоматически инкрементируется таким образом, что выполнение программы продолжается со следующей команды.
Комментарий: Действительно для источника и получателя
Пример: MOV 2(R5),6(R6):
46 |
|
Библиотека Компэла |
|
Раздел III. |
16-разрядное RISC CPU |
3.3.3. Символьный режим
Символьный режим описан в таблице 3.6.
Таблица 3.6. Описание символьного режима.
Код ассемблера |
Содержимое ПЗУ |
MOV EDE, TONI
MOV X(PC), Y(PC)
X=EDE-PCY=TONI-PC
Длина: Два или три слова
Операция: Пересылка содержимого с исходного адреса EDE (равного сумме содержимого PC + X) по адресу назначения TONI (содержимое PC + Y). Слова после команды содержат разницу
между PC и адресами источника или получателя соответственно. Ассемблер автоматически вычисляет и вставляет смещения X и Y. В символьном режиме программный счетчик автоматически инкрементируется так, что выполнение программы продолжается со следующей команды.
Комментарий: действительно для источника и получателя
Пример: MOV EDE,TONI ;Адрес источника EDE=0F016h ;Адрес получателя TONI=01114h
Библиотека Компэла |
|
47 |
|
MSP430x1xxFamily
3.3.4. Абсолютный режим
Абсолютный режим описан в таблице 3.7.
|
Таблица 3.7. Описание абсолютного режима |
|
Код ассемблера |
|
Содержимое ПЗУ |
|
|
|
MOV &EDE, &TONI |
|
MOV X(0), Y(0) X=EDEY=TONI |
Длина: Два или три слова
Операция: Пересылка содержимого с исходного адреса EDE по адресу назначения TONI. Слова после команды содержат абсолютные адреса источника и получателя. В абсолютном режиме программный счетчик автоматически инкрементируется так, что выполнение программы продолжается со следующей команды.
Комментарий: Действительно для источника и получателя
Пример: MOV &EDE,&TONI ;Адрес источника EDE=0F016h ;Адрес получателя TONI=01114h
Этот режим адресации предназначен главным образом для аппаратных периферийных модулей, расположенных по абсолютным, фиксированным адресам. Они адресуются в абсолютном режиме, что гарантирует переносимость программы (например, при написании позиционно-независимого, переносимого кода).
48 |
|
Библиотека Компэла |
|
Раздел III. |
16-разрядное RISC CPU |
3.3.5. Косвенный регистровый режим
Косвенный регистровый режим описан в таблице 3.8.
|
Таблица 3.8. Описание косвенного режима |
|
Код ассемблера |
|
Содержимое ПЗУ |
|
|
|
MOV @R10, 0(R11) |
|
MOV @R10, 0(R11) |
Длина: Одно или два слова
Операция: Пересылка содержимого с исходного адреса (содержится в R10) по адресу назначения (содержится в R11). Регистры не изменяются.
Комментарий: Действительно только для операнда источника. В качестве операнда получателя подставляется 0(Rd)
Пример: MOV.B @R10, 0(R11)
Библиотека Компэла |
|
49 |
|
MSP430x1xxFamily
3.3.6. Косвенный автоинкрементный режим
Косвенный автоинкрементный режим описан в таблице 3.9.
Таблица 3.9. Описание косвенного автоинкрементного режима
Код ассемблера |
Содержимое ПЗУ |
|
|
MOV @R10+, 0(R11) |
MOV @R10+, 0(R11) |
Длина: Одно или два слова
Операция: Пересылка содержимого с исходного адреса (содержится в R10) по адресу назначения (содержится в R11). Регистр R10 инкрементируется после выборки на 1 для байтовых операций или на 2 для команд-слов, таким образом указывается следующий адрес без дополнительных действий. Это полезно для обработки таблиц.
Комментарий: Действительно только для операнда источника. В качестве операнда получателя подставляется 0(Rd) плюс вторая команда INCD Rd.
Пример: MOV.B @R10+, 0(R11)
Автоинкремент содержимого регистра происходит после выборки операнда. Этот процесс показан на рис. 3.8.
50 |
|
Библиотека Компэла |
|
