k000858 0 21 мая, 2014 Опубликовано 21 мая, 2014 · Жалоба Достаточно ли отключить тактирование определенной шины, что бы сбросить всю периферию, сидящую на этой шине? К примеру как это предлагается делать в HAL библиотеках: RCC->APB1RSTR = 0xFFFFFFFF; // FORCE_RESET RCC->APB1RSTR = 0x00; // RELEASE_RESET Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 21 мая, 2014 Опубликовано 21 мая, 2014 · Жалоба Достаточно ли отключить тактирование определенной шины, что бы сбросить всю периферию, сидящую на этой шине? К примеру как это предлагается делать в HAL библиотеках: RCC->APB1RSTR = 0xFFFFFFFF; // FORCE_RESET RCC->APB1RSTR = 0x00; // RELEASE_RESET Есть регистр, отвечающий за тактирование, а есть регистр, отвечающий за сброс периферии. Вы их не путаете? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k000858 0 21 мая, 2014 Опубликовано 21 мая, 2014 · Жалоба Есть регистр, отвечающий за тактирование, а есть регистр, отвечающий за сброс периферии. Вы их не путаете? да. все верно. затупил. выше описанный регистр как раз относится к регистру сброса. т.е. записав в эти регистры, сбросится вся периферия, сидящая на шине? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 21 мая, 2014 Опубликовано 21 мая, 2014 · Жалоба Самый кошерный способ - это сбросить МК полностью и сразу после сброса перейти в основную прошивку. Собственно, так я всегда и делаю. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Axel 1 21 мая, 2014 Опубликовано 21 мая, 2014 · Жалоба Отключение тактирования точно ничего не сбрасывает. Так что - или регистры RSTR, или общий ресет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k000858 0 21 мая, 2014 Опубликовано 21 мая, 2014 · Жалоба Самый кошерный способ - это сбросить МК полностью и сразу после сброса перейти в основную прошивку. Собственно, так я всегда и делаю. тогда попутный вопрос: при сбросе мк с помощью функции NVIC_SystemReset (из core_cm4.h CMSIS библиотеки) происходит полный сброс контроллера, включая сброс периферии (особенно интересуют прерывания) ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 21 мая, 2014 Опубликовано 21 мая, 2014 · Жалоба тогда попутный вопрос: при сбросе мк с помощью функции NVIC_SystemReset (из core_cm4.h CMSIS библиотеки) происходит полный сброс контроллера, включая сброс периферии (особенно интересуют прерывания) ? Да. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k000858 0 21 мая, 2014 Опубликовано 21 мая, 2014 · Жалоба а есть способ запретить все прерывания, а не одно какое то конкретное? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 21 мая, 2014 Опубликовано 21 мая, 2014 · Жалоба глобальным флагом? #define INTERRUPT_DISABLE_STORE(flag1, flag2) (flag1) = __disable_irq(); (flag2) = __disable_fiq() #define INTERRUPT_RESTORE(flag1, flag2) if(!(flag1)) __enable_irq(); if(!(flag2)) __enable_fiq() Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k000858 0 21 мая, 2014 Опубликовано 21 мая, 2014 · Жалоба глобальным флагом? #define INTERRUPT_DISABLE_STORE(flag1, flag2) (flag1) = __disable_irq(); (flag2) = __disable_fiq() #define INTERRUPT_RESTORE(flag1, flag2) if(!(flag1)) __enable_irq(); if(!(flag2)) __enable_fiq() а. т.е. функция __disable_irq(); запрещает все прерывания? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 21 мая, 2014 Опубликовано 21 мая, 2014 · Жалоба не все, а только обычные __disable_fiq() - остальные но есть не маскируемые типа ресета, которые никак не запретишь... и это в кейле, в других средах, могут быть переопределены по другому, там битики в регистре устанавливаются... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 21 мая, 2014 Опубликовано 21 мая, 2014 · Жалоба __disable_fiq() - остальные Какой такой fiq? Это же Cortex-M, нет там никакого fiq. Уважаемый, не вводите общественность в заблуждение. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 21 мая, 2014 Опубликовано 21 мая, 2014 · Жалоба я просто не в курсе, неужели STM32 - это только кортексы М? ну нет фик, и нет, плохого ничего не будет, можете запрещать, можете не запрещать:) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
A. Fig Lee 0 21 мая, 2014 Опубликовано 21 мая, 2014 · Жалоба тогда попутный вопрос: при сбросе мк с помощью функции NVIC_SystemReset (из core_cm4.h CMSIS библиотеки) происходит полный сброс контроллера, включая сброс периферии (особенно интересуют прерывания) ? А каким образом по ресету Вы собираетесь переходить в основную программу? Загрузчик разве не по начальному аддрессу? Так Вы туда опять и попадете Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 21 мая, 2014 Опубликовано 21 мая, 2014 · Жалоба А каким образом по ресету Вы собираетесь переходить в основную программу? Загрузчик разве не по начальному аддрессу? Так Вы туда опять и попадете Это же совсем просто: в самом начале загрузчика проверять специальный флаг и прыгать в основную прошивку или продолжать выполнять загрузчик. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться