Перейти к содержанию
    

IAR v6.5 выкл JTAG

Добрый день, понадобилось использовать вывод JTDO сделал так(в принципе все работает)

#define AFIO_MAPR_SWJ_CFG_JTAGDISABLE        ((uint32_t)0x02000000)        /*!< JTAG-DP Disabled and SW-DP Enabled */

    RCC->APB2ENR |=RCC_APB2Periph_AFIO;
    AFIO->MAPR   |= AFIO_MAPR_SWJ_CFG_JTAGDISABLE; // 25 бит все как по даташиту JTAG-DP Disabled and SW-DP Enabled

сделал так смотрю в отладке IAR а он мне пишет что регист AFIO->MAPR=0x04000000 (26 бит)

это такой глюк IAR ?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Добрый день, понадобилось использовать вывод JTDO сделал так(в принципе все работает)

#define AFIO_MAPR_SWJ_CFG_JTAGDISABLE        ((uint32_t)0x02000000)        /*!< JTAG-DP Disabled and SW-DP Enabled */

    RCC->APB2ENR |=RCC_APB2Periph_AFIO;
    AFIO->MAPR   |= AFIO_MAPR_SWJ_CFG_JTAGDISABLE; // 25 бит все как по даташиту JTAG-DP Disabled and SW-DP Enabled

сделал так смотрю в отладке IAR а он мне пишет что регист AFIO->MAPR=0x04000000 (26 бит)

это такой глюк IAR ?

Возможно CMSIS умничает с переопределением дефайнов.

В этом регистре к JTAG относится 3 бита. 24,25 - частичный ремап, 26 бит - полный ремап.

Попробуйте ручками в регистр записать то, что надо.

А потом уже разбирайтесь с кодом, что же там реально пишется в регистр. В ассемблере посмотреть вовсе несложно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Глянул ассемблер все правильно 25 бит записывается.

//   31     AFIO->MAPR   |= AFIO_MAPR_SWJ_CFG_JTAGDISABLE; // JTAG-DP Disabled and SW-DP Enabled
        LDR.N    R0,??Init_power_0+0x4 ;; 0x40010004
        LDR      R0,[R0, #+0]
        ORRS     R0,R0,#0x2000000
        LDR.N    R1,??Init_power_0+0x4 ;; 0x40010004
        STR      R0,[R1, #+0]

Самое интересное что если бы устанавливался бит 26, то отладка бы отваливалась, но такого не происходит(хотя как-то 1 раз было)

Изменено пользователем pokk

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Контроллер, то наверное F103? У него три бита в этом регистре write-only

https://electronix.ru/forum/index.php?showtopic=113881

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да уж. Сейчас обратил внимание, что эти 3 бита действительно write-only у всех, начиная с 100 и заканчивая 107.

Это означает, что любое изменение этого регистра "стандартным" способом:

    48          	AFIO_MAPR_bit.SPI1_REMAP = 1;				// SPI1 remaped !!!
  \   00000032   0x.... 0x....      LDR.W    R0,??DataTable4_2  ;; 0x40010004
  \   00000036   0x6800             LDR      R0,[R0, #+0]
  \   00000038   0xF050 0x0001      ORRS     R0,R0,#0x1
  \   0000003C   0x.... 0x....      LDR.W    R1,??DataTable4_2  ;; 0x40010004
  \   00000040   0x6008             STR      R0,[R1, #+0]

Может приводить к непредсказуемым значениям бит SWJ_CFG.

Странно, что на практике это пока не приводило к проблемам.

Если инициализация периферии статическая, то целесообразно в конце принудительно писать нужное значение в SWJ_CFG даже в том случае, если remap jtag не используется.

Ну и становится понятно, почему в отладке эти биты могут читаться как попало.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...