Перейти к содержанию
    

Как осуществить Software Reset на UC3B0256?

Уважаемые Форумчане, что-то не могу найти в даташите, как сделать software reset на UC3B0256, чтобы сбросилась вся периферии и оперативная память. Пока кроме как запустить ВочДог ничего не придумал....

 

В Cortex'e то остановкой одного битика делался ресет, а тут я что-то такого не нашел....

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Софт-ресет делается при помощи WatchDog.

Типа так:

/*! \brief Программный сброс.
*/
void sw_reset ()
{
    Disable_global_interrupt();

    if (wdt_get_us_timeout_period() < 0)
        wdt_enable(1000000);

    while(1);
}

 

Важный момент! В начале программы обязательно надо вставить вызвов функции wdt_disable().

Иначе будет постоянно сбрасываться.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Софт-ресет делается при помощи WatchDog.

 

Спасибо, я так и сделал.

Думал, вдруг есть способ по проще, чего не заметил в документации....

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вообще в файле compiler.h видел такую вещь:

 

 

/*! \brief Resets the CPU by software.

*

* \warning It shall not be called from the CPU application mode.

*/

#if (defined __GNUC__)

#define Reset_CPU() \

(\

{\

__asm__ __volatile__ (\

"lddpc r9, 3f\n\t"\

"mfsr r8, %[sR]\n\t"\

"bfextu r8, r8, %[sR_M_OFFSET], %[sR_M_SIZE]\n\t"\

"cp.w r8, 0b001\n\t"\

"breq 0f\n\t"\

"sub r8, pc, $ - 1f\n\t"\

"pushm r8-r9\n\t"\

"rete\n"\

"0:\n\t"\

"mtsr %[sR], r9\n"\

"1:\n\t"\

"mov r0, 0\n\t"\

"mov r1, 0\n\t"\

"mov r2, 0\n\t"\

"mov r3, 0\n\t"\

"mov r4, 0\n\t"\

"mov r5, 0\n\t"\

"mov r6, 0\n\t"\

"mov r7, 0\n\t"\

"mov r8, 0\n\t"\

"mov r9, 0\n\t"\

"mov r10, 0\n\t"\

"mov r11, 0\n\t"\

"mov r12, 0\n\t"\

"mov sp, 0\n\t"\

"stdsp sp[0], sp\n\t"\

"ldmts sp, sp\n\t"\

"mov lr, 0\n\t"\

"lddpc pc, 2f\n\t"\

".balign 4\n"\

"2:\n\t"\

".word _start\n"\

"3:\n\t"\

".word %[RESET_SR]"\

:\

: [sR] "i" (AVR32_SR),\

[sR_M_OFFSET] "i" (AVR32_SR_M_OFFSET),\

[sR_M_SIZE] "i" (AVR32_SR_M_SIZE),\

[RESET_SR] "i" (AVR32_SR_GM_MASK | AVR32_SR_EM_MASK | (AVR32_SR_M_SUP << AVR32_SR_M_OFFSET))\

);\

}\

)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вообще в файле compiler.h видел такую вещь:

 

 

/*! \brief Resets the CPU by software.

*

* \warning It shall not be called from the CPU application mode.

*/

#if (defined __GNUC__)

#define Reset_CPU() \

(\

 

Этот макрос не сбросит периферию МК, да и "It shall not be called from the CPU application mode".......

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...