Проблема с использованием портов совмещенных с JTAG

Вопросы по определенному микроконтроллеру необходимо задавать в соответствующем подразделе.
Александр Панов
Сообщения: 4
Зарегистрирован: 2016-апр-06 19:38
Организация: ОАО ОНИИП

Проблема с использованием портов совмещенных с JTAG

Сообщение Александр Панов » 2016-апр-20 01:03

При разработке изделия я столкнулся со следующей проблемой. В разрабатываемом устройстве мне необходимо использовать порт 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

A_D
Сообщения: 123
Зарегистрирован: 2014-авг-11 19:26

Re: Проблема с использованием портов совмещенных с JTAG

Сообщение A_D » 2016-апр-20 12:22

Ну вроде бы вполне ясно написано, что в 000 режиме будет работать JTAG. А что бы он не работал - надо выбрать другие режимы, последние два не подходят для постоянной работы, а один без использования JTAG работает с внешней памятью только....
Снимок.PNG
https://adelectronics.ru
Заходи, не стесняйся! ;)

Александр Панов
Сообщения: 4
Зарегистрирован: 2016-апр-06 19:38
Организация: ОАО ОНИИП

Re: Проблема с использованием портов совмещенных с JTAG

Сообщение Александр Панов » 2016-апр-20 18:38

Это я понял. В том то вопрос и заключался как можно переконфигурировать порты, чтобы отключить сигнал TDO. Если конечно это возможно. Запись PORTD=DATA; компилятором (Keil v5.18) не воспринимается, а при записи в порт через регистр RXTX как я понял происходит логическое ИЛИ с сигналом TDO, который поддерживает вывод в 1.

Аватара пользователя
R Max
Сообщения: 273
Зарегистрирован: 2011-авг-21 18:55

Re: Проблема с использованием портов совмещенных с JTAG

Сообщение R Max » 2016-апр-20 19:13

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!

Александр Панов
Сообщения: 4
Зарегистрирован: 2016-апр-06 19:38
Организация: ОАО ОНИИП

Re: Проблема с использованием портов совмещенных с JTAG

Сообщение Александр Панов » 2016-апр-20 20:25

R Max спасибо. Завтра попробую.

Александр Панов
Сообщения: 4
Зарегистрирован: 2016-апр-06 19:38
Организация: ОАО ОНИИП

Re: Проблема с использованием портов совмещенных с JTAG

Сообщение Александр Панов » 2016-апр-21 15:43

Спасибо всем, кто попытался помочь. Моя ошибка была в том, что я перед записью в 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 работает.

MWaso
Сообщения: 22
Зарегистрирован: 2016-фев-26 09:54
Организация: АО НИИПП г.Томск

Re: Проблема с использованием портов совмещенных с JTAG

Сообщение MWaso » 2016-июл-21 10:22

Скажите пожалуйста, можно ли использовать ножки портов, совмещенные с незадействованным выводом активного JTAG, если используется двухпроводной интерфейс SWD. Т.е. в SWD используются TMS и TCK, можно ли при этом использовать для своих нужд выводы JRST, JTDO, JTDI? Стандартные библиотеки, естественно, не используем.

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

ЧумА
Сообщения: 512
Зарегистрирован: 2009-сен-21 12:39

Re: Проблема с использованием портов совмещенных с JTAG

Сообщение ЧумА » 2016-июл-21 13:43

Есть успешный опыт использования TDO как выхода :). И даже TMS, TCK как входов, с прошивкой по SWD

Cas
Сообщения: 10
Зарегистрирован: 2013-апр-23 20:56

Re: Проблема с использованием портов совмещенных с JTAG

Сообщение Cas » 2016-авг-01 20:45

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

ЧумА
Сообщения: 512
Зарегистрирован: 2009-сен-21 12:39

Re: Проблема с использованием портов совмещенных с JTAG

Сообщение ЧумА » 2016-авг-02 08:45

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

Игорь_мать_его
Сообщения: 3
Зарегистрирован: 2015-июн-24 11:07

Re: Проблема с использованием портов совмещенных с JTAG

Сообщение Игорь_мать_его » 2017-апр-28 17:22

В ножки 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
Сообщения: 8
Зарегистрирован: 2019-мар-25 11:40
Организация: Частное лицо

Re: Проблема с использованием портов совмещенных с JTAG

Сообщение Дмитрий2019 » 2019-мар-25 15:25

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

Sergey3141592
Сообщения: 76
Зарегистрирован: 2018-дек-17 15:20
Организация: частное лицо

Re: Проблема с использованием портов совмещенных с JTAG

Сообщение Sergey3141592 » 2019-мар-25 15:38

Рекомендуется вообще не использовать тот порт (т.е. все пины порта), через который производится отладка/прошивка jtag. В противном случае есть риск вообще не подключиться к контроллеру через данный jtag. Как минимум в Phyton Code Master Arm это так.

andelie
Сообщения: 121
Зарегистрирован: 2014-июн-25 09:29

Re: Проблема с использованием портов совмещенных с JTAG

Сообщение andelie » 2019-мар-25 16:12

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

ЧумА
Сообщения: 512
Зарегистрирован: 2009-сен-21 12:39

Re: Проблема с использованием портов совмещенных с JTAG

Сообщение ЧумА » 2019-мар-25 16:25

Дмитрий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.

Ответить

Вернуться в «32-разрядные микроконтроллеры (1986ВЕ9х, 1986ВЕ1Т, 1986ВЕ2х, 1986ВЕ3Т, 1986ВЕ4У, 1986ВЕ8Т, 1923ВК014)»