STM32F030 ADC Handler CMSIS

Кто любит RISC в жизни, заходим, не стесняемся.
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25266
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

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
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Re: STM32F030 ADC Handler CMSIS

Сообщение Reflector »

Там же все поля помечены как rc_w1, т.е. очистка записью единицы, ноль ни на что не влияет:

Код: Выделить всё

ADC1->ISR = ADC_ISR_ADRDY;
Реклама
BlackKilkennyCat
Собутыльник Кота
Сообщения: 2905
Зарегистрирован: Ср ноя 29, 2017 06:58:50

Re: STM32F030 ADC Handler CMSIS

Сообщение BlackKilkennyCat »

непонятно, зачем его сбрасывать в 1, если он равен 1
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25266
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: STM32F030 ADC Handler CMSIS

Сообщение КРАМ »

[uquote="BlackKilkennyCat",url="/forum/viewtopic.php?p=3954883#p3954883"]зачем его сбрасывать в 1[/uquote]
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
[uquote="Reflector",url="/forum/viewtopic.php?p=3954882#p3954882"]ноль ни на что не влияет:[/uquote]
Ааа, ну да. Хотя по результату разница только в количестве инструкций.
Спасибо.
Реклама
Эиком - электронные компоненты и радиодетали
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Re: STM32F030 ADC Handler CMSIS

Сообщение Reflector »

[uquote="КРАМ",url="/forum/viewtopic.php?p=3954887#p3954887"]Ааа, ну да. Хотя по результату разница только в количестве инструкций.
Спасибо.[/uquote]
Нет, rc_w1 - это read/clear, причем очистка атомарная. Если оставить RMW, то будут прочитаны единицы для всех установленных флагов и, соответственно, сброшены будут тоже ни все, а не только ADRDY.
Реклама
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: STM32F030 ADC Handler CMSIS

Сообщение VladislavS »

А я бы ещё никому не нужные проверки выкинул.

Код: Выделить всё

if ((ADC1->IER & ADC_IER_ADRDYIE) && (ADC1->ISR & ADC_ISR_ADRDY)) 
Вы что, можете попасть в прерывание если оно не разрешено?
Реклама
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Re: STM32F030 ADC Handler CMSIS

Сообщение Reflector »

[uquote="VladislavS",url="/forum/viewtopic.php?p=3954898#p3954898"]Вы что, можете попасть в прерывание если оно не разрешено?[/uquote]
Прерывание одно, флагов много, прерывания включены не для всех, а сами флаги при этом все равно могут выставляться...
jcxz
Мудрый кот
Сообщения: 1726
Зарегистрирован: Вт авг 15, 2017 10:51:13

Re: STM32F030 ADC Handler CMSIS

Сообщение jcxz »

[uquote="КРАМ",url="/forum/viewtopic.php?p=3954887#p3954887"]Ааа, ну да. Хотя по результату разница только в количестве инструкций.[/uquote]
Это не так. Прочитайте в RM описание этого регистра.
Исходя из этого описания, можно понять что:
операция: ADC1->ISR = 1; сбросит в 0 только бит0;
операция: ADC1->ISR |= 1; сбросит в 0 бит0 и все другие биты которые были==1 на момент операции чтения.
Т.е. - во втором случае между делом потеряете также флаги-уведомления о других событиях кроме ADRDY которые успеют установиться до чтения.
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: STM32F030 ADC Handler CMSIS

Сообщение VladislavS »

Включаете одно нужное вам для работы.
BlackKilkennyCat
Собутыльник Кота
Сообщения: 2905
Зарегистрирован: Ср ноя 29, 2017 06:58:50

Re: STM32F030 ADC Handler CMSIS

Сообщение BlackKilkennyCat »

VladislavS, я тоже об этом подумал, но на самом деле, можно попасть.
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: STM32F030 ADC Handler CMSIS

Сообщение VladislavS »

Куда попасть?
BlackKilkennyCat
Собутыльник Кота
Сообщения: 2905
Зарегистрирован: Ср ноя 29, 2017 06:58:50

Re: STM32F030 ADC Handler CMSIS

Сообщение BlackKilkennyCat »

в функцию, которую вызывает прерывание.
jcxz
Мудрый кот
Сообщения: 1726
Зарегистрирован: Вт авг 15, 2017 10:51:13

Re: STM32F030 ADC Handler CMSIS

Сообщение jcxz »

[uquote="Reflector",url="/forum/viewtopic.php?p=3954899#p3954899"]Прерывание одно, флагов много, прерывания включены не для всех, а сами флаги при этом все равно могут выставляться...[/uquote]ISR написан очевидно для обработки данного события (о котором флаг), а значит видимо оно должно быть включено. Логично? Значит - проверка бита разрешения в IER - не нужна.

PS: Странно что вообще компилятор такое позволяет без варнинга:
if ((ADC1->IER & ADC_IER_ADRDYIE) && (ADC1->ISR & ADC_ISR_ADRDY))
по идее - должен ругнуться на такое. Или ТС игнорирует этот варнинг (а зря!) или регистр периферии определён неправильно. Имха.
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25266
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: STM32F030 ADC Handler CMSIS

Сообщение КРАМ »

[uquote="VladislavS",url="/forum/viewtopic.php?p=3954906#p3954906"]Куда попасть?[/uquote]
Попасть впросак. Потому что сегодня мне нужен один флаг, а завтра - еще один.
Проверка разрешений - стандартная процедура в случаях с групповыми прерываниями. Эеономит на спичках тут как то некуртуазно.
Однако всем большое спасибо. Действительно, RMW тут не катит.
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: STM32F030 ADC Handler CMSIS

Сообщение VladislavS »

[uquote="BlackKilkennyCat",url="/forum/viewtopic.php?p=3954907#p3954907"]в функцию, которую вызывает прерывание.[/uquote]Как?
BlackKilkennyCat
Собутыльник Кота
Сообщения: 2905
Зарегистрирован: Ср ноя 29, 2017 06:58:50

Re: STM32F030 ADC Handler CMSIS

Сообщение BlackKilkennyCat »

стандартным вызовом. Разве это запрещено?
jcxz
Мудрый кот
Сообщения: 1726
Зарегистрирован: Вт авг 15, 2017 10:51:13

Re: STM32F030 ADC Handler CMSIS

Сообщение jcxz »

[uquote="КРАМ",url="/forum/viewtopic.php?p=3954912#p3954912"]Попасть впросак. Потому что сегодня мне нужен один флаг, а завтра - еще один.[/uquote]И что? Проверка флага статуса - нужна, бита разрешения - скорей всего нет.
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25266
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: STM32F030 ADC Handler CMSIS

Сообщение КРАМ »

[uquote="jcxz",url="/forum/viewtopic.php?p=3954911#p3954911"]Странно что вообще компилятор такое позволяет без варнинга:
if ((ADC1->IER & ADC_IER_ADRDYIE) && (ADC1->ISR & ADC_ISR_ADRDY))
по идее - должен ругнуться на такое. Или ТС игнорирует этот варнинг (а зря!) или регистр периферии определён неправильно. Имха.[/uquote]
Варнинга нет и быть не может. Регистр периферии определен не мной, а в CMSIS. Мало того, я следую в написании имен по всплывающим подсказкам. Как в именах, так и в константах. Что не так?
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: STM32F030 ADC Handler CMSIS

Сообщение VladislavS »

[uquote="КРАМ",url="/forum/viewtopic.php?p=3954912#p3954912"]Потому что сегодня мне нужен один флаг, а завтра - еще один.[/uquote]Вот когда нужен будет, тогда и напишете. А в первом сообщени две избыточных проверки. Одна из которых избыточна при любом количестве используемых флагов.
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25266
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: STM32F030 ADC Handler CMSIS

Сообщение КРАМ »

[uquote="jcxz",url="/forum/viewtopic.php?p=3954916#p3954916"]бита разрешения - скорей всего нет.[/uquote]
Вообще то я пользуюсь практикой SPL, не прибегая к ней самой. Там все выглядит именно так - проверка разрешения && проверка флага - сброс флага - обработчик.
Ответить

Вернуться в «ARM»