реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> STM32L151 USB прерывания, USB_HP_IRQHandler USB_LP_IRQHandler
MiklPolikov
сообщение Jun 19 2015, 06:09
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 015
Регистрация: 23-01-07
Из: Москва
Пользователь №: 24 702



Коллеги, помогите разобраться с прерываниями USB .

1) Когда включено только прерывание USB_LP_IRQHandler и все прерывания обрабатываются только в нём, проблем нет.

2) Пытаюсь настроить прерывание USB_HP_IRQHandler и обрабатывать в нём флаг успешной транзакции USB_ISTR_CTR , т.к. оно только для этого и нужно.
Обнаруживаю, что :
- Программа с флагом USB_ISTR_CTR попадает то в HP , то в LP , хотя в HP все флаги USB->ISTR сбрасываются и флаги в регистрах конечных точек USB_EPNR_CTR_RX USB_EPNR_CTR_TX то же сбрасываются. По идее программа в LP попадать не должна, т.к. HP происходит раньше.
- При снятом бите USB_CNTR_CTRM т.е. отключенном прерывании программа всё равно попадает в прерывание с флагом USB_ISTR_CTR , что совсем сбивает с толку.

Чего я не понимаю ?

Заранее спасибо !


--------------------
Если у Вас нет практического опыта в данной теме- не вступайте в дискуссию и не пишите никаких теоретических рассуждений! Заранее спасибо !
Go to the top of the page
 
+Quote Post
Obam
сообщение Jun 19 2015, 06:20
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 756
Регистрация: 14-11-14
Пользователь №: 83 663



В соответствующем регистре NVIC (NVIC_IPRx) обработчиками pending-флаги снимаются? Это случай, если прерывание по уровню…

Сообщение отредактировал IgorKossak - Jun 19 2015, 08:46
Причина редактирования: бездумное цитирование


--------------------
Пролетарий умственного труда.
Go to the top of the page
 
+Quote Post
MiklPolikov
сообщение Jun 20 2015, 01:09
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 015
Регистрация: 23-01-07
Из: Москва
Пользователь №: 24 702



Цитата(Obam @ Jun 19 2015, 09:20) *
В соответствующем регистре NVIC (NVIC_IPRx) обработчиками pending-флаги снимаются? Это случай, если прерывание по уровню…


Не снимаются.
Но с прерыванием LP как-то ведь работает, не зависает в нём.

Объясните пожалуйста, какие именно биты нужно снять и как?
NVIC_IPRx - это Interrupt priority registers
Есть регистр NVIC_ICPRx Interrupt clear-pending registers , при попадании в HP NVIC_ICPR0 содержится значение 0x08000000
Делаю NVIC_ICPR0 = 0x08000000 ; запись 1 должна снимать бит. Но он не снимается. И программа продолжает попадать в LP


--------------------
Если у Вас нет практического опыта в данной теме- не вступайте в дискуссию и не пишите никаких теоретических рассуждений! Заранее спасибо !
Go to the top of the page
 
+Quote Post
prottoss
сообщение Jun 20 2015, 04:34
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(MiklPolikov @ Jun 20 2015, 07:09) *
Объясните пожалуйста, какие именно биты нужно снять и как?

Цитата из даташита:
Цитата
24.3.1 Description of USB blocks...
Interrupt Mapper: This block is used to select how the possible USB events can generate interrupts and map them to three different lines of the NVIC:
– USB low-priority interrupt (Channel 20): Triggered by all USB events (Correct transfer, USB reset, etc.). The firmware has to check the interrupt source before serving the interrupt.
– USB high-priority interrupt (Channel 19): Triggered only by a correct transfer event for isochronous and double-buffer bulk transfer to reach the highest possible transfer rate.
– USB wakeup interrupt (Channel 42): Triggered by the wakeup event from the USB Suspend mode.

т.е. для ISO и BULK (если двойная буферизация) можно использовать HP.


--------------------
Go to the top of the page
 
+Quote Post
MiklPolikov
сообщение Jun 20 2015, 05:10
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 015
Регистрация: 23-01-07
Из: Москва
Пользователь №: 24 702



Цитата(prottoss @ Jun 20 2015, 07:34) *
т.е. для ISO и BULK (если двойная буферизация) можно использовать HP.


Так я с этого и начал : )
А мой вопрос - почему у меня не работает ?


--------------------
Если у Вас нет практического опыта в данной теме- не вступайте в дискуссию и не пишите никаких теоретических рассуждений! Заранее спасибо !
Go to the top of the page
 
+Quote Post
prottoss
сообщение Jun 20 2015, 05:23
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(MiklPolikov @ Jun 20 2015, 11:10) *
А мой вопрос - почему у меня не работает ?
У меня до конца нет понимания, что не работает sm.gif
А почему нельзя обрабатывать буфер точки в обоих обработчиках?

В конце-концов, если попали в LP ISR и обнаружили, что буфер точки не содержит данных для обработки, можно просто выйти из ISR


--------------------
Go to the top of the page
 
+Quote Post
MiklPolikov
сообщение Jun 20 2015, 05:28
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 015
Регистрация: 23-01-07
Из: Москва
Пользователь №: 24 702



Цитата(prottoss @ Jun 20 2015, 08:23) *
А почему нельзя обрабатывать буфер точки в обоих обработчиках?
В конце-концов, если попали в LP ISR и обнаружили, что буфер точки не содержит данных для обработки, можно просто выйти из ISR


Да, так можно.
Но я подумал, что если в документации написано, что прерывание HP специально сделано для обработки только BULK и ISO , то нужно его именно для этого и применить, и обрабатывать только там.

Документация ясности не даёт, уже 10 раз её перечитал. Надеюсь, что кто-нибудь, кто с этим разобрался, подскажет.


--------------------
Если у Вас нет практического опыта в данной теме- не вступайте в дискуссию и не пишите никаких теоретических рассуждений! Заранее спасибо !
Go to the top of the page
 
+Quote Post
prottoss
сообщение Jun 20 2015, 05:35
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(MiklPolikov @ Jun 20 2015, 11:28) *
Но я подумал...
Я тоже так думал.

В итоге пришел к выводу, что HP ISR полезно только если происходит одновременная работа по BULK и INTERRUPT каналам, чтобы приоритет был у BULK


--------------------
Go to the top of the page
 
+Quote Post
Obam
сообщение Jun 21 2015, 09:50
Сообщение #9


Знающий
****

Группа: Участник
Сообщений: 756
Регистрация: 14-11-14
Пользователь №: 83 663



Цитата(MiklPolikov @ Jun 20 2015, 05:09) *
Но с прерыванием LP как-то ведь работает, не зависает в нём.

Так грамотно написанный обработчик систему не вешает. sm.gif

Цитата
Объясните пожалуйста, какие именно биты нужно снять и как?

NVIC_IPRx??? Прошу прощения, "обдёрнулся": конечно же NVIC_ISPRх.
Что я имел в виду? Соответствующий флаг в NVIC_ISPRх у прерывания, активируемого уровнем, остаётся "1" и при активном состоянии прерывания. Его (флаг) надо не забыть снять в NVIC_IСPRх, но и причина вызова прерывания должна быть устранена. Тогда повторного (лишнего) входа в обработчик не будет.



--------------------
Пролетарий умственного труда.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th June 2025 - 00:28
Рейтинг@Mail.ru


Страница сгенерированна за 0.01444 секунд с 7
ELECTRONIX ©2004-2016