обработка одновременных прерываний в STM32
30.03.2017, 16:13
|
#21
|
|
Вид на жительство
Регистрация: 10.06.2007
Сообщений: 429
Сказал спасибо: 34
Сказали Спасибо 51 раз(а) в 47 сообщении(ях)
|
Re: обработка одновременных прерываний в STM32
Позволю себе задать уточняющий вопрос: а каким образом определяются срабатывания прерываний?
Да и вообще код самих обработчиков прерываний не помешало бы привести.
Тут или ошибка в программе или аппаратный глюк в камне. Ничего третьего в голову не приходит.
|
|
|
|
30.03.2017, 16:15
|
#22
|
|
Заблокирован
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
|
Re: обработка одновременных прерываний в STM32
Сообщение от H4LF
|
|
аппаратный глюк в камне
|
А доказательства имеются?
|
|
|
|
30.03.2017, 16:20
|
#23
|
|
Гражданин KAZUS.RUN
Регистрация: 01.01.2007
Адрес: Таганрог
Сообщений: 571
Сказал спасибо: 26
Сказали Спасибо 213 раз(а) в 91 сообщении(ях)
|
Re: обработка одновременных прерываний в STM32
|
Код:
|
void EXTI15_10_IRQHandler (void)
{
//------------- capt0 --------------------------
if(EXTI-›PR & EXTI_PR_PR13)// capt0
{
// EXTI-›PR |= EXTI_PR_PR13; // EXTI13
n_sns=0; //ïðèíÿë 0 äàò÷èê
exti_det ();
EXTI-›PR |= EXTI_PR_PR13; // EXTI13
}
return;
}
void EXTI3_IRQHandler ()
{
//------------- capt 7 --------------------------
if(EXTI-›PR & EXTI_PR_PR3)// capt7
{
//EXTI-›PR |= EXTI_PR_PR3; // EXTI3
n_sns=7; //ïðèíÿë 7 äàò÷èê
exti_det ();
EXTI-›PR |= EXTI_PR_PR3; // EXTI3
}
return;
}
void exti_det (void)
{
if(dist_cnt_en==1)
{
if((dist_cnt›=d_raise)&(dist_cnt‹dist_max[n_sns]/2)) // äèàãíîñòèêà íà ëåòó
{
if((resp_is_det&_BV(n_sns))==0)
{
d_resp_val[n_sns]=dist_cnt;
resp_is_det|=_BV(n_sns);
tst_high;tst_low;
}
}
if(dist_cnt›=d_min_resp) // ïðîïóñê çâîíà
{
if((det[step]&_BV(n_sns))==0)
{
if(dist_cnt›=2*dist_min[n_sns]) // ìèíèìàëüíàÿ äèñòàíöèÿ
{
dist[n_sns]=dist_cnt/2;
dist_lev[n_sns]=dist_to_lev (dist[n_sns]);
n_cur=n_sns;d_cur=dist[n_sns];
// exti_msk_tmp[step]&= ~_BV(n_sns);
// exti_capt(exti_msk_tmp[step]);
det[step]|=_BV(n_sns);
tst_high;tst_low;
send_dist=1;
}
}
//tst_high;tst_low;
}
}
return;
} |
__________________
То, что нас не убивает - делает нас сильнее
Последний раз редактировалось realid; 30.03.2017 в 16:23.
|
|
|
|
30.03.2017, 16:24
|
#24
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,481
Сказал спасибо: 396
Сказали Спасибо 2,222 раз(а) в 1,317 сообщении(ях)
|
Re: обработка одновременных прерываний в STM32
Ну а с чего бы тут возникать прерывание, если закомментировано включение маски прерываний. Регистр IMR.
Закомментировано разрешение прерывания от указанной линии
Последний раз редактировалось NewWriter; 30.03.2017 в 16:26.
|
|
|
|
30.03.2017, 16:35
|
#25
|
|
Гражданин KAZUS.RUN
Регистрация: 01.01.2007
Адрес: Таганрог
Сообщений: 571
Сказал спасибо: 26
Сказали Спасибо 213 раз(а) в 91 сообщении(ях)
|
Re: обработка одновременных прерываний в STM32
у меня этот бит устанавливается в программе
|
Код:
|
void exti_capt (unsigned int exti_msk)
{
// capt0
if(exti_msk&0x0001){EXTI-›IMR |= EXTI_IMR_MR13; }
else{EXTI-›IMR &= ~EXTI_IMR_MR13; }
// capt1
if(exti_msk&0x0002){EXTI-›IMR |= EXTI_IMR_MR12; }
if((exti_msk&0x0002)==0){EXTI-›IMR &= ~EXTI_IMR_MR12;}
// capt2
if(exti_msk&0x0004){EXTI-›IMR |= EXTI_IMR_MR15; }
if((exti_msk&0x0004)==0){EXTI-›IMR &= ~EXTI_IMR_MR15; }
// capt3
if(exti_msk&0x0008){EXTI-›IMR |= EXTI_IMR_MR14; }
if((exti_msk&0x0008)==0){EXTI-›IMR &= ~EXTI_IMR_MR14;}
// capt4
if(exti_msk&0x0010){EXTI-›IMR |= EXTI_IMR_MR6;}
if((exti_msk&0x0010)==0){EXTI-›IMR &= ~EXTI_IMR_MR6;}
// capt5
if(exti_msk&0x0020){EXTI-›IMR |= EXTI_IMR_MR7;}
if((exti_msk&0x0020)==0){EXTI-›IMR &= ~EXTI_IMR_MR7;}
// capt6
if(exti_msk&0x0040){EXTI-›IMR |= EXTI_IMR_MR0;}
if((exti_msk&0x0040)==0){EXTI-›IMR &= ~EXTI_IMR_MR0; }
// capt7
if(exti_msk&0x0080){EXTI-›IMR |= EXTI_IMR_MR3;}
if((exti_msk&0x0080)==0){EXTI-›IMR &= ~EXTI_IMR_MR3;}
// capt8
if(exti_msk&0x0100){EXTI-›IMR |= EXTI_IMR_MR1; }
if((exti_msk&0x0100)==0){EXTI-›IMR &= ~EXTI_IMR_MR1; }
// capt9
if(exti_msk&0x0200){EXTI-›IMR |= EXTI_IMR_MR2;}
if((exti_msk&0x0200)==0){EXTI-›IMR &= ~EXTI_IMR_MR2;}
// capt10
if(exti_msk&0x0400){EXTI-›IMR |= EXTI_IMR_MR11;}
if((exti_msk&0x0400)==0){EXTI-›IMR &= ~EXTI_IMR_MR11;}
// capt11
if(exti_msk&0x0800){EXTI-›IMR |= EXTI_IMR_MR10;}
if((exti_msk&0x0800)==0){EXTI-›IMR &= ~EXTI_IMR_MR10;}
return;
} |
__________________
То, что нас не убивает - делает нас сильнее
Последний раз редактировалось realid; 30.03.2017 в 17:13.
|
|
|
|
30.03.2017, 16:54
|
#26
|
|
Вид на жительство
Регистрация: 10.06.2007
Сообщений: 429
Сказал спасибо: 34
Сказали Спасибо 51 раз(а) в 47 сообщении(ях)
|
Re: обработка одновременных прерываний в STM32
Вот это вот:
|
Код:
|
EXTI-›PR |= EXTI_PR_PR13; |
точно сбрасывает только свой флаг, а не все что есть в EXTI-›PR?
Как я понимаю должно быть так:
|
Код:
|
EXTI-›PR = EXTI_PR_PR13; |
dgrishin об этом и написал.
И никаких аппаратных глюков тут, видимо, нет
|
|
|
|
30.03.2017, 17:06
|
#27
|
|
Вид на жительство
Регистрация: 10.06.2007
Сообщений: 429
Сказал спасибо: 34
Сказали Спасибо 51 раз(а) в 47 сообщении(ях)
|
Re: обработка одновременных прерываний в STM32
Немного поясню.
Сброс флага осуществляется записью в регистр EXTI-›PR единицы на место нужного флага (где уже стоит единица). Запись нуля (в этом регистре) флаг не изменяет (1 не станет 0). Это всё сделано для удобства сброса отдельных флагов (ну может ещё по каким-то причинам, я не знаю).
Запись
EXTI-›PR |= EXTI_PR_PR13;
тоже самое что и
EXTI-›PR = EXTI-›PR | EXTI_PR_PR13;
Таким образом все установленные флаги сбрасываются.
|
|
|
|
30.03.2017, 17:13
|
#28
|
|
Супер-модератор
Регистрация: 15.10.2007
Сообщений: 3,578
Сказал спасибо: 175
Сказали Спасибо 1,567 раз(а) в 810 сообщении(ях)
|
Re: обработка одновременных прерываний в STM32
serb-radio, тегом CODE религия не позволяет пользоваться?
|
|
|
|
30.03.2017, 17:23
|
#29
|
|
Заблокирован
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
|
Re: обработка одновременных прерываний в STM32
Сообщение от H4LF
|
|
Немного поясню.
|
Если сами запутались, то не путайте ТСа и всех остальных.
|
|
|
|
30.03.2017, 17:25
|
#30
|
|
Супер-модератор
Регистрация: 15.10.2007
Сообщений: 3,578
Сказал спасибо: 175
Сказали Спасибо 1,567 раз(а) в 810 сообщении(ях)
|
Re: обработка одновременных прерываний в STM32
Сообщение от STM32F0
|
|
Если сами запутались, то не путайте ТСа и всех остальных.
|
Сообщение от H4LF
|
|
EXTI-›PR = EXTI_PR_PR13;
|
Все правильно он написал.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 21:25.
|
|