Миландр

Ключевым подразделением нашей компании является Центр Проектирования интегральных микросхем
Текущее время: 2018-ноя-14 18:36

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
СообщениеДобавлено: 2018-ноя-04 19:35 
Не в сети

Зарегистрирован: 2018-янв-05 23:41
Сообщения: 16
Пишу данные во внутреннюю флеш-память микроконтроллера.
Соответственно, следует запретить на время записи все разрешенные прерывания. А после записи восстановить все прежние разрешения.
Будет ли приведенный ниже код корректно выполнять указанную задачу?
Или есть другое более простое или правильное решение?
Код:
// сохраняем разрешения прерываний
uint32_t ier = NVIC->ISER[0];
// запрещаем прерывания
NVIC->ICER[0]=0xFFFFFFFF;
// запись или стирание флеш

// работы с флеш закончены
// Восстанавливаем ранее сохранённые разрешения прерываний
NVIC->ISER[0] = ier;


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2018-ноя-06 00:20 
Не в сети
Аватара пользователя

Зарегистрирован: 2013-июн-21 15:27
Сообщения: 93
Откуда: Новосибирск
Есть встроенные функции __disable_irq() и __enable_irq().
Насколько я понимаю, они должны работать через инструкции CPSID и CPSIE соответственно
Эти инструкции (и функции) запрещают/разрешают все прерывания, а не только из 0-го регистра NVIC

_________________
Странник


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2018-ноя-06 00:24 
Не в сети

Зарегистрирован: 2009-июл-21 14:13
Сообщения: 1175
Откуда: Тула
Формально есть ещё незапрещаемые прерывания вроде RESET, FAULT и NMI.

_________________
сочувствующий…


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2018-ноя-07 06:16 
Не в сети

Зарегистрирован: 2018-янв-05 23:41
Сообщения: 16
prostoRoman писал(а):
Формально есть ещё незапрещаемые прерывания вроде RESET, FAULT и NMI.

Я знаю про них. Но сделать с ними вроде как ничего нельзя. Запретить их не получится. Да, впрочем, и не надо. Так что придется понять и простить.
А в моём способе меня смущают значения регистров NVIC->ISER[0] и NVIC->ICER[0], отображаемые в окне просмотра переменных под отладкой при выполнении кода по шагам. Они не равны ier. Там больше единичных разрядов. Что при сохранении значения в ier, что после восстановления из него. Никакого разумного объяснения этому я не вижу. Отсюда и вопрос о корректности работы кода. Теоретически да, должен работать правильно. Но практически отладчик отображает какие-то левые значения регистров ISER[0] и ICER[0]. И не понятно почему.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2018-ноя-07 06:20 
Не в сети

Зарегистрирован: 2018-янв-05 23:41
Сообщения: 16
stranderer писал(а):
Есть встроенные функции __disable_irq() и __enable_irq().
Насколько я понимаю, они должны работать через инструкции CPSID и CPSIE соответственно
Эти инструкции (и функции) запрещают/разрешают все прерывания, а не только из 0-го регистра NVIC

Спасибо.
Посмотрю в CMSIS для ядра cm1, есть ли они там и как они реализованы.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2018-ноя-07 13:12 
Не в сети

Зарегистрирован: 2009-июл-21 14:13
Сообщения: 1175
Откуда: Тула
Professor Chaos писал(а):
сделать с ними вроде как ничего нельзя. Запретить их не получится. Да, впрочем, и не надо. Так что придется понять и простить.

Определить их пустые обработчики.

_________________
сочувствующий…


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2018-ноя-07 21:16 
Не в сети

Зарегистрирован: 2018-янв-05 23:41
Сообщения: 16
prostoRoman писал(а):
Определить их пустые обработчики.

Для ядра cm1 это не поможет. Hard fault случится еще до захода в обработчик, в момент, когда NVIC попытается прочитать таблицу векторов прерываний во флеше, чтобы узнать адрес входа в обработчик того же NMI, например.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: romantagan и гости: 6


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB