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

STM32: сброс всей периферии перед переходом из загрузчика в основную прошивку

Это же совсем просто: в самом начале загрузчика проверять специальный флаг и прыгать в основную прошивку или продолжать выполнять загрузчик.

При этом не тронув никакой периферии.

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


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

Какой такой fiq? Это же Cortex-M, нет там никакого fiq.

Как же нет? А это что:

/** \brief  Disable FIQ

    This function disables FIQ interrupts by setting the F-bit in the CPSR.
    Can only be executed in Privileged modes.
*/
#define __disable_fault_irq               __disable_fiq

?

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


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

Как же нет? А это что:

А это какая-то чушь (очевидно, перекочевала из кода для других процессоров ARM). Просто подтверждает, что этот код пишут простые смертные, вполне способные ошибаться.

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


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

Это же совсем просто: в самом начале загрузчика проверять специальный флаг и прыгать в основную прошивку или продолжать выполнять загрузчик.

Флаг в EEPROM?

А почему сразу не прыгнуть? К чему эти танцы с бубном, если и так ясно что прыгать будем?

 

специальный флаг, целостность прошивки, и какие - либо коды безопасности....

А при чем здесь reset?

Программа бутлоадер стартанула, все проверила, теперь выставляет флаг, чтобы прыгнуть и делает ресет?

Бессмыслица

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


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

Это какой-то "мудрец" переименовал fast_interrupt от ARM в fault_interrupt для Cortex-M.

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


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

поглядел доки на кортекс - м

http://infocenter.arm.com/help/index.jsp?t...b/CHDBIBGJ.html

нашел только

PM

Prioritizable interrupt mask:

0 = no effect.

1 = prevents the activation of all exceptions with configurable priority.

 

то есть Reset, NMI, HardFault задушить этим битиком нельзя...

 

HardFault душиться егойным регистром

http://infocenter.arm.com/help/index.jsp?t...a/Cihieffb.html

 

Reset понятно никак не душиться,

 

 

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


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

А это какая-то чушь (очевидно, перекочевала из кода для других процессоров ARM).

Почему чушь? Код вполне имеет смысл:

__attribute__( ( always_inline ) ) static __INLINE void __enable_fault_irq(void)
{
  __ASM volatile ("cpsie f");
}


/** \brief  Disable FIQ

    This function disables FIQ interrupts by setting the F-bit in the CPSR.
    Can only be executed in Privileged modes.
*/
__attribute__( ( always_inline ) ) static __INLINE void __disable_fault_irq(void)
{
  __ASM volatile ("cpsid f");
}

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


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

А при чем здесь reset?

Программа бутлоадер стартанула, все проверила, теперь выставляет флаг, чтобы прыгнуть и делает ресет?

Бессмыслица

 

бутлоадер может работать так

старт - проверка - запуск боевой прошивки

а может так

старт - проверка - режим обновления прошивки - обновил прошивку, поставил флаг нормального старта - ресет

и по первому пути... в таком случае вы точно ничего не забудите, и ваша основная программа начнется как после ресета, со всеми регистрами в правильных состояниях

 

 

Почему чушь? Код вполне имеет смысл:

http://infocenter.arm.com/help/index.jsp?t...ch02s08s01.html

 

это от 7 арма...

 

в кортаксах - м только

CPSID i

http://infocenter.arm.com/help/index.jsp?t...a/BABHBAAB.html

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


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

поглядел доки на кортекс - м

http://infocenter.arm.com/help/index.jsp?t...b/CHDBIBGJ.html

нашел только

PM

Prioritizable interrupt mask:

0 = no effect.

1 = prevents the activation of all exceptions with configurable priority.

Не там смотрите: нужно в описании Cortex-M3 или M4 смотреть.

2.8. FAULTMASK register bit assignmentsBits Name Function

[31:1] - Reserved

[0] FAULTMASK

0 = no effect

1 = prevents the activation of all exceptions except for NMI.

The processor clears the FAULTMASK bit to 0 on exit from any exception handler except the NMI handler.

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


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

все там

просто ссылки криво вставляются... я постом выше поправил ссылки...

 

в кортаксах - м только

 

CPSID i

http://infocenter.arm.com/help/index.jsp?t...a/BABHBAAB.html

 

отключает все крмое NMI и RESET, странно что про HardFault не упомянуто...

 

О прошу прощения. Чет криво у них написано, если взять набор инструкций кортекса м3

 

Examples

CPSID i ; Disable interrupts and configurable fault handlers (set PRIMASK)

CPSID f ; Disable interrupts and all fault handlers (set FAULTMASK)

CPSIE i ; Enable interrupts and configurable fault handlers (clear PRIMASK)

CPSIE f ; Enable interrupts and fault handlers (clear FAULTMASK).

 

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


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

Биты состояния прерывания (I и F) были заменены новым регистром PRIMASK (однобитный регистр, который будучи установлен в 1, разрешает генерацию только немаскируемого прерывания и исключения HardFault; все остальные прерывания и исключения маскируются).

Читаем Джозефа Ю.

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


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

Почему чушь? Код вполне имеет смысл:

Код имеет смысл, а вот комментарий не имеет:

This function disables FIQ interrupts by setting the F-bit in the CPSR.

Про комментарий я и написал - это чушь.

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


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

вот хрень какая-то, что же их официальный сайт то никак не определиться:?

 

ну то есть надо понимать что осталось одно

__disable_irq();

которое глушит все кроме ресета и NMI?

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


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

а может так

старт - проверка - режим обновления прошивки - обновил прошивку, поставил флаг нормального старта - ресет

и по первому пути... в таком случае вы точно ничего не забудите, и ваша основная программа начнется как после ресета, со всеми регистрами в правильных состояниях

Не будет "со всеми регистрами".

Флаг надо както передать. EEPROM?

Его надо будет както прочтать, значит инициализировать регистры, сделать какието действия,

то есть все равно ни как про ресете.

 

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


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

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

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

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

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

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

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

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

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

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