‮Сдвиг по фазе (kincajou) wrote,
‮Сдвиг по фазе
kincajou

worklog: скелет драйвера USB

USB: initialized, started
USB Connect
USB Disconnect
USB Connect
USB Disconnect
USB Connect


Это я подключаю-отключаю кабель, прерывание срабатывает и коллбэки пишут в консоль строчки через очередь FreeRTOS.

Но непонятно вот что: устройство ещё только-только проинициализировано, кабель не подключён, а флаг "RxFIFO не пуст" (RXFLVLM) уже выставлен - словно бы какие-то данные были приняты, чего не может быть. В регистре отладки (GRXSTSP) при этом всё по нулям, никаких прочих активных прерываний нет. Флаг ничем не сбрасывается, его можно только замаскировать.

В референс-мануале дофига всяких заметок и нюансов упоминается по ходу дела, то в описании регистров, то ещё где; есть и упоминания того, что некоторые прерывания перед их разрешением нужно принудительно сбрасывать. Возможно, где-то указано, что это прерывание именно что надо замаскировать и разрешать его следует гораздо позже... Проблема ещё в том, что в нормальных условиях этот флаг сбрасывается только если из RxFIFO прочитаны все данные -- но их там нет (если верить GRXSTSP) и читать нечего.

Проблема точно не в размере этого FIFO - щас прописано 128 байт, этого более чем достаточно для FS-устройства (изохронные пакеты, которые могут быть гораздо длиннее, я использовать не собираюсь).
Subscribe

  • Абсолютли!

  • Мета

    Канал о фейлах .. эхм.. как бы это.. сам.

  • Неужели

    "Протон", который уже давно заменён на "Ангару" и больше не летает, сегодня должен вытащить "Науку", пролежавшую более 20 лет на Земле, и…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 7 comments