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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Сброс 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
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
Nixon
сообщение Apr 29 2012, 05:08
Сообщение #7


Гуру
******

Группа: Админы
Сообщений: 2 736
Регистрация: 17-06-04
Из: Киев
Пользователь №: 48



890 у вас в какой ревизии? Если B то не ожидайте от него всего, что написано в документации. Сырой до ужаса чип.

Я даже отложил всю работу с ним до получения ревизии С.

Ой, прошу прощения, я про GG890. У вас же просто Gecko.


--------------------
Вам помочь или не мешать?
Go to the top of the page
 
+Quote Post
_Артём_
сообщение May 1 2012, 15:51
Сообщение #8


Гуру
******

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



Цитата(Nixon @ Apr 29 2012, 08:08) *
890 у вас в какой ревизии?

А как ревизию попроще узнать?
Go to the top of the page
 
+Quote Post
Nixon
сообщение May 1 2012, 17:24
Сообщение #9


Гуру
******

Группа: Админы
Сообщений: 2 736
Регистрация: 17-06-04
Из: Киев
Пользователь №: 48



п.7.3.4 мануала на гекко.


--------------------
Вам помочь или не мешать?
Go to the top of the page
 
+Quote Post
_Артём_
сообщение May 1 2012, 17:52
Сообщение #10


Гуру
******

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




*(uint32_t *)0xE00FFFE8 = 0x0F
*(uint32_t *)0xE00FFFEC = 0x20

Получается Rev=0x02 - C.
Go to the top of the page
 
+Quote Post
_Артём_
сообщение May 3 2012, 20:45
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 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
AHTOXA
сообщение May 4 2012, 03:09
Сообщение #12


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

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



Цитата(_Артём_ @ May 4 2012, 02:45) *
Разве что где-ещё смотреть надо.

В первоисточнике (Cortex-M3 Technical Reference Manual):
Цитата
You can only fully access the NVIC from privileged mode, but you can pend interrupts
in user-mode if you enable the Configuration Control Register (see Configuration
Control Register on page8-25). Any other user-mode access causes a bus fault.


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


Гуру
******

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



Цитата(AHTOXA @ May 4 2012, 06:09) *
В первоисточнике (Cortex-M3 Technical Reference Manual):


Что-то совсем непонятно.
Код
void OS::system_timer_user_hook() {// вызывается с частотой 1кГц
    DWT_CYCCNT=0;

    if (++Divider==1000) {// 1 секунда
        Divider=0;
        TimerEvent.signal_isr();
    }
    Timers[0]=DWT_Get();
}

template<>
OS_PROCESS void TProc1::exec() {
    uint16_t reset_delay_cnt=0;
    for (;;) {
        TimerEvent.wait();
        Timers[1]=DWT_Get();
        {// Сброс
            if (++reset_delay_cnt==20) {// сброс через 20 секунд
                ResetRqFlag=0;
                SCB->AIRCR=0x05FA0004;
                while (1);
            }
        }
    }
}


TProc1::exec делает сброс раз в 20 секунд. Никакого fault-а не происходит.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение May 4 2012, 14:40
Сообщение #14


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

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



Здесь как раз всё нормально. По умолчанию кортексы работают в привилегированном режиме. Чтобы переключить их в user-mode, надо предпринять определённые действия.


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


Гуру
******

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



Цитата(AHTOXA @ May 4 2012, 17:40) *
Здесь как раз всё нормально. По умолчанию кортексы работают в привилегированном режиме.

Может быть. Пока с режимами и их переключениями не разбирался.
Непривычно после АВР. Режимы какие-то - зачем они? Пока не улеглось в голове.

Цитата(AHTOXA @ May 4 2012, 17:40) *
Чтобы переключить их в user-mode, надо предпринять определённые действия.

Попробую предпринять и проверить как будет тогда работать (когда найду как оно переключается).
Go to the top of the page
 
+Quote Post

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

 


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


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