Миландр

Ключевым подразделением нашей компании
является Центр Проектирования интегральных микросхем
Текущее время: 2019-дек-14 16:10

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 25 сообщений ]  На страницу 1 2 »
Автор Сообщение
СообщениеДобавлено: 2016-апр-20 01:03 
Не в сети

Зарегистрирован: 2016-апр-06 19:38
Сообщения: 4
Организация: ОАО ОНИИП
При разработке изделия я столкнулся со следующей проблемой. В разрабатываемом устройстве мне необходимо использовать порт D на вывод и при этом загружать рабочую программу из FLASH памяти. Но при установке битов MODE[2:0] в состояние 000 вывод PD4 все время находится в состоянии 1. Директивы #define USE_JTAG_A #define USE_JTAG_B в файле MDR32F9Qx_config.h я закоментировал. В 6 и 7 биты регистра MDR_BKP->REG_0E прописываю 0.
Подскажите пожалуйста как переконфигурировать функции порта D с использования JTAG на обычные порты ввода/вывода.
Да, порт B в моей схеме тоже используется, поэтому загрузка с MODE[2:0] 001 не подходит.
Пишу данные командой MDR_PORTD->RXTX=DATA;
Микросхема К1986ВЕ92QI


Вынести предупреждение
Вернуться к началу
СообщениеДобавлено: 2016-апр-20 12:22 
Не в сети

Зарегистрирован: 2014-авг-11 19:26
Сообщения: 123
Ну вроде бы вполне ясно написано, что в 000 режиме будет работать JTAG. А что бы он не работал - надо выбрать другие режимы, последние два не подходят для постоянной работы, а один без использования JTAG работает с внешней памятью только....
Вложение:
[ attachment ]
Снимок.PNG [ 136.85 КБ | 9363 просмотра ]

_________________
https://adelectronics.ru
Заходи, не стесняйся! ;)


Вынести предупреждение
Вернуться к началу
СообщениеДобавлено: 2016-апр-20 18:38 
Не в сети

Зарегистрирован: 2016-апр-06 19:38
Сообщения: 4
Организация: ОАО ОНИИП
Это я понял. В том то вопрос и заключался как можно переконфигурировать порты, чтобы отключить сигнал TDO. Если конечно это возможно. Запись PORTD=DATA; компилятором (Keil v5.18) не воспринимается, а при записи в порт через регистр RXTX как я понял происходит логическое ИЛИ с сигналом TDO, который поддерживает вывод в 1.


Вынести предупреждение
Вернуться к началу
СообщениеДобавлено: 2016-апр-20 19:13 
Не в сети
Аватара пользователя

Зарегистрирован: 2011-авг-21 18:55
Сообщения: 273
1 висит возможно из-за того, что включена подтяжка внутри порта вывода к VCC (регистр MDR_PORTD->PULL).

Порт D для вывода TDO можно настроить так:
#define PORT_JTAG_Msk 0x001F

#define JB_TDO_Pos 4
#define JB_TDO_Msk (1<<4)

#define	RST_CLK_PER_CLOCK_PCLK_EN_PORTD_Msk	(1<<24)
#define	PORT_FUNC_MODE_Msk	3
#define	PORT_PWR_Msk	3

MDR_RST_CLK->PER_CLOCK |= RST_CLK_PER_CLOCK_PCLK_EN_PORTD_Msk;

MDR_PORTD->ANALOG |= JB_TDO_Msk;
MDR_PORTD->FUNC &= ~(PORT_FUNC_MODE_Msk<<JB_TDO_Pos*2);
MDR_PORTD->OE |= JB_TDO_Msk;
MDR_PORTD->PWR |= (PORT_PWR_Msk<<JB_TDO_Pos*2);
MDR_PORTD->PULL &= ~((1<<JB_TDO_Pos)|(1<<(JB_TDO_Pos+PORT_PULL_UP_Pos)));
MDR_PORTD->PD &= ~JB_TDO_Msk;
Из-за того, что JTAG совмещён c выводами с GPIO и альтернативными функциями, необходимо специальным образом устанавливать и сбрасывать выводы, сначала считывая весь порт, иначе отладка через среду проектирования будеть выключаться на какой-то инструкции:
// Установка бита JB_TDO
PORTD->RXTX = JB_TDO_Msk | (PORTD->RXTX & (~PORT_JTAG_Msk));
// Сброс бита JB_TDO
PORTD->RXTX &= ~(JB_TDO_Msk | PORT_JTAG_Msk);

_________________
Hack the Planet!


Вынести предупреждение
Вернуться к началу
СообщениеДобавлено: 2016-апр-20 20:25 
Не в сети

Зарегистрирован: 2016-апр-06 19:38
Сообщения: 4
Организация: ОАО ОНИИП
R Max спасибо. Завтра попробую.


Вынести предупреждение
Вернуться к началу
СообщениеДобавлено: 2016-апр-21 15:43 
Не в сети

Зарегистрирован: 2016-апр-06 19:38
Сообщения: 4
Организация: ОАО ОНИИП
Спасибо всем, кто попытался помочь. Моя ошибка была в том, что я перед записью в 6 и 7 биты регистра MDR_BKP->REG_0E "0" не включил тактирование регистра MDR_BKP. Проблема решилась просто включением тактирования регистра BKP в MDR_RST_CLK->PER_CLOCK (27 бит).
После этого инструкции типа MDR_PORTD->RXTX = DATA; работают корректно.
Для наступивших на те-же грабли:
1 включаем тактирование регистра BKP (1 в 27-й бит MDR_RST_CLK->PER_CLOCK)
2 запрещаем не нужный в данный момент JTAG ("0" в 6 или 7 бит MDR_BKP->REG_0E)
3 порт, совмещенный с JTAG работает.


Вынести предупреждение
Вернуться к началу
СообщениеДобавлено: 2016-июл-21 10:22 
Не в сети

Зарегистрирован: 2016-фев-26 09:54
Сообщения: 22
Организация: АО НИИПП г.Томск
Скажите пожалуйста, можно ли использовать ножки портов, совмещенные с незадействованным выводом активного JTAG, если используется двухпроводной интерфейс SWD. Т.е. в SWD используются TMS и TCK, можно ли при этом использовать для своих нужд выводы JRST, JTDO, JTDI? Стандартные библиотеки, естественно, не используем.

Имеется частично успешный опыт такого использования выводов на микроконтроллере STM32F103 - там проблема возникла только с выводом JTDI (не переключался в режим выхода).


Вынести предупреждение
Вернуться к началу
СообщениеДобавлено: 2016-июл-21 13:43 
Не в сети

Зарегистрирован: 2009-сен-21 12:39
Сообщения: 513
Есть успешный опыт использования TDO как выхода :). И даже TMS, TCK как входов, с прошивкой по SWD


Вынести предупреждение
Вернуться к началу
СообщениеДобавлено: 2016-авг-01 20:45 
Не в сети

Зарегистрирован: 2013-апр-23 20:56
Сообщения: 10
ЧумА писал(а):
Есть успешный опыт использования TDO как выхода :). И даже TMS, TCK как входов, с прошивкой по SWD
А отладке это не мешает? У меня JTAG "отваливается" при записи в регистр RXTX, при этом в качестве выходов настроены пины не относящиеся к JTAG. Может подскажете как это обойти на 1986ВЕ9х?


Вынести предупреждение
Вернуться к началу
СообщениеДобавлено: 2016-авг-02 08:45 
Не в сети

Зарегистрирован: 2009-сен-21 12:39
Сообщения: 513
Цитата:
У меня JTAG "отваливается" при записи в регистр RXTX, при этом в качестве выходов настроены пины не относящиеся к JTAG.
Тема стара как форум :). Для нормальной работы отладчика завести тень порта, все манипуляции по записи в порт выполнять с тенью, затем копировать тень в порт. Пример:
shadow &= ~(1 << clr_bit);
shadow |= 1 << set_bit;
PORT = shadow;
Разряды задействованные в JTAG/SWD в "тени" не использовать.
P.S. В SPL это, вроде, как-то учтено.


Вынести предупреждение
Вернуться к началу
СообщениеДобавлено: 2017-апр-28 17:22 
Не в сети

Зарегистрирован: 2015-июн-24 11:07
Сообщения: 3
В ножки JTAG нельзя писать единицы, при записи в порт всегда делайте маску и сбрасывайте все биты JTAG в ноль:

void port_pin_clr(int port_base_addr, int pin_num)
{
uint32_t* port = (uint32_t*)port_base_addr;
#ifdef JTAG_B
if(port_base_addr == MDR_PORTD_BASE) *port = ~((1 << pin_num) | JTAG) & *port;
#else
if(port_base_addr == MDR_PORTB_BASE) *port = ~((1 << pin_num) | JTAG) & *port;
#endif
else *port &= ~(1 << pin_num);
}

void port_pin_set(int port_base_addr, int pin_num)
{
uint32_t* port = (uint32_t*)port_base_addr;
#ifdef JTAG_B
if(port_base_addr == MDR_PORTD_BASE) *port = (1 << pin_num) | *port & ~JTAG;
#else
if(port_base_addr == MDR_PORTB_BASE) *port = (1 << pin_num) | *port & ~JTAG;
#endif
else *port |= 1 << pin_num;
}


Вынести предупреждение
Вернуться к началу
СообщениеДобавлено: 2019-мар-25 15:25 
Не в сети

Зарегистрирован: 2019-мар-25 11:40
Сообщения: 8
Организация: Частное лицо
Здравствуйте уважаемые участники форума. Учусь программировать микроконтроллеры, второй день разбираюсь с интерфейсом Uart. Микроконтроллер К1986ВЕ92QI на отладочной плате Миландр, отладка через JTAG_A. Uart2 на порте D получился, и отправка, и прием данных. А вот с Uart1 разбираюсь на порте B. Понял, что есть особенности, но никак не пойму, будет ли вообще работать Uart1 на этом порте на выводах 5 и 6, которые не задействованы JTAG. CAN1 на выводах 2 и 3 этого порта?


Вынести предупреждение
Вернуться к началу
СообщениеДобавлено: 2019-мар-25 15:38 
Не в сети

Зарегистрирован: 2018-дек-17 15:20
Сообщения: 78
Организация: частное лицо
Рекомендуется вообще не использовать тот порт (т.е. все пины порта), через который производится отладка/прошивка jtag. В противном случае есть риск вообще не подключиться к контроллеру через данный jtag. Как минимум в Phyton Code Master Arm это так.


Вынести предупреждение
Вернуться к началу
СообщениеДобавлено: 2019-мар-25 16:12 
Не в сети

Зарегистрирован: 2014-июн-25 09:29
Сообщения: 121
Дмитрий2019
К пинам PB5 и PB6 на этой плате через перемычки подключаются кнопки, имеющие подтяжки к плюсу и конденсаторы к земле. Проверьте перемычки на обратной стороне платы: для PB5 и PB6 их надо поставить в положение OFF.
JTAG же в данном случае не может никак повлиять на работу UART.


Вынести предупреждение
Вернуться к началу
СообщениеДобавлено: 2019-мар-25 16:25 
Не в сети

Зарегистрирован: 2009-сен-21 12:39
Сообщения: 513
Дмитрий2019 писал(а):
Здравствуйте уважаемые участники форума. Учусь программировать микроконтроллеры, второй день разбираюсь с интерфейсом Uart. Микроконтроллер К1986ВЕ92QI на отладочной плате Миландр, отладка через JTAG_A. Uart2 на порте D получился, и отправка, и прием данных. А вот с Uart1 разбираюсь на порте B. Понял, что есть особенности, но никак не пойму, будет ли вообще работать Uart1 на этом порте на выводах 5 и 6, которые не задействованы JTAG. CAN1 на выводах 2 и 3 этого порта?
Собственно особенности:
Цитата:
При работе в режимах отладки JTAG_A не допускается запись "1" в порт PORTB.RXTX[0] - приведет к падению JTAG отладчика и PORTB.RXTX[1] - приведет к падению SWD отладчика. Аналогично для JTAG_B и порт PORTD.RXTX[0] и PORTD.RXTX[4]. Вызвано тем, что данные единицы в режимах отладки объединяются по логическому ИЛИ с сигналами JTAG|SW и портят их
Грубо говоря, UART и CAN идут "в обход" регистров RXTX и пользоваться ими можно. В частности, имеется положительный опыт с UART на PORTB.


Вынести предупреждение
Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 25 сообщений ]  На страницу 1 2 »

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя


Быстрые действия:
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти: 

Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB