======Создаем проект для МК 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]]