Например TDA7294

Форум РадиоКот :: Просмотр темы - STM32F030 ADC Handler CMSIS
Форум РадиоКот
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/