31473

Запуск МК 1986ВЕ8Т в режимах EXTBUS_8_ECC и EXTBUS_CFG

Дата последнего изменения: 21.07.2021 13:53:54

После включения питания или после любого сигнала сброса МК 1986ВЕ8(1)Т начинает выполнять загрузочную программу, которая по состоянию выводов MODE[7:0] (PE[31:24]) определяет, в каком из режимов будет функционировать МК. Полный список режимов работы МК приведён в спецификации, пункт «6.4 Режимы работы микроконтроллера». В данной статье будут рассмотрены режимы запуска МК из внешней памяти: EXTBUS_8_ECC и EXTBUS_CFG.

В составе МК реализован контроллер внешней шины (EXTBUSCNTR), который позволяет выполнять программу непосредственно из внешней памяти, т.е. позволяет микроконтроллеру работать в режиме микропроцессора. В загрузочной программе для этого предназначены 4 режима работы, приведённые в таблице 1.

Таблица 1 – Режимы работы МК для выполнения программы из внешней памяти

Биты ЕСС MODE[7:4]

Биты режима MODE[3:0]

Режим

Краткое описание

1100

0011

EXTBUS_8_ECC+JB

Запуск из внешней памяти с (0x1000_0000), сконфигурированной в минимальный режим:

- шина данных D[7:0] ( {PE[5:0], PD[31:30]} );

- шина адреса A[15:0] ( {PD[13:0], PC[31:30]} );

- сигнал OEn[0] ( PD[23] ) c последовательной организацией ECC с базового адреса 0x1000_9000 с включенным интерфейсом отладки через выводы JTAG_B.

1101

0100

EXTBUS_8_ECC+JA

Запуск из внешней памяти с (0x1000_0000), сконфигурированной в минимальный режим:

- шина данных D[7:0] ( {PE[5:0], PD[31:30]} );

- шина адреса A[15:0] ( {PD[13:0], PC[31:30]} );

- сигнал OEn[0] ( PD[23] ) с последовательной организацией ECC с базового адреса 0x1000_9000 с включенным интерфейсом отладки через выводы JTAG_A.

 

1010

0101

EXTBUS_CFG+JB

Запуск из внешней памяти с (0x1000_0000) c чтением конфигурации в режиме:

- шина данных D[7:0] ( {PE[5:0], PD[31:30]} );

- шина адреса A[10:3] ( {PD[8:1]} );

- сигнал OEn[0] ( PD[23] ).

 

Читается DATA[7:0] = {ECC[3:0], CFGx[3:0]}, где:

- CFG0 = Режим запуска (8, 16, 32, 64);

- CFG1 = Режим ЕСС (нет, послед., параллельн.);

- CFG2 = ECCBASE[3:0];

- CFG3 = ECCBASE[7:4];

- CFG9 = ECCBASE[31:28] с включенным интерфейсом отладки через выводы JTAG_B.

 

0110

0110

EXTBUS_CFG+JA

Запуск из внешней памяти с (0x1000_0000) c чтением конфигурации в режиме:

- шина данных D[7:0] ( {PE[5:0], PD[31:30]} );

- шина адреса A[10:3] ( {PD[8:1]} );

- сигнал OEn[0] ( PD[23] ).

 

Читается DATA[7:0] = {ECC[3:0], CFGx[3:0]}, где:

- CFG0 = Режим запуска (8, 16, 32, 64);

- CFG1 = Режим ЕСС (нет, послед., параллельн.);

- CFG2 = ECCBASE[3:0];

- CFG3 = ECCBASE[7:4];

- CFG9 = ECCBASE[31:28] с включенным интерфейсом отладки через выводы JTAG_A.

 

Дополнение в конце названия режимов EXTBUS_8_ECC и EXTBUS_CFG: «+JA» или «+JB» определяет, через какие выводы: JTAG_A или JTAG_B будет доступен интерфейс отладки.

Описание запуска отладки в режимах EXTBUS_8_ECC и EXTBUS_CFG в среде Keil приведено в статье «Запуск отладки из внешней памяти ОЗУ на отладочной плате для МК 1986ВЕ8Т без FLM».

Режим работы EXTBUS_8_ECC+JA(JB)

Режим работы EXTBUS_8_ECC+JA(JB) используется для старта МК из внешней 8-разрядной памяти с использованием последовательного режима ECC.

В данном режиме работы загрузочная программа выполняет настройку контроллера внешней шины и портов ввода-вывода для работы с внешней 8-разрядной памятью.

В контроллере внешней шины настраивается регион 0 (0x1000_0000 - 0x17FF_FFFF) в режим работы с использованием 8-разрядной шины данных D[7:0] и проверкой ECC по коду Хэмминга (72, 64). Сигнал готовности READY и синхросигнал OCLK не используются. Проверочные биты ECC располагаются последовательно в самой памяти (последовательная организация ECC), начиная с базового адреса 0x1000_9000. 

Регион внешней шины начинается с адреса 0x1000_0000, поэтому максимальный доступный объём памяти для хранения программы составляет 36 Кбайт (0x9000 байт), далее в памяти с адреса 0x1000_9000 располагаются биты ECC объёмом 12 Кбайт. Для работы с большим объёмом памяти необходимо использовать режим EXTBUS_CFG.
Временные параметры транзакции на шине устанавливаются в следующие значения: WS_HOLD[3:0] = 0x4, WS_SETUP[3:0] = 0x4, WS_ACTIVE[7:0] = 0x7F. При необходимости временные параметры могут быть изменены в ходе выполнения программы, подробнее об этом описано в пункте «Изменение параметров работы внешней шины».

В контроллере портов ввода-вывода настраивается минимальный набор выводов МК для работы с внешней памятью:
- шина данных D[7:0] ( {PE[5:0], PD[31:30]} );
- шина адреса A[15:0] ( {PD[13:0], PC[31:30]} );
- сигнал чтения данных OEn[0] ( PD[23] ).

Остальные выводы портов ввода-вывода МК, например, сигналы управления CSn[0], CS[0] (разрешение региона) и WEn[0] (запись данных), сигналы шины адреса A[31:16], не инициализируются и находятся по сбросу в режиме аналоговой функции в высокоимпедансном состоянии. Входы микросхемы памяти, которые не подключены к набору выводов МК, инициализируемых загрузочной программой, должны быть доопределены на плате до допустимых логических уровней напряжения с помощью резисторов доопределения. 

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

Загрузочная программа конфигурирует только минимальный набор внешней шины, чтобы не ограничивать использование других выводов МК. При необходимости требуемые сигналы внешней шины могут быть сконфигурированы в программе после запуска МК. Подключение микросхемы памяти к МК в режиме EXTBUS_8_ECC+JA(JB) приведено в пункте «Подключение внешней памяти к МК».

После окончания инициализации контроллера внешней шины и контроллера портов ввода-вывода загрузочная программа выполняет следующие действия:
- устанавливает адрес указателя стека в значение, считанное из ячейки с адресом 0x1000_0000 (SP);
- устанавливает адрес таблицы векторов в значение 0x1000_0000 (VTOR);
- осуществляет безусловный переход по адресу, считанному из ячейки 0x1000_0004 (RESET_HANDLER).

При выполнении загрузочной программы в специальную структуру, которая располагается в ОЗУ по адресу 0x2000_7FF0, записывается информация об ошибках, которые возникли в процессе загрузки.

Режим работы EXTBUS_CFG+JA(JB)

Режим работы EXTBUS_CFG+JA(JB) используется для старта МК из внешней памяти, при этом разрядность шины данных (8, 16, 32, 64) и режим ECC (без ECC, последовательный, параллельный) определяются значениями конфигурационных данных CFGx, которые МК считывает в процессе инициализации из внешней памяти по адресам 0x1000_0400, 0x1000_0408, … 0x1000_0448.

В данном режиме работы загрузочная программа выполняет настройку контроллера внешней шины и портов ввода-вывода в два этапа:
1) первоначальная инициализация для считывания конфигурационных значений CFGx;
2) итоговая инициализация в зависимости от считанных конфигурационных значений CFGx.

Первоначальная инициализация

При первоначальной инициализации загрузочная программа настраивает в контроллере внешней шины регион 0 (0x1000_0000 - 0x17FF_FFFF) для работы с использованием 8-разрядной шины данных D[7:0]. Аппаратная проверка ECC по коду Хэмминга (72, 64), а также сигнал готовности READY и синхросигнал OCLK не используются. Временные параметры транзакции на шине устанавливаются в следующие значения: WS_HOLD[3:0] = 0x4, WS_SETUP[3:0] = 0x4, WS_ACTIVE[7:0] = 0x7F.

В контроллере портов ввода-вывода настраивается минимальный набор выводов МК для работы с внешней памятью:
- шина данных D[7:0] ( {PE[5:0], PD[31:30]} );
- шина адреса A[10:3] ( {PD[8:1]} );
- сигнал OEn[0] ( PD[23] );
- сигнал WEn[0] ( PD[24] ).

Остальные выводы портов ввода-вывода МК, например, сигналы управления CSn[0], CS[0] (разрешение региона) и WEn[0] (запись данных), сигналы шины адреса A[31:11] и A[2:0], не инициализируются и находятся по сбросу в режиме аналоговой функции в высокоимпедансном состоянии. Входы микросхемы памяти, которые не подключены к набору выводов МК, инициализируемых загрузочной программой, должны быть доопределены на плате до допустимых логических уровней напряжения с помощью резисторов доопределения.

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

Загрузочная программа конфигурирует только минимальный набор внешней шины, чтобы не ограничивать использование других выводов МК. При необходимости требуемые сигналы внешней шины могут быть сконфигурированы в программе после запуска МК. Подключение микросхемы памяти к МК в режиме EXTBUS_CFG+JA(JB) приведено в пункте «Подключение внешней памяти к МК».

После настройки контроллера внешней шины и портов ввода-вывода из ячеек памяти по адресам 0x1000_0400, 0x1000_0408, … 0x1000_0448 считываются конфигурационные значения с ECC: DATA[7:0] = {ECC[3:0], CFGx[3:0]}, после чего выполняется программный контроль ЕСС. При обнаружении одиночной ошибки загрузочная программа исправляет её, при обнаружении двойной ошибки – формирует программный сигнал сброса, и МК заново начинает выполнение загрузочной программы.

Итоговая инициализация

В зависимости от считанных конфигурационных значений CFGx загрузочная программа выполняет итоговую инициализацию контроллера внешней шины и портов ввода-вывода. Конфигурационные значения CFGx имеют следующее назначение:
  
CFG0 – разрядность шины данных:
- CFG0 = 1 – 8-ми битная шина;
- CFG0 = 2 – 16-ти битная шина;
- CFG0 = 3 – 32-x битная шина;
- CFG0 = 4 – 64-x битная шина.

CFG1 – режим ЕСС:
- CFG1 = 1 – без проверки ECC.
- CFG1 = 2 – последовательная организация ECC. При последовательной организации проверочные биты ECC располагаются непосредственно в самой памяти, начиная с базового адреса расположения ECC. Базовый адрес ECC задаётся значениями CFG9-CFG2.
- CFG1 = 3 – параллельная организация ECC. Допускается только для 32-х и 64-х разрядной шины данных. При параллельной организации проверочные биты ECC располагаются в дополнительных разрядах шины данных: 32 данные + 8 ECC, 64 данные + 16 ECC.
При выборе любой разрядности шины данных (8/16/32/64) проверочные биты ECC всегда рассчитываются для 32-битного слова (32 бита данные и 8 бит ECC).
Если CFGx имеет некорректное значение, то формируется программный сигнал сброса и МК заново начинает выполнение загрузочной программы.

В контроллере внешней шины для работы с памятью настраивается регион 0 (0x1000_0000 - 0x17FF_FFFF). В зависимости от значений CFG9-CFG0 устанавливается разрядность шины данных и режим ECC. Сигнал готовности READY, синхросигнал OCLK и кэширование данных не используются.

Временные параметры транзакции на шине устанавливаются в следующие значения: WS_HOLD[3:0] = 0x4, WS_SETUP[3:0] = 0x4, WS_ACTIVE[7:0] = 0x7F. При необходимости временные параметры могут быть изменены в ходе выполнения программы, подробнее об этом описано в пункте «Изменение параметров работы внешней шины».

В контроллере портов ввода-вывода настраивается набор выводов МК для работы с внешней памятью:
- шина адреса A[20:0] ( {PD[18:0], PC[31:30]} );
- сигнал OEn[0] ( PD[23] ).

В зависимости от значения CFG0 настраивается шина данных:
CFG0 = 1 - 8-ми битная шина D[7:0] ( {PE[5:0], PD[31:30]} );
CFG0 = 2 - 16-ти битная шина D[15:0] ( {PE[13:0], PD[31:30]} );
CFG0 = 3 - 32-х битная шина D[31:0] ( {PB[11:26], PE[13:0], PD[31:30]} );
CFG0 = 4 - 64-х битная шина D[63:0] ( {PA[19:31], PB[0:2], PA[5:0], PE[31:22], PB[11:26], PE[13:0], PD[31:30]} ).
При выборе 64-х разрядной шины данных (CFG0 = 4) выводы интерфейса JTAG_A (PA[4:0]) используются как часть шины данных D[46:42], поэтому загрузочная программа изменяет режим работы JTAG для разрешения конфликта:
- в REV1-REV4 МК 1986ВЕ8Т и REV1-REV1.1 МК 1986ВЕ81Т загрузочная программа изменяет активный интерфейс отладки с JTAG_A (PA[4:0]) на JTAG_B (PB[8:4]), устанавливая бит MODE[0] в регистрах REG_60_TMRx;
- в REV5 МК 1986ВЕ8Т и REV2 МК 1986ВЕ81Т загрузочная программа отключает интерфейсы JTAG_A и JTAG_B путём установки бита DISABLE_JTAG в регистрах REG_60_TMRx.
При выборе 64-х разрядной шины данных (CFG0 = 4) с параллельной организацией ECC (CFG1 = 3) выводы интерфейса JTAG_B (PB[8:4]) используются как часть шины ECC D[78:74], поэтому загрузочная программа отключает интерфейсы JTAG_A и JTAG_B путём установки бита DISABLE_JTAG в регистрах REG_60_TMRx.
Если установлен режим работы с параллельной организацией ЕСС (CFG1 = 3), то в зависимости от CFG0 конфигурируются дополнительные разряды шины данных для доступа к ECC:
CFG0 = 1,2 – недопустимый режим работы;
CFG0 = 3 – 8-ми разрядная шина ECC: D[71:64] ( PE[21:14] );
CFG0 = 4 – 16-ти разрядная шина ECC: D[79:64] ( {PB[3:10], PE[21:14]} ).

После окончания инициализации контроллера внешней шины и контроллера портов ввода-вывода загрузочная программа выполняет следующие действия:
- устанавливает адрес указателя стека в значение, считанное из ячейки с адресом 0x1000_0000 (SP);
- устанавливает адрес таблицы векторов в значение 0x1000_0000 (VTOR);
- осуществляет безусловный переход по адресу, считанному из ячейки 0x1000_0004 (RESET_HANDLER).

При выполнении загрузочной программы в специальную структуру, которая располагается в ОЗУ по адресу 0x2000_7FF0, записывается информация об ошибках, которые возникли в процессе загрузки.

Размещение конфигурационных значений CFGx в проекте

Для МК программа во внешней памяти располагается, начиная с адреса 0x1000_0000, поэтому в среде разработки область памяти программ (ROM) должна также начинаться с адреса 0x1000_0000.

Конфигурационные значения CFGx защищаются ECC и записываются в памяти в формате: DATA[7:0] = {ECC[3:0], CFGx[3:0]}. В таблице 2 приведены конфигурационные данные DATA[7:0] с ECC[3:0] в зависимости от значения CFGx[3:0].

Таблица 2 – Конфигурационные данные DATA[7:0]

DATA[7:0]

ECC[3:0]

CFGx[3:0]

0x00

0000

0000

0x71

0111

0001

0xB2

1011

0010

0xC3

1100

0011

0xD4

1101

0100

0xA5

1010

0101

0x66

0110

0110

0x17

0001

0111

0xE8

1110

1000

0x99

1001

1001

0x5A

0101

1010

0x2B

0010

1011

0x3C

0011

1100

0x4D

0100

1101

0x8E

1000

1110

0xFF

1111

1111

Среда разработки Keil

Для расположения конфигурационных значений CFGx по требуемым адресам в среде Keil может использоваться атрибут переменной __attribute__((at(address))). В фрагменте кода 1 приведены примеры объявления конфигурационных констант.

Фрагмент кода 1 – Объявления конфигурационных констант в среде Keil

/************************************************************/
/* 8-ми разрядная шина данных, последовательная организация ECC */
const uint8_t Cfg_0 __attribute__((at(0x10000400))) = 0x71; //1 – 8-ми разрядная шина данных
const uint8_t Cfg_1 __attribute__((at(0x10000408))) = 0xB2; //2 – последовательная организация ECC

/* Базовый адрес ECC 0x1006_0000 */
const uint8_t Cfg_2 __attribute__((at(0x10000410))) = 0x00;
const uint8_t Cfg_3 __attribute__((at(0x10000418))) = 0x00;
const uint8_t Cfg_4 __attribute__((at(0x10000420))) = 0x00;
const uint8_t Cfg_5 __attribute__((at(0x10000428))) = 0x00;
const uint8_t Cfg_6 __attribute__((at(0x10000430))) = 0x66;
const uint8_t Cfg_7 __attribute__((at(0x10000438))) = 0x00;
const uint8_t Cfg_8 __attribute__((at(0x10000440))) = 0x00;
const uint8_t Cfg_9 __attribute__((at(0x10000448))) = 0x71;

/************************************************************/
/* 32-х разрядная шина данных, параллельная организация ECC */
const uint8_t Cfg_0 __attribute__((at(0x10000400))) = 0xC3; //3 – 32-х разрядная шина данных
const uint8_t Cfg_1 __attribute__((at(0x10000408))) = 0xC3; //3 – параллельная организация ECC

/************************************************************/
/* 16-ти разрядная шина данных, без проверки ECC */
const uint8_t Cfg_0 __attribute__((at(0x10000400))) = 0xB2; //2 – 16-ти разрядная шина данных
const uint8_t Cfg_1 __attribute__((at(0x10000408))) = 0x71; //1 – без ECC

Среда разработки IAR

Для расположения конфигурационных значений CFGx по требуемым адресам в среде IAR может использоваться оператор @ совместно с ключевым словом __root. В фрагменте кода 2 приведены примеры объявления конфигурационных констант.

Фрагмент кода 2 – Объявление конфигурационных констант в среде IAR

/************************************************************/
/* 8-ми разрядная шина данных, последовательная организация ECC */
_root const uint8_t Cfg_0 @ 0x10000400 = 0x71; //1 – 8-ми разрядная шина данных
_root const uint8_t Cfg_1 @ 0x10000408 = 0xB2; //2 – последовательная организация ECC

/* Базовый адрес ECC 0x1006_0000 */
_root const uint8_t Cfg_2 @ 0x10000410 = 0x00;
_root const uint8_t Cfg_3 @ 0x10000418 = 0x00;
_root const uint8_t Cfg_4 @ 0x10000420 = 0x00;
_root const uint8_t Cfg_5 @ 0x10000428 = 0x00;
_root const uint8_t Cfg_6 @ 0x10000430 = 0x66;
_root const uint8_t Cfg_7 @ 0x10000438 = 0x00;
_root const uint8_t Cfg_8 @ 0x10000440 = 0x00;
_root const uint8_t Cfg_9 @ 0x10000448 = 0x71;

/************************************************************/
/* 32-х разрядная шина данных, параллельная организация ECC */
_root const uint8_t Cfg_0 @ 0x10000400 = 0xC3; //3 – 32-х разрядная шина данных
_root const uint8_t Cfg_1 @ 0x10000408 = 0xC3; //3 – параллельная организация ECC

/************************************************************/
/* 16-ти разрядная шина данных, без проверки ECC */
_root const uint8_t Cfg_0 @ 0x10000400 = 0xB2; //2 – 16-ти разрядная шина данных
_root const uint8_t Cfg_1 @ 0x10000408 = 0x71; //1 – без ECC

Изменение параметров работы внешней шины

В ходе работы загрузочной программы в контроллере внешней шины устанавливаются следующие временные параметры транзакции на шине: WS_HOLD[3:0] = 0x4, WS_SETUP[3:0] = 0x4, WS_ACTIVE[7:0] = 0x7F. При необходимости в пользовательской программе данные параметры могут быть изменены. Для этого требуется разместить код функции, осуществляющей настройку контроллера внешней шины, во внутреннем ОЗУ, чтобы на момент внесения изменений исполнение программы происходило не из внешней памяти. Пример такой функции приведён во фрагменте кода 3.

Фрагмент кода 3 – Функция настройки временных параметров контроллера внешней шины

void EBC_RGNx_WSConfig(uint32_t RGNx, uint32_t RGN_WS_SETUP, uint32_t RGN_WS_ACTIVE, uint32_t RGN_WS_HOLD)
{
    uint32_t tmpreg_CNTRL, *EBC_RGNx_CNTRL_ptr;
    /* Check the parameters */
    assert_param(IS_EBC_RGNx(RGNx));
    assert_param(IS_EBC_RGNx_WS_SETUP(RGN_WS_SETUP));
    assert_param(IS_EBC_RGNx_WS_ACTIVE(RGN_WS_ACTIVE));
    assert_param(IS_EBC_RGNx_WS_HOLD(RGN_WS_HOLD));

    EBC_RGNx_CNTRL_ptr = (uint32_t *)(&EXT_BUS_CNTR->RGN0_CNTRL) + RGNx;
   
    /* Clear WS bits */
    tmpreg_CNTRL = *EBC_RGNx_CNTRL_ptr & (~(EBC_WS_SETUP_MSK | EBC_WS_ACTIVE_MSK | EBC_WS_HOLD_MSK));
   
    /* Form new value */
    tmpreg_CNTRL |= RGN_WS_SETUP<<EBC_WS_SETUP_pos | RGN_WS_ACTIVE<<EBC_WS_ACTIVE_pos | RGN_WS_HOLD<<EBC_WS_HOLD_pos;
   
    /* Configure CNTRL register with new value */
    *EBC_RGNx_CNTRL_ptr = tmpreg_CNTRL;
   
    /* Data Synchronization Barrier */
    __DSB();

Среда разработки Keil

В среде Keil для расположения функции в памяти ОЗУ может использоваться атрибут __attribute__((section(«…»))), который задаётся при объявлении функции. В фрагменте кода 4 приведён пример объявления функции EBC_RGNx_WSConfig() с атрибутом «section» для размещения функции в секции «EXECUTABLE_MEMORY_SECTION».

Фрагмент кода 4 – Объявление функции с атрибутом «section»

void EBC_RGNx_WSConfig(uint32_t RGNx, uint32_t RGN_WS_SETUP, uint32_t RGN_WS_ACTIVE, uint32_t RGN_WS_HOLD) __attribute__((section("EXECUTABLE_MEMORY_SECTION")));

Чтобы секция «EXECUTABLE_MEMORY_SECTION» размещалась в памяти ОЗУ, необходимо отредактировать scatter-файл (конфигурационный файл компоновщика). В scatter-файлы необходимо указать, что секция «EXECUTABLE_MEMORY_SECTION» должна размещаться в ОЗУ, область RW_IRAM1, как показано во фрагменте кода 5.

Фрагмент кода 5 – Scatter-файл. Размещение секции «EXECUTABLE_MEMORY_SECTION» в RW_IRAM1

; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************
LR_IROM1 0x20000000 0x00001000 { ; load region size_region
  ER_IROM1 0x20000000 0x00001000 { ; load address = execution address
   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
   }
  RW_IRAM1 0x20001000 0x00001000 { ; RW data
  *.o (EXECUTABLE_MEMORY_SECTION)
   .ANY (+RW +ZI)
   }
 }

Подробное описание по размещению функций в ОЗУ в среде Keil приведено в статье «Расположение функций в ОЗУ, программирование EEPROM».

Среда разработки IAR

В среде IAR для расположения функции в памяти ОЗУ может использоваться ключевое слово __ramfunc, которое задаётся при объявлении функции. В фрагменте кода 6 приведён пример объявления функции EBC_RGNx_WSConfig() с ключевым словом __ramfunc.

Фрагмент кода 6 – Объявление функции с ключевым словом __ramfunc

__ramfunc void EBC_RGNx_WSConfig(uint32_t RGNx, uint32_t RGN_WS_SETUP, uint32_t RGN_WS_ACTIVE, uint32_t RGN_WS_HOLD);

Подключение внешней памяти к МК

В данном пункте приведены примеры подключения внешней памяти к МК 1986ВЕ8(1)Т для старта в режимах работы EXTBUS_8_ECC и EXTBUS_CFG. В качестве внешней памяти выбрана микросхема 1645РТ3У, которая имеет перенастраиваемую организацию, определяемую по состоянию на выводе CONF:
- CONF = 0: 128К слов по 16 бит;
- CONF = 1: 256К слов по 8 бит. 
При работе в 16-ти разрядном режиме (CONF = 0) сигнал адреса А17 игнорируется, вход А17 должен быть подключен к шине «Общий» или к шине «Питание».

Режим работы EXTBUS_8_ECC+JA(JB)

На рисунке 1 приведена структурная схема подключения микросхемы 1645РТ3У к МК 1986ВЕ8(1)Т для старта в режиме работы EXTBUS_8_ECC. Микросхема 1645РТ3У работает в 8-ми разрядном режиме (CONF = 1). Объем пользовательской программы составляет до 36 Кбайт, ECC занимает до 12 Кбайт, остальная память регионом 0 не используется. Для МК 1986ВЕ8(1)Т серым цветом показаны сигналы адреса и управления, которые не инициализируются загрузочной программой, но при необходимости могут быть настроены в пользовательской программе. Символы «0» и «1» обозначают подтяжку указанных выводов с помощью резисторов доопределения к шине «Общий» и шине «Питания» соответственно. Сигнал OEn[0] также доопределен до уровня логической «1» во избежание наводок во время запуска МК, когда вывод МК OEn[0] не сконфигурирован и находится в высокоимпедансном состоянии.

Рисунок 1 - Структурная схема подключения микросхемы 1645РТ3У к МК 1986ВЕ8(1)Т для старта в режиме EXTBUS_8_ECC

Режим работы EXTBUS_CFG+JA(JB)

На рисунке 2 приведена структурная схема подключения двух микросхем 1645РТ3У к МК 1986ВЕ8(1)Т для старта в режиме работы EXTBUS_CFG с использованием 32-x битной шины данных. Режим ECC может быть задан как с последовательной организацией ECC, так и без проверки ECC. Объем пользовательской программы составляет до 384 Кбайт с последовательной ECC и до 512 Кбайт без ECC.

Микросхема 1645РТ3У работает в 16-ти разрядном режиме (CONF = 0). Для МК 1986ВЕ8(1)Т серым цветом показаны сигналы адреса и управления, которые не конфигурируются загрузочной программой при первоначальной инициализации. В итоговой инициализации будет настроена шина адреса A[20:0], шина данных - в зависимости от CFG0, вывод CSn[0] при необходимости может быть настроен в пользовательской программе. Символы «0» и «1» обозначают подтяжку указанных выводов с помощью резисторов доопределения к шине «Общий» и шине «Питания» соответственно. Сигнал OEn[0] также доопределен до уровня логической «1» во избежание наводок во время запуска МК, когда вывод МК OEn[0] не сконфигурирован и находится в высокоимпедансном состоянии.

Рисунок 2 - Структурная схема подключения микросхемы 1645РТ3У к МК 1986ВЕ8(1)Т для старта в режиме EXTBUS_CFG: 32-разрядная шина данных без параллельного ECC

Так как в МК 1986ВЕ8(1)Т реализована байтовая адресация всех областей памяти, а адресация внешней шины зависит от разрядности шины данных, то для согласования адресации необходимо подключать шину адреса МК к микросхемам памяти со смещением. Величина смещения адресной шины МК в зависимости от адресации внешней шины приведена в таблице 3. Величина смещения показывает количество младших сигналов шины адреса МК, которые не подключаются к микросхеме памяти.

Таблица 3 – Величина смещения адресной шины МК в зависимости от адресации внешней шины

Смещение адресной шины МК, количество разрядов

Адресация внешней шины (разрядность шины данных)

Нет смещения

8-ми битная

1

16-ти битная

2

32-х битная

3

64-х битная


Сохранить статью в PDF

Документация

Теги

Была ли статья полезной?