Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


 
Опции темы
Непрочитано 28.05.2015, 00:30  
kvark85
Прописка
 
Регистрация: 31.08.2008
Сообщений: 183
Сказал спасибо: 25
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
kvark85 на пути к лучшему
По умолчанию STM32 как определить разрешены ли прерывания глобально

Как в программе можно определить (какой бит в каком регистре глянуть) - разрешены ли в данный момент прерывания глобально. в AVR studio можно было делать так:
Код:
if (STATUS_REG & (1‹‹Interrupt_Flag))  // Если прерывания разрешены, то запрещаем их.
	{
	Disable_Interrupt
	...
	}
как портировать этот код для STM32f100 - для IAR не могу разобраться.
Реклама:
__________________
Kvsrk85(Андрей)
kvark85 вне форума  
Непрочитано 28.05.2015, 10:13  
SasaVitebsk
Гражданин KAZUS.RU
 
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
SasaVitebsk на пути к лучшему
По умолчанию Re: STM32 как определить разрешены ли прерывания глобально

Можно просто ответить на Ваш вопрос.
Скажем для IAR есть так называемая intrinsic функция __get_interrupt_state(). (Кстати для AVR там есть что-то аналогичное), но это ответ будет неполный и не совсем корректный.

1. Судя по тому куску кода который я увидел, Вы хотите запретить прерывания на время, а потом вернуть. Но у Вас возникает коллизия если прерывания уже были запрещены. Поэтому Вам требуется проанализировать текущее состояние. Если это так, то это делается без if следующим способом.

__isstate_t savestate = __get_interrupt_state(); // сохранить текущее состояние
__disable_interrupt(); // запретить прерывания
..... // работа
__set_interrupt_state(savestate); // восстановить прежнее состояние

Кстати для AVR я делал также.

2. Процессор ARM, в отличие от AVR имеет несколько уровней приоритета прерывания. В связи с этим большую часть коллизий удаётся разрулить с помощью грамотной настройки прерываний. Защищённая секция используется крайне редко.
Для лучшего понимания почитайте архитектуру ядра выбранного Вами МП.
SasaVitebsk вне форума  
Непрочитано 28.05.2015, 13:08  
uk8amk
Вид на жительство
 
Регистрация: 05.07.2006
Адрес: Tashkent
Сообщений: 454
Сказал спасибо: 24
Сказали Спасибо 67 раз(а) в 44 сообщении(ях)
uk8amk на пути к лучшему
По умолчанию Re: STM32 как определить разрешены ли прерывания глобально

регистр primask
Миниатюры:
Нажмите на изображение для увеличения
Название: Primask.PNG
Просмотров: 57
Размер:	44.2 Кб
ID:	79753  
uk8amk вне форума  
 

Закладки
Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как определить наличие высокого напряжения super100 Делимся опытом 12 22.03.2014 02:11
[Решено] Сборник перлов любителей кабельщины mikesmith Отвлекитесь, эмбеддеры! 135 14.08.2007 15:49
[Решено] Всем эмбеддерам посвящается... Decan Отвлекитесь, эмбеддеры! 0 24.10.2005 14:43
[Решено] Как определить вреия задержки сигнала по ширине спектр? Omni_13 Цифровые сигнальные процессоры 1 28.06.2005 00:30


Часовой пояс GMT +4, время: 14:39.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot