|
|
  |
STM32L151 USB прерывания, USB_HP_IRQHandler USB_LP_IRQHandler |
|
|
|
Jun 20 2015, 01:09
|

Гуру
     
Группа: Свой
Сообщений: 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
--------------------
Если у Вас нет практического опыта в данной теме- не вступайте в дискуссию и не пишите никаких теоретических рассуждений! Заранее спасибо !
|
|
|
|
|
Jun 20 2015, 04:34
|

Гуру
     
Группа: Свой
Сообщений: 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.
--------------------
|
|
|
|
|
Jun 20 2015, 05:28
|

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

|
Цитата(prottoss @ Jun 20 2015, 08:23)  А почему нельзя обрабатывать буфер точки в обоих обработчиках? В конце-концов, если попали в LP ISR и обнаружили, что буфер точки не содержит данных для обработки, можно просто выйти из ISR Да, так можно. Но я подумал, что если в документации написано, что прерывание HP специально сделано для обработки только BULK и ISO , то нужно его именно для этого и применить, и обрабатывать только там. Документация ясности не даёт, уже 10 раз её перечитал. Надеюсь, что кто-нибудь, кто с этим разобрался, подскажет.
--------------------
Если у Вас нет практического опыта в данной теме- не вступайте в дискуссию и не пишите никаких теоретических рассуждений! Заранее спасибо !
|
|
|
|
|
Jun 21 2015, 09:50
|

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

|
Цитата(MiklPolikov @ Jun 20 2015, 05:09)  Но с прерыванием LP как-то ведь работает, не зависает в нём. Так грамотно написанный обработчик систему не вешает.  Цитата Объясните пожалуйста, какие именно биты нужно снять и как? NVIC_IPRx??? Прошу прощения, "обдёрнулся": конечно же NVIC_ISPRх. Что я имел в виду? Соответствующий флаг в NVIC_ISPRх у прерывания, активируемого уровнем, остаётся "1" и при активном состоянии прерывания. Его (флаг) надо не забыть снять в NVIC_IСPRх, но и причина вызова прерывания должна быть устранена. Тогда повторного (лишнего) входа в обработчик не будет.
--------------------
Пролетарий умственного труда.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|