[i] Запуск микросхем MDR1215LGI
Микросхемы MDR1215LGI функционально аналогичны микросхемам MDR1206FI за исключением корпуса (и внутренней разварки выводов), а также некоторых особенностей, которые описаны ниже.
В рамках данной статьи приводится базовая информация для использования микросхем MDR1215LGI.
1. Создание и запуск проекта HelloWorld в IDE Eclipse и IAR EW for RISC-V, особенности работы
Вся информация из статей [i] Создаем проект для МК MDR1206FI, MDR1206AFI в IDE Eclipse и [i] Создаем проект для МК MDR1206FI, MDR1206AFI в IAR EW for RISC-V касательно микросхем MDR1206FI применима к MDR1215LGI, поэтому по части установки ПО и настройки проекта следует ориентироваться на информацию из этой статьи.
При подключении отладчиком к микросхеме по JTAG выводы микросхемы в функции JTAG должны быть стандартно доопределены до высокого уровня внешними резисторами доопределения от 4,7 кОм до 10 кОм с учетом того, чтобы эти подтяжки не влияли на работу системы.
Основные отличия относительно MDR1206FI, на которые стоит обратить внимание:
-
Загрузочная программа для микросхем MDR1206(A)FI к микросхемам MDR1215LGI не применима и должна использоваться отдельная загрузочная программа для микросхем MDR1215LGI.
-
В загрузочной программе микросхем MDR1215LGI осуществляется настройка выводов GPIO, не выведенных в качестве выводов микросхем MDR1215LGI, как технологических выводов. Перенастраивать данные технологические выводы GPIO нельзя, что необходимо предусмотреть в основном ПО. В качестве технологического вывода выступает, например, PD11, настраиваемый как цифровой выход в функции MODE=00 с состоянием высокого уровня.
-
Важно: следует использовать только те выводы, которые разведены в данном корпусе - это PA[9:6] и PD5, PD7. Неиспользуемые в микросхеме MDR1215LGI выводы GPIO при настройке PA[9:6] и PD5, PD7 должны быть замаскрованы, а настройку других портов (порта C) проводить не допускается. Например, в корпусе вывод PD12 микросхемы подключен к питанию, вывод PC3 подключен к земле, и их настройка может привести к выходу микросхемы из строя. Помимо этого, разварка кристалла может изменяться (без изменения доступного потребителю функционала) для повышения коэффициента выхода годных.
-
Ограничение на использование только разведенных в корпусе выводов применимо и для специальных выводов, таких как SW (настройка данного функционал в BKP не приведет к выводу микросхемы из строя, но не имеет смысла - в частности, значения WAKEUP3-WAKEUP1 всегда равны 0).
-
У микросхем MDR1215LGI вывод nRESET доопределен до высокого уровня внутри корпуса и в связи с крайне ограниченным количеством выводов GPIO в загрузочной программе отсутствует выбор режима загрузки - при запуске загрузочная программа после необходимых настроек передает управление в основную Flash-память. То есть записываемое программное обеспечение начинает работу сразу при подаче питания и, если каким-то образом нарушается доступ по JTAG (например, переопределение функций выводов GPIO, совмещенных с JTAG, или "поломка" тактирования - см. [i] МК не определяется по интерфейсу JTAG/SWD. Восстановление работы МК), то восстановить доступ к JTAG будет или крайне затруднительно, или невозможно. Поэтому для предосторожности в основной программе нужно первыми инструкциями ввести задержку и внимательно настраивать выводы GPIO.
Код базового примера "HelloWorld" с переключением выводов PD5, PD7 при использовании SPL MDR32VF0xI v0.1.0 приведен ниже:
/* Includes ------------------------------------------------------------------*/
#include "MDR32VF0xI_config.h"
#include "MDR32VF0xI_rst_clk.h"
#include "MDR32VF0xI_port.h"
/* Private define ------------------------------------------------------------*/
#define LED_PORT MDR_PORTD
#define LED_PORT_CLK RST_CLK_PCLK_PORTD
#define LED_PIN_1 PORT_PIN_7
#define LED_PIN_2 PORT_PIN_5
/* Private variables ---------------------------------------------------------*/
PORT_InitTypeDef PORT_InitStructure;
uint32_t DelayCnt = 0;
/* Main function */
int main()
{
RST_CLK_DeInit();
for (uint32_t i = 0; i < 1000000; i++) {}
RST_CLK_HCLK_ClkSelection(RST_CLK_CPU_HCLK_CLK_SRC_HSI);
RST_CLK_PCLKCmd(LED_PORT_CLK, ENABLE);
PORT_StructInit(&PORT_InitStructure);
PORT_InitStructure.PORT_Pin = (LED_PIN_1 | LED_PIN_2);
PORT_InitStructure.PORT_Direction = PORT_DIRECTION_OUT;
PORT_InitStructure.PORT_Function = PORT_FUNCTION_PORT;
PORT_InitStructure.PORT_Mode = PORT_MODE_DIGITAL;
PORT_InitStructure.PORT_Power = PORT_POWER_NOMINAL_UPTO_2mA;
PORT_Init(LED_PORT, &PORT_InitStructure);
PORT_SetBits(LED_PORT, (LED_PIN_1 | LED_PIN_2));
while (1) {
if (DelayCnt++ >= 0x00010000) {
DelayCnt = 0;
PORT_ToggleBit(LED_PORT, (LED_PIN_1 | LED_PIN_2));
}
}
}
2. Использование выводов GPIO, совмещенных с JTAG
При разрешенной работе порта JTAG количество доступных для использования выводов GPIO у микросхем MDR1215LGI ограничено двумя выводами (PD5 и PD7). Их количество можно расширить до 6 за счет отключения JTAG. Аппаратно отключение JTAG осуществляется с помощью сброса в 0 бита BKP_LDO.JTAG_ON батарейного домена. Для записи в данный бит предварительно необходимо разрешить тактирование блока BKP в регистре PER2_CLOCK контроллера тактовой частоты и записать ключ 0x8555AAA1 в регистр BKP_WPR батарейного домена. После отключения JTAG выводы PA6-PA9 можно настраивать в требуемую функцию.
Но важно понимать, что отключение JTAG исполняемым из Flash-памяти ПО может повлечь за собой полную потерю возможности подключения по JTAG в дальнейшем. Поэтому перед отключением JTAG для возможности подключения к микроконтроллеру отладчиком в начале основной программы необходимо выставить достаточную задержку (например, 1 секунду), чтобы был временной промежуток между подачей питания и отключением JTAG.
Сохранить статью в PDF