Vasil_Riabko 0 September 2, 2019 Posted September 2, 2019 · Report post 34 minutes ago, jcxz said: Откройте уж наконец-то мануал (ARM ® v7-M Architecture Reference Manual) и прочитайте описание битов DWT_CTRL!: Значит то, что работает DWT у Вас только потому, что 24-й бит в NVIC.DEMCR уже оказывается установленным (возможно ставится отладчиком). Если отладчик его не установит, то и работать DWT не будет. Описание битов DEMCR следует искать опять-же в том же мануале. 1. ARM® Cortex®-M4 ProcessorRevision: r0p1Technical Reference Manua ( Речь идет о процессоре STM32L476 - ARM® Cortex®-M4) раздел 9.2 DWT Programmers’ model Регистр DWT_CTRL - Read/write . 2. В предыдущем посте написано : Что касается регистра DEMCR то бит TRCENA при старте отладчика IAR установлен в 1 и никаких телодвижений не надо . А вот разрешить работу DWT надо DWT->CTRL =0X40000001 . Вопрос и возник из-за того что отладчик не включает DWT (возможно я не нашел в опциях разрешение работы DWT) . 3. обьясните что значит NVIC.DEMCR |= B24; //разрешение работы DWT.CYCCNT точнее NVIC.DEMCR может все таки DEMCR. TRCENA . Quote Share this post Link to post Share on other sites More sharing options...
jcxz 7 September 2, 2019 Posted September 2, 2019 · Report post 2 минуты назад, Vasil_Riabko сказал: 1. ARM® Cortex®-M4 ProcessorRevision: r0p1Technical Reference Manua ( Речь идет о процессоре STM32L476 - ARM® Cortex®-M4) раздел 9.2 DWT Programmers’ model Регистр DWT_CTRL - Read/write . Опять 25.... Найдите описание битов этого регистра! Уж и не знаю как писать.... В этом же мануале указано где смотреть. Что вы в описание регистров упёрлись??? Это R/W - для всего регистра. Означает оно, что в регистре есть биты R и биты W. И ничего более. А указанные старшие биты - R. И смысла писать в них что-то - нету никакого. Я вам уже и выдержку из мануала привёл.... 2 минуты назад, Vasil_Riabko сказал: обьясните что значит NVIC.DEMCR |= B24; Это запись лог.1 в 24-й бит DEMCR. Quote Share this post Link to post Share on other sites More sharing options...
Nixon 0 September 2, 2019 Posted September 2, 2019 · Report post struct TICKCOUNTER { inline static void RESET ( void ) { CoreDebug->DEMCR |= 0x01000000; DWT->CYCCNT = 0; DWT->CTRL = 0; } inline static void START ( void ) { DWT->CTRL |= 1; } inline static uint32_t STOP ( void ) { DWT->CTRL &= ~1; return DWT->CYCCNT; } }; Сделано по документации на M3. Quote Share this post Link to post Share on other sites More sharing options...
Vasil_Riabko 0 September 2, 2019 Posted September 2, 2019 · Report post 19 часов назад, jcxz сказал: Откройте уж наконец-то мануал (ARM ® v7-M Architecture Reference Manual) и прочитайте описание битов DWT_CTRL!: DWT_CTRL:NUMCOMP, bits[31:28] Number of comparators implemented. A value of zero indicates no comparator support. These bits are read-only. The reset value is IMPLEMENTATION DEFINED. Значит то, что работает DWT у Вас только потому, что 24-й бит в NVIC.DEMCR уже оказывается установленным (возможно ставится отладчиком). Если отладчик его не установит, то и работать DWT не будет. Описание битов DEMCR следует искать опять-же в том же мануале. Внимательно прочтиайте приведенный вами текст bits[31:28] ... These bits are read-only. есть регистр регистра DEMCR и бит TRCENA . Чо за бит DEMCR ? 17 часов назад, Nixon сказал: struct TICKCOUNTER { inline static void RESET ( void ) { CoreDebug->DEMCR |= 0x01000000; DWT->CYCCNT = 0; DWT->CTRL = 0; } inline static void START ( void ) { DWT->CTRL |= 1; } inline static uint32_t STOP ( void ) { DWT->CTRL &= ~1; return DWT->CYCCNT; } }; Сделано по документации на M3. Спасибо ! Я так понимаю с отладчика запустить счетчик циклов нельзя. надо ручками прописать в программе. Quote Share this post Link to post Share on other sites More sharing options...
VladislavS 0 September 2, 2019 Posted September 2, 2019 · Report post 3 часа назад, Vasil_Riabko сказал: Я так понимаю с отладчика запустить счетчик циклов нельзя. надо ручками прописать в программе. Почему нельзя? Кто запретил? В старые добрые времена внешнюю SDRAM запускали в макросе и загружали в неё программу для отладки. А тут один бит записать. Quote Share this post Link to post Share on other sites More sharing options...
Arlleex 5 September 2, 2019 Posted September 2, 2019 · Report post 5 часов назад, Nixon сказал: ... DWT->CTRL |= 0; ... А это зачем? Quote Share this post Link to post Share on other sites More sharing options...
Nixon 0 September 3, 2019 Posted September 3, 2019 · Report post 11 часов назад, Arlleex сказал: А это зачем? Мой бездумный копипаст :) . Спасибо за указание на ошибку. Исправил. Quote Share this post Link to post Share on other sites More sharing options...
jcxz 7 September 3, 2019 Posted September 3, 2019 · Report post 15 часов назад, VladislavS сказал: В старые добрые времена внешнюю SDRAM запускали в макросе и загружали в неё программу для отладки. Почему "в старые"? И сейчас так делаем. Quote Share this post Link to post Share on other sites More sharing options...
Vasil_Riabko 0 September 3, 2019 Posted September 3, 2019 · Report post 3 hours ago, jcxz said: Почему "в старые"? И сейчас так делаем. Не увидел ответа. Можно установить бит 0 в регистре DWT->CTRL ? Quote Share this post Link to post Share on other sites More sharing options...
Nixon 0 September 3, 2019 Posted September 3, 2019 · Report post Можно. В настройках проекта, в категории Debugger увидите поле "Setup macro". Включите галочку и выберите/создайте макро файл с командами Язык этого файла С-подобен, пример execUserFlashInit() { // unlock flash __writeMemory32(0x45670123, 0x40023C04, "Memory"); // FLASH->FKEYR = FLASH_KEY1; __writeMemory32(0xCDEF89AB, 0x40023C04, "Memory"); // FLASH->FKEYR = FLASH_KEY2; } Более подробно читайте в help раздел "C-Spy Macro". По сути вы можете со своей целевой платформой творить все что захотите не загружая компилированную программу Quote Share this post Link to post Share on other sites More sharing options...
Vasil_Riabko 0 September 3, 2019 Posted September 3, 2019 · Report post jcxz 4 hours ago, Nixon said: Можно. В настройках проекта, в категории Debugger увидите поле "Setup macro". Включите галочку и выберите/создайте макро файл с командами Язык этого файла С-подобен, пример execUserFlashInit() { // unlock flash __writeMemory32(0x45670123, 0x40023C04, "Memory"); // FLASH->FKEYR = FLASH_KEY1; __writeMemory32(0xCDEF89AB, 0x40023C04, "Memory"); // FLASH->FKEYR = FLASH_KEY2; } Более подробно читайте в help раздел "C-Spy Macro". По сути вы можете со своей целевой платформой творить все что захотите не загружая компилированную программу Спасибо понятно . Вопрос был к уважаемому JCZX он утверждал что регистр DWT->CTRL только для чтения Quote Share this post Link to post Share on other sites More sharing options...
alag57 0 September 3, 2019 Posted September 3, 2019 · Report post 1 hour ago, Vasil_Riabko said: Вопрос был к уважаемому JCZX он утверждал что регистр регистре DWT->CTRL только для чтения Сравните ваше желание: Quote Можно установить бит 0 в регистре DWT->CTRL ? С вашим исполнением: Quote DWT->CTRL =0X40000001; Замечанием от jcxz: Quote bits[31:28] ... These bits are read-only И кодом, который вам предложил Nixon: Quote DWT->CTRL |= 1; Quote Share this post Link to post Share on other sites More sharing options...
jcxz 7 September 3, 2019 Posted September 3, 2019 · Report post 7 часов назад, Vasil_Riabko сказал: Спасибо понятно . Вопрос был к уважаемому JCZX он утверждал что регистр DWT->CTRL только для чтения Где я такое утверждал???? И кто такой JCZX ??? Quote Share this post Link to post Share on other sites More sharing options...