Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: IAR v6.5 выкл JTAG
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > IAR
pokk
Добрый день, понадобилось использовать вывод 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 ?
amiller
Цитата(pokk @ Mar 12 2018, 06:24) *
Добрый день, понадобилось использовать вывод 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 бит - полный ремап.
Попробуйте ручками в регистр записать то, что надо.
А потом уже разбирайтесь с кодом, что же там реально пишется в регистр. В ассемблере посмотреть вовсе несложно.
pokk
Глянул ассемблер все правильно 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 раз было)
SSerge
Контроллер, то наверное F103? У него три бита в этом регистре write-only
https://electronix.ru/forum/index.php?showtopic=113881
amiller
Да уж. Сейчас обратил внимание, что эти 3 бита действительно write-only у всех, начиная с 100 и заканчивая 107.
Это означает, что любое изменение этого регистра "стандартным" способом:
CODE

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 не используется.
Ну и становится понятно, почему в отладке эти биты могут читаться как попало.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.