======Создаем проект для МК 1986ВЕ8Т====== Микроконтроллер 1986ВЕ8Т предназначен для использования в системах специального назначения, а также в авиационной и космической аппаратуре. Из-за высоких требований к радиационной стойкости в микроконтроллере вместо традиционной FLASH памяти используется однократно программируемая память (OTP), что приводит к необходимости отлаживать программу в ОЗУ. В данной статье будет рассмотрено как создать и настроить проект для отладки программы в среде Keil, не прошив при этом OTP. {{1986be8t:8t.jpg}} Для начала обратим внимание на отладочную плату. Нам необходимо выбрать режим работы микроконтроллера и задать его с помощью бит MODE [7:0]. Мы будем использовать режим "WAIT_BOOT_JA". Таким образом убедимся, что на нашей отладочной плате перемычки XP4-XP11 выставлены в положение "0". Теперь можно подключать отладчик к JTAG_A и начинать работу. Перед тем, как приступить к созданию нового проекта, необходимо добавить поддержку процессора 1986ВЕ8Т в Keil, поскольку в официальном паке от Миландра его нет. Загрузить неофициальный PACK можно по [[https://drive.google.com/uc?authuser=0&id=1dnbv9Un2zo4DC_FcsJrM1ER_AB71JkxD&export=download|данной ссылке]]. Выполнив установку переходим к созданию проекта. =====Создание и настройка проекта===== Начинаем как всегда: Project->New Project. Затем нам будет предложено выбрать "Device", после установки PACK'a нам станет доступна секция CORTEX-M4F и выбираем MDR32F8. {{prog:fpu:fpu_device.png}} Следующий этап - выбор периферии. Для нашего проекта нам потребуется: Board Setup, Startup, CLKCTRL, PORT. {{1986be8t:1.jpg}} Теперь переходим к настройкам. Переходим в Project->Options of Target. Начинаем по порядку: во вкладке "Device" мы уже выбрали процессор поэтому идём сразу на Target. Т.к. мы установили поддержку данного процессора для Keil'a, адреса памяти должны выставиться следующим образом: {{prog:fpu:fpu_target.png}} Во вкладках: Output, Listing, User, C/C++, Asm, изменений не производим, в Linker ставим "Use Memory Layout from Target Dialog". {{1986be8t:2.png}} Теперь вкладка Debug. Как ранее было отмечено, 1986ВЕ8Т вместо Flash памяти содержит однократно программируемую OTP и отладку нужно производить в ОЗУ. А для запуска из ОЗУ необходимо подключать файл инициализации Start.ini. {{prog:fpu:fpu_debug.png}} Содержание файла Start.ini было выложено в статье про FPU для 1986ВЕ8Т, но также для удобства продублируем здесь: FUNC void Setup (unsigned int region) { region &= 0xFFFFF000; SP = _RDWORD(region); // Setup Stack Pointer PC = _RDWORD(region + 4); // Setup Program Counter _WDWORD(0xE000ED08, region); // Setup Vector Table Offset Register } Setup(0x20006000); // Get ready to execute image in SRAM or whatever region it is in g,main Также можно скачать данный файл по [[https://drive.google.com/uc?authuser=0&id=1VIgP_IB2YFwH7qidPxNkEq6LfueZmv3u&export=download|ссылке]], поместить его в папку с проектом и указать расположение к нему. Оставаясь все на вкладке "Debug", указав нужный отладчик заходим в настройки и здесь ещё 3 вкладки Debug, Trace, Flash Download. На первой вкладке (Debug опять, не путать с прошлой) все стандартные настройки, представлены на скриншоте. В зависимости от того какой у Вас отладтчик это окно может несколько отличаться. В нашем случае на ULINK2: {{1986be8t:3.png}} Во вкладку Trace можно смело пропускать и перейти к Flash Download. Здесь необходимо внимательно задать RAM for Algorithm: Start 0x20000000 Size 0x8000. В Download Function выбрать Do not Erase. Поскольку Flash у нас нет соответственно и FLM файл добавлять не надо. {{prog:fpu:fpu_dbg_download.png}} Осталась последняя вкладка "Options of Target" Utilities. В ней выбираем "Use External Tool for Flash Programming", то есть опять же выключаем загрузку Flash. {{prog:fpu:fpu_utils.png}} =====Hello World 8.0===== После настроек проекта и подключения периферии, создаем main. Как обычно идём в дерево проекта-> нажимаем правой кнопкой мыши на "Source Group"-> Add New Item to group "Source Group 1" выбираем C File и задаем Name: main.c. Ниже приведён пример программы мигания диодов на отладочной плате. /* Includes ------------------------------------------------------------------*/ #include "MDR1986VE8T.h" #include "spec.h" #include "mdr32f8_config.h" #include "mdr32f8_port.h" #include "mdr32f8_clkctrl.h" /* Private typedef -----------------------------------------------------------*/ PORT_InitTypeDef PORT_InitStructure; /* Private define ------------------------------------------------------------*/ #define VD7 PORT_Pin_16 #define VD8 PORT_Pin_17 #define VD9 PORT_Pin_18 /*Функция задержки*/ void Delay(__IO uint32_t nCount) { for (; nCount != 0; nCount--); } int main(void) { /* Выключение блока сброса предназначенного для выработки аппаратного сброса при включении основного питания */ POR_disable(); /* Функция установки CLKCTRL по умолчанию */ CLKCTRL_DeInit(); /* Функция конфигурирования HSE0 clock */ CLKCTRL_HSEconfig(CLKCTRL_HSE0_CLK_ON); while(CLKCTRL_HSEstatus(CLKCTRL_HSEn_STAT_HSE0_RDY) != SUCCESS){} /* Конфигурирование блока умножения тактовой частоты */ CLKCTRL_CPU_PLLconfig(PLL0, CLKCTRL_PLLn_CLK_SELECT_HSE0div1, 0, 4);//PLLn, SRC, Q, N while(CLKCTRL_CPU_PLLstatus(0) != SUCCESS){} CLKCTRL_MAX_CLKSelection(CLKCTRL_MAX_CLK_PLL0); /* Тактирование порта PORTC */ CLKCTRL_PER0_CLKcmd(CLKCTRL_PER0_CLK_MDR_PORTC_EN, ENABLE); /* Ключи записи в регистры порта */ KEY_reg_accs(); /* Конфигурация PORTC пинов [16:18] */ PORT_InitStructure.PORT_Pin = (PORT_Pin_16|PORT_Pin_17|PORT_Pin_18); PORT_InitStructure.PORT_SOE = PORT_SOE_OUT; PORT_InitStructure.PORT_SANALOG = PORT_SANALOG_DIGITAL; PORT_InitStructure.PORT_SPD = PORT_SPD_OFF; PORT_InitStructure.PORT_SPWR = PORT_SPWR_10; /*Применяем структуру*/ PORT_Init(PORTC, &PORT_InitStructure); /*Основной цикл*/ while (1) { PORT_SetBits(PORTC, VD7); //зажигаем диод Delay(200000); PORT_ResetBits(PORTC, VD7); //гасим диод Delay(200000); PORT_SetBits(PORTC, VD8); Delay(200000); PORT_ResetBits(PORTC, VD8); Delay(200000); PORT_SetBits(PORTC, VD9); Delay(200000); PORT_ResetBits(PORTC, VD9); Delay(200000); } } После добавления кода можно пробовать собирать и отлаживать проект. Не забывая, что прошивать (Flash) нам нечего,после компиляции переходим в Debug режим (Ctrl+F5) и запускаем программу F5! [[#Hello World 8.0]]