Инструменты пользователя

Инструменты сайта


prog:spec:proj_1986be8t

Создаем проект для МК 1986ВЕ8Т

Микроконтроллер 1986ВЕ8Т предназначен для использования в системах специального назначения, а также в авиационной и космической аппаратуре. Из-за высоких требований к радиационной стойкости в микроконтроллере вместо традиционной FLASH памяти используется однократно программируемая память (OTP), что приводит к необходимости отлаживать программу в ОЗУ. В данной статье будет рассмотрено как создать и настроить проект для отладки программы в среде Keil, не прошив при этом OTP.

8t.jpg

Для начала обратим внимание на отладочную плату. Нам необходимо выбрать режим работы микроконтроллера и задать его с помощью бит MODE [7:0]. Мы будем использовать режим "WAIT_BOOT_JA". Таким образом убедимся, что на нашей отладочной плате перемычки XP4-XP11 выставлены в положение "0". Теперь можно подключать отладчик к JTAG_A и начинать работу. Перед тем, как приступить к созданию нового проекта, необходимо добавить поддержку процессора 1986ВЕ8Т в Keil, поскольку в официальном паке от Миландра его нет. Загрузить неофициальный PACK можно по данной ссылке. Выполнив установку переходим к созданию проекта.

Создание и настройка проекта

Начинаем как всегда: Project→New Project. Затем нам будет предложено выбрать "Device", после установки PACK'a нам станет доступна секция CORTEX-M4F и выбираем MDR32F8.

Следующий этап - выбор периферии. Для нашего проекта нам потребуется: Board Setup, Startup, CLKCTRL, PORT.

1.jpg

Теперь переходим к настройкам. Переходим в Project→Options of Target. Начинаем по порядку: во вкладке "Device" мы уже выбрали процессор поэтому идём сразу на Target. Т.к. мы установили поддержку данного процессора для Keil'a, адреса памяти должны выставиться следующим образом:

Во вкладках: Output, Listing, User, C/C++, Asm, изменений не производим, в Linker ставим "Use Memory Layout from Target Dialog".

Теперь вкладка Debug. Как ранее было отмечено, 1986ВЕ8Т вместо Flash памяти содержит однократно программируемую OTP и отладку нужно производить в ОЗУ. А для запуска из ОЗУ необходимо подключать файл инициализации Start.ini.

Содержание файла 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

Также можно скачать данный файл по ссылке, поместить его в папку с проектом и указать расположение к нему. Оставаясь все на вкладке "Debug", указав нужный отладчик заходим в настройки и здесь ещё 3 вкладки Debug, Trace, Flash Download. На первой вкладке (Debug опять, не путать с прошлой) все стандартные настройки, представлены на скриншоте. В зависимости от того какой у Вас отладтчик это окно может несколько отличаться. В нашем случае на ULINK2:

Во вкладку Trace можно смело пропускать и перейти к Flash Download. Здесь необходимо внимательно задать RAM for Algorithm: Start 0x20000000 Size 0x8000. В Download Function выбрать Do not Erase. Поскольку Flash у нас нет соответственно и FLM файл добавлять не надо.

Осталась последняя вкладка "Options of Target" Utilities. В ней выбираем "Use External Tool for Flash Programming", то есть опять же выключаем загрузку Flash.

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

prog/spec/proj_1986be8t.txt · Последнее изменение: 2022/04/03 23:09 (внешнее изменение)