Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Методическое пособие 539

.pdf
Скачиваний:
8
Добавлен:
30.04.2022
Размер:
2.16 Mб
Скачать

Физически реализовано 256 байт внутреннего ОЗУ, отображенного в пространстве памяти данных с адресами от 0x00 до 0xFF. Младшие 128 байт памяти данных используются для доступа к регистрам общего назначения (РОН) и памяти. Для доступа к младшим 128 байтам памяти данных можно использовать либо прямую, либо косвенную адресацию. Ячейки с адресами от 0x00 до 0x1F разбиты на четыре банка РОН, каждый банк состоит из восьми однобайтовых регистров. Следующие 16 байт (0x20 - 0x2F) могут адресоваться побайтно или побитно как 128 бит, доступные в режиме прямой адресации.

Старшие 128 байт памяти данных доступны только в режиме косвенной адресации. Эта область памяти занимает то же самое адресное пространство, что и регистры специального назначения (Special Function Registers - SFR), но физически отделена от них. При обращении к ячейкам памяти с адресами 0x7F - 0xFF использующийся в команде режим адресации определяет, к чему осуществляется доступ: к страшим 128 байтам памяти данных или к SFR. Команды, которые используют режим прямой адресации, будут обращаться к SFR. Команды, использующие режим косвенной адресации, будут обращаться к старшим 128 байтам памяти данных.

Младшие 32 байта памяти данных (0x00 - 0x1F) разбиты на четыре банка регистров общего назначения. Каждый банк состоит из восьми однобайтовых регистров, обозначаемых R0R7. В конкретный момент времени может быть активен лишь один банк, определяемый битами RS0 (PSW.3) и RS1 (PSW.4) в слове состояния программы (program status word ) PSW. Это позволяет осуществлять быстрое переключение контекста при вызове подпрограмм и процедур обработки прерываний. Режимы косвенной адресации используют регистры R0 и R1 в качестве индексных регистров.

Кроме прямого (побайтного) доступа к памяти данных 16 ячеек этой памяти с адресами 0x20 - 0x2F доступны также как 128 индивидуально адресуемых бит. Каждый бит имеет битовый адрес от 0x00 до 0x7F Бит 0 байта 0x20 имеет битовый

11

адрес 0x00, а бит 7 байта 0x20 имеет битовый адрес 0x07. Бит 7 байта 0x2F имеет битовый адрес 0x7F. Битовый доступ можно отличить от байтового доступа по типу используемой команды (операнды исходных данных и результата в первом случае являются битами, во втором – байтами).

Программный стек может быть размещен в любом месте 256-байтной памяти данных. Область стека определяется с использованием указателя стека (Stack Pointer - SP, 0x81). SP будет указывать на последнюю использованную ячейку. Следующее значение, загружаемое в стек, размещается по адресу SP+1, и затем SP инкрементируется. При сбросе SP инициализируется значением 0x07. Поэтому первое значение, загружаемое в стек, размещается по адресу 0x08, которое также является первым регистром (R0) регистрового банка 1. Таким образом, если требуется использовать более одного банка регистров, SP следует инициализировать адресом ячейки ОЗУ, не используемой для хранения данных. Стек может иметь глубину до 256 байт.

Ячейки памяти данных с адресами от 0x80 до 0xFF, доступные в режиме прямой адресации, образуют регистры специального назначения (special function registers - SFR). SFR

позволяют управлять ресурсами ядра CIP-51 и периферийными модулями, а также осуществлять обмен данными с ними. CIP51 дублирует SFR, типичные для архитектуры 8051, и содержит дополнительные SFR, используемые для настройки подсистем, уникальных для данного семейства МК, и доступа к ним. Это позволяет реализовать новые возможности при сохранении совместимости с системой команд MCS-51™.

Регистры SFR доступны в любое время, когда для доступа к ячейкам памяти с адресами от 0x80 до 0xFF используется режим прямой адресации. SFR с адресами,

оканчивающимися на 0x0 или 0x8 (т.е. P0, TCON, P1, SCON, IE, и т.д.), адресуются как побайтно, так и побитно. Все другие SFR адресуются только побайтно. Незанятые адреса в области SFR зарезервированы для использования в будущем.

12

Обращение к ячейкам из этой области даст неопределенный результат и должно быть исключено.

В CIP-51 используется страничная организация SFR, что позволяет отображать в адресном пространстве 0х80 – 0xFF большое количество регистров SFR. Пространство памяти SFR имеет 256 страниц. Таким образом, каждая ячейка памяти из области 0х80 – 0xFF может адресовать до 256 регистров SFR. В МК семейства C8051F12x используются пять SFR страниц: 0, 1, 2, 3 и F. SFR страницы выбираются при помощи регистра выбора страницы SFR SFRPAGE. Последовательность действий при чтении и записи SFR следующая:

1.Выбрать номер соответствующей SFR страницы, используя регистр SFRPAGE.

2.Прочитать или записать регистр SFR, используя режим прямой адресации.

1.3. Умножитель - аккумулятор

МК C8051F120/1/2/3 и C8051F130/1/2/3 имеют умножитель-аккумулятор (МАС0), который можно использовать для ускорения многих математических операций (рис. 1.4). МАС0 содержит умножитель 16х16 бит и 40разрядный сумматор, которые за два цикла SYSCLK могут выполнять операции умножения и умножения с накоплением над целыми или вещественными числами со знаком. Схема округления представляет округленный 16-разрядный результат в виде вещественного числа после окончания дополнительного (третьего) цикла SYSCLK. МАС0 содержит также 1-разрядную схему арифметического сдвига, которая за один цикл SYSCLK сдвигает влево или вправо содержимое 40-разрядного аккумулятора.

13

Рис. 1.4. Структурная схема МАС0

С работой МАС0 связаны 13 регистров специального назначения. Два регистра используются для настройки МАС0 и управления его работой, а остальные 11 регистров необходимы для хранения многобайтных входных и выходных данных МАС0. Регистр конфигурации MAC0CF используется для настройки МАС0 и управления его работой. Регистр состояния MAC0STA содержит флаги переполнения, а также флаги нулевого и отрицательного результата. 16-разрядные регистры

MAC0A (MAC0AH: MAC0AL) и MAC0B (MAC0BH:

MAC0BL) используются в качестве регистров входных данных умножителя. Регистр аккумулятора МАС0 имеет разрядность 40 бит и состоит из пяти SFR-регистров: MAC0OVR, MAC0ACC3, MAC0ACC2, MAC0ACC1 и MAC0ACC0.

Основные результаты операций, выполняемых МАС0,

14

сохраняются в регистрах аккумулятора. При необходимости округленные результаты сохраняются в 16-разрядном регистре округления MAC0RND (MAC0RNDH: MAC0RNDL).

МАС0 может интерпретировать 16-разрядные входные данные, содержащиеся в регистрах МАС0А и МАС0В, как целые или вещественные числа со знаком. Если бит MAC0FM (MAC0CF.1) сброшен в 0, то входные данные будут рассматриваться как 16-разрядные целые числа в дополнительном коде. После окончания операции аккумулятор будет содержать 40-разрядное целое число в дополнительном коде.

1.4. Порты ввода/вывода

Данные МК представляют собой полностью интегрированные на одном кристалле системы для обработки смешанных сигналов, которые имеют 64 (МК в 100-выв. корпусе типа TQFP) или 32 (МК в 64-выв.корпусе типа TQFP) цифровых вывода входа/выхода, организованные в 8- разрядные порты. Все порты доступны в режиме как побитной, так и побайтной адресации через соответствующие регистры данных портов. Каждый из выводов портов имеет слаботоковые подтягивающие резисторы и может быть настроен как выход с открытым стоком или цифровой двухтактный выход (рис. 1.5). Допустимое напряжение на выводах всех портов составляет 5В.

15

Рис. 1.5. Структурная схема ячейки порта ввода/вывода

Микроконтроллеры имеют различные цифровые ресурсы, которые доступны через четыре младших порта ввода/вывода: Р0, Р1, Р2 и Р3 (рис. 1.6). Каждый из выводов портов Р0, Р1, Р2 и Р3 может быть определен либо как вывод ввода/вывода общего назначения, либо как вывод, управляемый внутренними цифровыми ресурсами (например, УАПП0 или /INT1). Разработчик системы определяет, какие цифровые ресурсы будут назначены внешним выводам, ограничиваясь только количеством доступных выводов. Гибкость при распределении ресурсов достигается благодаря использованию приоритетного декодера матрицы. Следует иметь ввиду, что состояние вывода порта ввода/вывода всегда можно прочитать из соответствующего регистра данных независимо от того, как функционирует этот вывод: как вывод ввода/вывода общего назначения или как вывод, назначенный какому-либо внутреннему цифровому ресурсу. Выводы Порта 1 могут использоваться как аналоговые входы АЦП2.

Как младшие, так и старшие порты могут использоваться для интерфейса внешней памяти, сигналы которого активны во время выполнения команды MOVX, обращающейся по адресу, расположенному во внешней (не встроенной) памяти.

16

Рис. 1.6. Функциональная схема портов ввода/вывода

Приоритетный декодер матрицы, или "матрица", распределяет и назначает выводы портов Р3 – Р0 цифровым периферийным модулям (УАПП, SMBus, ПМС, таймеры и т.д.) микроконтроллера, используя для этого приоритеты. Выводы портов распределяются, начиная с порта Р0.0 и (если необходимо) до порта Р3.7. Цифровые периферийные модули назначаются выводам портов в соответствии с их приоритетом. УАПП0 имеет наивысший приоритет, CNVSTR2 имеет самый низкий приоритет.

Матрица назначает выводы портов периферийным модулям, если соответствующие биты подключения в регистрах конфигурации матрицы XBR0, XBR1 и XBR2 установлены в 1. Например, если бит UART0EN (XBR0.2) установлен в 1, то выводы TX0 и RX0 будут отображены на порты Р0.0 и Р0.1 соответственно (рис. 1.7).

17

Рис. 1.7. Таблица декодирования приоритетов матрицы

Т.к. УАПП0 имеет наивысший приоритет, то его выводы всегда будут отображаться на порты Р0.0 и Р0.1, когда бит UART0EN установлен в 1. Если биты подключения цифровых модулей не установлены в 1, то их порты не доступны на внешних выводах портов МК. Важно также иметь ввиду, что, если выбраны последовательные порты (т.е. SMBus, SPI, УАПП), то матрица распределяет все выводы, ассоциированные с ними. Нельзя, например, назначить вывод RX0 модуля УАПП0 и не назначить вывод TX0 этого же модуля. Назначение внешних выводов микроконтроллера для каждой комбинации подключенных периферийных модулей будет уникальным.

18

Все выводы портов Р0 – Р3, не распределенные при помощи матрицы, могут быть доступны как выводы ввода/вывода общего назначения путем чтения и записи соответствующих регистров данных портов, которые доступны как в побитном, так и в побайтном режимах адресации. Состояния выходных драйверов выводов портов, которые распределены матрицей и управляются цифровыми периферийными модулями, определяются этими модулями. Запись регистров данных этих портов (или распределенных матрицей битов портов) не будет влиять на состояние этих выводов.

Чтение регистра данных порта (или бита порта) всегда возвратит в качестве результата логическое состояние на выводе порта независимо от того, распределен данный порт матрицей или нет. В течение цикла чтения команд типа чтение- модификация-запись считывается содержимое регистра данных порта, а не логическое состояние самих выводов портов. Следует иметь ввиду, что если при работе на тактовой частоте более 50 МГц состояние вывода устанавливается и затем сразу же считывается (т.е. когда за командой записи сразу же следует команда чтения), то из-за задержки распространения сигнала команда чтения может возвратить значение, соответствующее предыдущему состоянию вывода.

Так как регистры матрицы влияют на подключение внутренних периферийных модулей к внешним выводам МК, то они обычно настраиваются в процессе инициализации системы до настройки самих периферийных модулей. После первоначальной настройки регистры матрицы обычно не перенастраиваются.

После правильной настройки регистров матрицы она включается установкой в 1 бита XBARE (XBR2.4). Пока бит XBARE не установлен в 1, выходные драйверы портов Р0 – Р3 явным образом отключаются, чтобы предотвратить возможные конфликты на выводах портов во время записи регистров матрицы и других регистров, которые могут влиять на состояние внешних выводов МК.

19

Выходные драйверы выводов, распределенных матрицей для входных сигналов (например, RX0), явным образом отключаются; таким образом значения регистров данных портов и регистров PnMDOUT не влияют на состояние этих выводов.

Выходные драйверы портов Р0 – Р3 остаются отключенными до тех пор, пока матрица не будет включена установкой в 1 бита XBARE (XBR2.4). Выходной драйвер каждого порта можно настроить либо как цифровой двухтактный выход, либо как выход с открытым стоком. При работе в режиме цифрового двухтактного выхода запись лог. ‘0’ в соответствующий бит регистра данных порта приведет к «притягиванию» данного вывода порта к «земляной» шине GND, а запись лог. ‘1’ приведет к «притягиванию» данного вывода порта к шине питания VDD. При работе в режиме выхода с открытым стоком запись лог. ‘0’ в соответствующий бит регистра данных порта приведет к «притягиванию» данного вывода порта к «земляной» шине GND, а при записи лог. ‘1’ данный вывод порта будет переведен в высокоимпедансное состояние. Режим выхода с открытым стоком полезен в том случае, если требуется предотвратить конфликты между различными устройствами в системе, когда вывод порта участвует в коллективном взаимодействии, при котором несколько выходов подключаются к одной и той же физической линии (например, сигнал SDA шины SMBus).

Режимы выходов портов Р0 – Р3 определяются битами соответствующих регистров PnMDOUT. Например, при установке в 1 бита P3MDOUT.7 выходной драйвер порта Р3.7 будет настроен как цифровой двухтактный выход, при сбросе в 0 бита P3MDOUT.7 выходной драйвер порта Р3.7 будет настроен как выход с открытым стоком. По умолчанию выходные драйверы всех портов настраиваются как выходы с открытым стоком.

Регистры PnMDOUT управляют режимами выхода выводов портов независимо от того, назначает ли их матрица цифровым ресурсам или нет. Исключением являются только

20