jcxz 243 16 июня, 2019 Опубликовано 16 июня, 2019 · Жалоба 12 минут назад, adnega сказал: Попробуйте сделать пустой обработчик SVCall (или светодиодиком мигнуть). Скорее всего, у вас обработчик SVCall не готов к асинхронному вызову, т.к. в стеке будет будет далеко не контекст инструкции svc (swi). У меня готов. Я же писал уже тут: При таком вызове мой обработчик выдаёт сообщение: #define TRAP_SVC_UNKNOWN 0x143 //неизвестнаЯ функциЯ SVC предусмотренное ещё при его разработке. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 16 июня, 2019 Опубликовано 16 июня, 2019 · Жалоба dw0 = SCB->SHCSR; fm0 = get_faultmask(); asm("cpsid f"); __ISB(); __DSB(); fm1 = get_faultmask(); __ISB(); __DSB(); SCB->SHCSR = (1 << 15); __ISB(); __DSB(); dw1 = SCB->SHCSR; __ISB(); __DSB(); asm("cpsie f"); __ISB(); __DSB(); fm2 = get_faultmask(); dw2 = SCB->SHCSR; Результат: Цитата dw0=00000000 dw1=00008000 dw2=00000000 fm0=00000000 fm1=00000001 fm2=00000000 Но самое главное, что обработчик SVCall вызывается, т.к. он пишет послание в буфер консоли, и ничего не зависает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 243 16 июня, 2019 Опубликовано 16 июня, 2019 · Жалоба 20 минут назад, adnega сказал: Результат: А адрес записи где? Цитата Но самое главное, что обработчик SVCall вызывается, т.к. он пишет послание в буфер консоли, и ничего не зависает. Он может вызываться уже после этого. Может вообще по другой причине. Может у Вас вообще кеширование этой области 0xE000E000 включено в MPU и SCB->SHCSR=1<<15 доходит до периферии уже после разрешения фаултов? ISB/DSB конечно хорошо, но кто его знает... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 16 июня, 2019 Опубликовано 16 июня, 2019 · Жалоба 38 минут назад, jcxz сказал: но кто его знает... Могу сделать минимальный проект под STM32. У вас есть какая-нибудь discovery? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 243 16 июня, 2019 Опубликовано 16 июня, 2019 · Жалоба 17 минут назад, adnega сказал: Могу сделать минимальный проект под STM32. У вас есть какая-нибудь discovery? Не надо. Нет желания тратить время на ненужную ерунду. Установил бит1 в == лог."1" в регистре MPU_CTRL и стало работать так же как у вас: запоминаться 15-й бит в SHCSR, а после разрешения fault-ов - вызываться исключение SVC. Раньше этот бит (HFNMIENA) у меня был ==0. У меня код всегда выполняется при включенном MPU. За исключением самого старта ПО. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться