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

Category:

worklog: CMSIS-то ненастоящий!

Впрочем, нет, CMSIS настоящий, но сомнения гложут.

Дело вот в чём. Ковыряя STшную библиотеку и вкуривая STшный (истошный, лол) референс-мануал, поглядев самую бесполезную в мире презенташку, постепенно пришёл к нескольким выводам:
1) люди, писавшие RM, с функционированием блока USB знакомы, но поверхностно. Их описание того, как следует инициализировать блок, отличается от рабочего библиотечного кода. Не то чтобы как-то катастрофически, но ежели делать прямо по RM -- ничего не заработает. Даже не включится.
2) люди, писавшие CMSIS, лишились последних сил, дойдя до описания регистров USB OTG. Т.е. онеи описали их структуры и мнемоники, даже пришили пару структур к правильным адресам в памяти, но бросили это дело на полпути. Я уж было принялся самостоятельно всё дорисовывать, а затем обнаружил, что не хватает на самом деле только приколотить остальные структуры (они уже описаны) и один-два регистра, как-то так:
#define USB_OTG_FS_OutEP_1_5 \
    (*(USB_OTG_OUTEndpointTypeDef (*)[5])(USB_OTG_FS_PERIPH_BASE + USB_OTG_OUT_ENDPOINT_BASE))
...
    USB_OTG_FS_OutEP_1_5[i]->DOEPCTL = USB_OTG_DOEPCTL_SNAK; 
    /* не стоит забывать, что для OutEP0/InEP0 регистры немного отличаются! */

3) люди, писавшие STM32Cube USB device library, обладают, с одной стороны, тайным знанием о том, как оно всё функционирует (вернее, как вообще заставить что-то работать).. а с другой стороны, не жалеют процессорные такты и, например, вместо того, чтобы в обработчике прерывания один раз прочитать нужный регистр и пройтись по его битам, читают его каждый раз, когда смотрят на очередной бит. И не просто читают, а ажно при помощи полновесной функции - не какой-нибудь там static inline, а со всей свитой из стэка и х.з. почему так. Я вот щас упрощу всё, и когда оно заработает -- оно заработает!

Модуль USB - на текущий момент, самая сложная железяка из всего, что я видел. Что и понятно: протокол-то сионские мудрецы сочинили, не иначе...
Tags: #define
Subscribe

  • 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 

  • 9 comments