Форум РадиоКот https://radiokot.ru/forum/ |
|
STM32F030 ADC Handler CMSIS https://radiokot.ru/forum/viewtopic.php?f=59&t=174835 |
Страница 1 из 2 |
Автор: | КРАМ [ Чт янв 07, 2021 12:34:50 ] |
Заголовок сообщения: | STM32F030 ADC Handler CMSIS |
Притомился искать - решил уточнить у честнОй кампании... Is it correct? Код: void ADC_IRQHandler (void) {
if ((ADC1->IER & ADC_IER_ADRDYIE) && (ADC1->ISR & ADC_ISR_ADRDY)) { ADC1->ISR |= ADC_ISR_ADRDY; // флаг сбрасываю правильно? //бла...бла...бла } } |
Автор: | Reflector [ Чт янв 07, 2021 12:57:12 ] |
Заголовок сообщения: | Re: STM32F030 ADC Handler CMSIS |
Там же все поля помечены как rc_w1, т.е. очистка записью единицы, ноль ни на что не влияет: Код: ADC1->ISR = ADC_ISR_ADRDY;
|
Автор: | BlackKilkennyCat [ Чт янв 07, 2021 12:58:11 ] |
Заголовок сообщения: | Re: STM32F030 ADC Handler CMSIS |
непонятно, зачем его сбрасывать в 1, если он равен 1 |
Автор: | КРАМ [ Чт янв 07, 2021 13:06:26 ] |
Заголовок сообщения: | Re: STM32F030 ADC Handler CMSIS |
зачем его сбрасывать в 1 Цитата: 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 ноль ни на что не влияет: Ааа, ну да. Хотя по результату разница только в количестве инструкций. Спасибо. |
Автор: | Reflector [ Чт янв 07, 2021 13:12:27 ] |
Заголовок сообщения: | Re: STM32F030 ADC Handler CMSIS |
Ааа, ну да. Хотя по результату разница только в количестве инструкций. Спасибо. Нет, rc_w1 - это read/clear, причем очистка атомарная. Если оставить RMW, то будут прочитаны единицы для всех установленных флагов и, соответственно, сброшены будут тоже ни все, а не только ADRDY. |
Автор: | VladislavS [ Чт янв 07, 2021 13:15:18 ] |
Заголовок сообщения: | Re: STM32F030 ADC Handler CMSIS |
А я бы ещё никому не нужные проверки выкинул. Код: if ((ADC1->IER & ADC_IER_ADRDYIE) && (ADC1->ISR & ADC_ISR_ADRDY)) Вы что, можете попасть в прерывание если оно не разрешено?
|
Автор: | Reflector [ Чт янв 07, 2021 13:17:04 ] |
Заголовок сообщения: | Re: STM32F030 ADC Handler CMSIS |
Вы что, можете попасть в прерывание если оно не разрешено? Прерывание одно, флагов много, прерывания включены не для всех, а сами флаги при этом все равно могут выставляться... |
Автор: | jcxz [ Чт янв 07, 2021 13:17:13 ] |
Заголовок сообщения: | Re: STM32F030 ADC Handler CMSIS |
Ааа, ну да. Хотя по результату разница только в количестве инструкций. Это не так. Прочитайте в RM описание этого регистра. Исходя из этого описания, можно понять что: операция: ADC1->ISR = 1; сбросит в 0 только бит0; операция: ADC1->ISR |= 1; сбросит в 0 бит0 и все другие биты которые были==1 на момент операции чтения. Т.е. - во втором случае между делом потеряете также флаги-уведомления о других событиях кроме ADRDY которые успеют установиться до чтения. |
Автор: | VladislavS [ Чт янв 07, 2021 13:18:17 ] |
Заголовок сообщения: | Re: STM32F030 ADC Handler CMSIS |
Включаете одно нужное вам для работы. |
Автор: | BlackKilkennyCat [ Чт янв 07, 2021 13:18:47 ] |
Заголовок сообщения: | Re: STM32F030 ADC Handler CMSIS |
VladislavS, я тоже об этом подумал, но на самом деле, можно попасть. |
Автор: | VladislavS [ Чт янв 07, 2021 13:19:28 ] |
Заголовок сообщения: | Re: STM32F030 ADC Handler CMSIS |
Куда попасть? |
Автор: | BlackKilkennyCat [ Чт янв 07, 2021 13:20:41 ] |
Заголовок сообщения: | Re: STM32F030 ADC Handler CMSIS |
в функцию, которую вызывает прерывание. |
Автор: | jcxz [ Чт янв 07, 2021 13:23:40 ] |
Заголовок сообщения: | Re: STM32F030 ADC Handler CMSIS |
Прерывание одно, флагов много, прерывания включены не для всех, а сами флаги при этом все равно могут выставляться... ISR написан очевидно для обработки данного события (о котором флаг), а значит видимо оно должно быть включено. Логично? Значит - проверка бита разрешения в IER - не нужна.PS: Странно что вообще компилятор такое позволяет без варнинга: if ((ADC1->IER & ADC_IER_ADRDYIE) && (ADC1->ISR & ADC_ISR_ADRDY)) по идее - должен ругнуться на такое. Или ТС игнорирует этот варнинг (а зря!) или регистр периферии определён неправильно. Имха. |
Автор: | КРАМ [ Чт янв 07, 2021 13:24:09 ] |
Заголовок сообщения: | Re: STM32F030 ADC Handler CMSIS |
Куда попасть? Попасть впросак. Потому что сегодня мне нужен один флаг, а завтра - еще один. Проверка разрешений - стандартная процедура в случаях с групповыми прерываниями. Эеономит на спичках тут как то некуртуазно. Однако всем большое спасибо. Действительно, RMW тут не катит. |
Автор: | VladislavS [ Чт янв 07, 2021 13:24:45 ] |
Заголовок сообщения: | Re: STM32F030 ADC Handler CMSIS |
в функцию, которую вызывает прерывание. Как?
|
Автор: | BlackKilkennyCat [ Чт янв 07, 2021 13:26:19 ] |
Заголовок сообщения: | Re: STM32F030 ADC Handler CMSIS |
стандартным вызовом. Разве это запрещено? |
Автор: | jcxz [ Чт янв 07, 2021 13:26:24 ] |
Заголовок сообщения: | Re: STM32F030 ADC Handler CMSIS |
Попасть впросак. Потому что сегодня мне нужен один флаг, а завтра - еще один. И что? Проверка флага статуса - нужна, бита разрешения - скорей всего нет.
|
Автор: | КРАМ [ Чт янв 07, 2021 13:27:20 ] |
Заголовок сообщения: | Re: STM32F030 ADC Handler CMSIS |
Странно что вообще компилятор такое позволяет без варнинга: if ((ADC1->IER & ADC_IER_ADRDYIE) && (ADC1->ISR & ADC_ISR_ADRDY)) по идее - должен ругнуться на такое. Или ТС игнорирует этот варнинг (а зря!) или регистр периферии определён неправильно. Имха. Варнинга нет и быть не может. Регистр периферии определен не мной, а в CMSIS. Мало того, я следую в написании имен по всплывающим подсказкам. Как в именах, так и в константах. Что не так? |
Автор: | VladislavS [ Чт янв 07, 2021 13:28:05 ] |
Заголовок сообщения: | Re: STM32F030 ADC Handler CMSIS |
Потому что сегодня мне нужен один флаг, а завтра - еще один. Вот когда нужен будет, тогда и напишете. А в первом сообщени две избыточных проверки. Одна из которых избыточна при любом количестве используемых флагов.
|
Автор: | КРАМ [ Чт янв 07, 2021 13:29:26 ] |
Заголовок сообщения: | Re: STM32F030 ADC Handler CMSIS |
бита разрешения - скорей всего нет. Вообще то я пользуюсь практикой SPL, не прибегая к ней самой. Там все выглядит именно так - проверка разрешения && проверка флага - сброс флага - обработчик. |
Страница 1 из 2 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |