реклама на сайте
подробности

 
 
> Сброс CM3 программно
_Артём_
сообщение Apr 28 2012, 17:26
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Здраствуйте.
Пытаюсь сделать сброс МК программно в соответствии с
Цитата
Software may initiate a reset (e.g. if it finds itself in a non-recoverable state). By asserting the
SYSRESETREQ in the Application Interrupt and Reset Control Register (write 0x05FA 0004), a reset is
issued.

Делаю так:
Код
AIRCR=0x05FA0004;


Но после этих действий программа вопреки моим ожиданиям оказывается не Reset_Handler, а в Default_Handler.
Что я не правильно делаю?

Спасибо.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
GetSmart
сообщение Apr 28 2012, 17:54
Сообщение #2


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Проц какой? В LPC17xx юзер мануале написано "... не реализовано".


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Apr 28 2012, 19:24
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(GetSmart @ Apr 28 2012, 20:54) *
Проц какой?


EFMG890F128


Цитата(GetSmart @ Apr 28 2012, 20:54) *
В LPC17xx юзер мануале написано "... не реализовано".

Я цитату из reference manual-а приводит. Из неё следует что запрос реализован (если я правильно понял).

Уточнение: программа попадает в HardFault_Handler.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Apr 28 2012, 19:32
Сообщение #4


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



В CMSIS это делается вот так:

Код
#define NVIC_SYSRESETREQ            2         /*!< System Reset Request         */
#define NVIC_AIRCR_VECTKEY    (0x5FA << 16)   /*!< AIRCR Key for write access   */
...
static __INLINE void NVIC_SystemReset(void)
{
  SCB->AIRCR  = (NVIC_AIRCR_VECTKEY | (SCB->AIRCR & (0x700)) | (1<<NVIC_SYSRESETREQ)); /* Keep priority group unchanged */
  __DSB();                                                                             /* Ensure completion of memory access */
  while(1);                                                                            /* wait until reset */
}


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Apr 28 2012, 19:59
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(AHTOXA @ Apr 28 2012, 22:32) *
В CMSIS это делается вот так:


Заменил у себя:

Код
volatile unsigned char ResetRqFlag;
int main() {
if (ResetRqFlag) {
    ResetRqFlag=0;
    NVIC_SystemReset();
}


Результат тот же, программа оказывается тут:

Код
void HardFault_Handler(void)
{
for (;;)
    GPIO->P[2].DOUTTGL=1;
}

Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Apr 29 2012, 04:44
Сообщение #6


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Тогда остаётся только одно: в ваш чип забыли положить эту функцию! sm.gif
Пишите в суппорт.
-----------
Подумал ещё: а вы не перевели случайно процессор в user-mode? Может быть, из него нельзя писать в эти регистры?
(Для проверки попробуйте вызвать NVIC_SystemReset() из прерывания).


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
_Артём_
сообщение May 3 2012, 20:45
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(AHTOXA @ Apr 29 2012, 07:44) *
Тогда остаётся только одно: в ваш чип забыли положить эту функцию! sm.gif

Нет, не забыли.
Всё работает: и мой первый вариант и ваш и просто вызов NVIC_SystemReset.
Почему сразу не заработал - загадка.

Цитата(AHTOXA @ Apr 29 2012, 07:44) *
Подумал ещё: а вы не перевели случайно процессор в user-mode?

Хм. Трудно сказать.
Reset задумывался сразу после входа в main (просто что бы проверить эту функцию).
Вряд ли там в Reset_Handler где-то переход был.
Да и не упоминалось в описании запроса на сброс о режиме процессора:
Цитата
Software may initiate a reset (e.g. if it finds itself in a non-recoverable state). By asserting the
SYSRESETREQ in the Application Interrupt and Reset Control Register (write 0x05FA 0004), a reset is
issued.

Разве что где-ещё смотреть надо.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- _Артём_   Сброс CM3 программно   Apr 28 2012, 17:26
|- - AHTOXA   Цитата(_Артём_ @ May 4 2012, 02:45) Разве...   May 4 2012, 03:09
|- - _Артём_   Цитата(AHTOXA @ May 4 2012, 06:09) В перв...   May 4 2012, 14:31
|- - AHTOXA   Здесь как раз всё нормально. По умолчанию кортексы...   May 4 2012, 14:40
|- - _Артём_   Цитата(AHTOXA @ May 4 2012, 17:40) Здесь ...   May 4 2012, 14:48
|- - AHTOXA   Цитата(_Артём_ @ May 4 2012, 20:48) Непри...   May 4 2012, 16:31
- - Nixon   890 у вас в какой ревизии? Если B то не ожидайте о...   Apr 29 2012, 05:08
|- - _Артём_   Цитата(Nixon @ Apr 29 2012, 08:08) 890 у ...   May 1 2012, 15:51
- - Nixon   п.7.3.4 мануала на гекко.   May 1 2012, 17:24
|- - _Артём_   *(uint32_t *)0xE00FFFE8 = 0x0F *(uint32_t *)0xE00F...   May 1 2012, 17:52
- - kosyak©   Тоже в попадаю в HardFault. Причем раз на раз не п...   May 4 2012, 17:04
|- - AHTOXA   А попробуйте запретить прерывания перед сбросом.   May 4 2012, 17:36
- - kosyak©   Пробовал - ничего не изменилось.   May 4 2012, 17:59
|- - _Артём_   Цитата(kosyak© @ May 4 2012, 20:59) Пробо...   May 4 2012, 18:09
- - kosyak©   Боюсь что в коде там нет ничего необычного. И Hard...   May 4 2012, 18:25
|- - _Артём_   Цитата(kosyak© @ May 4 2012, 21:25) Боюсь...   May 4 2012, 18:29
- - Cosmojam   Программный сброс можно от вотчдога сделать и не м...   May 4 2012, 18:40
- - _Артём_   Цитата(Cosmojam @ May 4 2012, 21:40) Прог...   May 4 2012, 19:22


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th August 2025 - 10:35
Рейтинг@Mail.ru


Страница сгенерированна за 0.01436 секунд с 7
ELECTRONIX ©2004-2016