Vasil_Riabko 1 2 сентября, 2019 Опубликовано 2 сентября, 2019 · Жалоба 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 . Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 241 2 сентября, 2019 Опубликовано 2 сентября, 2019 · Жалоба 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. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nixon 4 2 сентября, 2019 Опубликовано 2 сентября, 2019 · Жалоба 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. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vasil_Riabko 1 2 сентября, 2019 Опубликовано 2 сентября, 2019 · Жалоба 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. Спасибо ! Я так понимаю с отладчика запустить счетчик циклов нельзя. надо ручками прописать в программе. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 39 2 сентября, 2019 Опубликовано 2 сентября, 2019 · Жалоба 3 часа назад, Vasil_Riabko сказал: Я так понимаю с отладчика запустить счетчик циклов нельзя. надо ручками прописать в программе. Почему нельзя? Кто запретил? В старые добрые времена внешнюю SDRAM запускали в макросе и загружали в неё программу для отладки. А тут один бит записать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 187 2 сентября, 2019 Опубликовано 2 сентября, 2019 · Жалоба 5 часов назад, Nixon сказал: ... DWT->CTRL |= 0; ... А это зачем? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nixon 4 3 сентября, 2019 Опубликовано 3 сентября, 2019 · Жалоба 11 часов назад, Arlleex сказал: А это зачем? Мой бездумный копипаст :) . Спасибо за указание на ошибку. Исправил. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 241 3 сентября, 2019 Опубликовано 3 сентября, 2019 · Жалоба 15 часов назад, VladislavS сказал: В старые добрые времена внешнюю SDRAM запускали в макросе и загружали в неё программу для отладки. Почему "в старые"? И сейчас так делаем. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vasil_Riabko 1 3 сентября, 2019 Опубликовано 3 сентября, 2019 · Жалоба 3 hours ago, jcxz said: Почему "в старые"? И сейчас так делаем. Не увидел ответа. Можно установить бит 0 в регистре DWT->CTRL ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nixon 4 3 сентября, 2019 Опубликовано 3 сентября, 2019 · Жалоба Можно. В настройках проекта, в категории 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". По сути вы можете со своей целевой платформой творить все что захотите не загружая компилированную программу Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vasil_Riabko 1 3 сентября, 2019 Опубликовано 3 сентября, 2019 · Жалоба 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 только для чтения Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alag57 1 3 сентября, 2019 Опубликовано 3 сентября, 2019 · Жалоба 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; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 241 3 сентября, 2019 Опубликовано 3 сентября, 2019 · Жалоба 7 часов назад, Vasil_Riabko сказал: Спасибо понятно . Вопрос был к уважаемому JCZX он утверждал что регистр DWT->CTRL только для чтения Где я такое утверждал???? И кто такой JCZX ??? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться