Bit 0 ADRDY: ADC ready This bit is set by hardware after the ADC has been enabled (bit ADEN=1) and when the ADC reaches a state where it is ready to accept conversion requests. It is cleared by software writing 1 to it. 0: ADC not yet ready to start conversion (or the flag event was already acknowledged and cleared by software) 1: ADC is ready to start conversion
Выбор полупроводникового силового ключа зависит от его свойств, стоимости жизненного цикла преобразователя, а также цели его разработки и требований к производительности. Infineon предлагает целую линейку MOSFET и IGBT с широкой запрещенной зоной (SiC и GaN), продолжая при этом работать над их усовершенствованием.
Ааа, ну да. Хотя по результату разница только в количестве инструкций. Спасибо.
Нет, rc_w1 - это read/clear, причем очистка атомарная. Если оставить RMW, то будут прочитаны единицы для всех установленных флагов и, соответственно, сброшены будут тоже ни все, а не только ADRDY.
Любая разработка начинается с чтения документации и изучения доступных средств разработки. Данный материал целиком посвящен средствам разработки, включая детальные инструкции по запуску вашего первого приложения на BlueNRG-LP. Описана работа с отладкой STEVAL-IDB011V1, набором инструментов и пакетом ПО позволяющим разработчику быстро войти в курс дела.
Ааа, ну да. Хотя по результату разница только в количестве инструкций.
Это не так. Прочитайте в RM описание этого регистра. Исходя из этого описания, можно понять что: операция: ADC1->ISR = 1; сбросит в 0 только бит0; операция: ADC1->ISR |= 1; сбросит в 0 бит0 и все другие биты которые были==1 на момент операции чтения. Т.е. - во втором случае между делом потеряете также флаги-уведомления о других событиях кроме ADRDY которые успеют установиться до чтения.
Прерывание одно, флагов много, прерывания включены не для всех, а сами флаги при этом все равно могут выставляться...
ISR написан очевидно для обработки данного события (о котором флаг), а значит видимо оно должно быть включено. Логично? Значит - проверка бита разрешения в IER - не нужна.
PS: Странно что вообще компилятор такое позволяет без варнинга: if ((ADC1->IER & ADC_IER_ADRDYIE) && (ADC1->ISR & ADC_ISR_ADRDY)) по идее - должен ругнуться на такое. Или ТС игнорирует этот варнинг (а зря!) или регистр периферии определён неправильно. Имха.
Попасть впросак. Потому что сегодня мне нужен один флаг, а завтра - еще один. Проверка разрешений - стандартная процедура в случаях с групповыми прерываниями. Эеономит на спичках тут как то некуртуазно. Однако всем большое спасибо. Действительно, RMW тут не катит.
Странно что вообще компилятор такое позволяет без варнинга: if ((ADC1->IER & ADC_IER_ADRDYIE) && (ADC1->ISR & ADC_ISR_ADRDY)) по идее - должен ругнуться на такое. Или ТС игнорирует этот варнинг (а зря!) или регистр периферии определён неправильно. Имха.
Варнинга нет и быть не может. Регистр периферии определен не мной, а в CMSIS. Мало того, я следую в написании имен по всплывающим подсказкам. Как в именах, так и в константах. Что не так?
Потому что сегодня мне нужен один флаг, а завтра - еще один.
Вот когда нужен будет, тогда и напишете. А в первом сообщени две избыточных проверки. Одна из которых избыточна при любом количестве используемых флагов.
Вообще то я пользуюсь практикой SPL, не прибегая к ней самой. Там все выглядит именно так - проверка разрешения && проверка флага - сброс флага - обработчик.
Сейчас этот форум просматривают: 240265, Zhuk72 и гости: 10
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения