pokk 0 12 марта, 2018 Опубликовано 12 марта, 2018 · Жалоба Добрый день, понадобилось использовать вывод 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 2 12 марта, 2018 Опубликовано 12 марта, 2018 · Жалоба Добрый день, понадобилось использовать вывод 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 0 12 марта, 2018 Опубликовано 12 марта, 2018 (изменено) · Жалоба Глянул ассемблер все правильно 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 раз было) Изменено 12 марта, 2018 пользователем pokk Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SSerge 4 12 марта, 2018 Опубликовано 12 марта, 2018 · Жалоба Контроллер, то наверное F103? У него три бита в этом регистре write-only https://electronix.ru/forum/index.php?showtopic=113881 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
amiller 2 12 марта, 2018 Опубликовано 12 марта, 2018 · Жалоба Да уж. Сейчас обратил внимание, что эти 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 не используется. Ну и становится понятно, почему в отладке эти биты могут читаться как попало. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться