ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
2 июля
325122 Топик полностью
Гудвин, волшебник (24.04.2012 21:03, просмотров: 142) ответил Гудвин на Жаба заставила-таки добить гада ;) Душа радОВАеЦЦа: "Program Size: Code=904 RO-data=424 RW-data=16 ZI-data=536". Все пучком - прерывание не дергается, данные шлются только по приказу "партии и правительства"... Вот чо добавил (код ~150 байт):
А вот так еще экономнее (790 байт), но несколько "черезжопно":  #define CCEMTY_INT (0x1<<10) #define CMD_SEL_EP_CLRI(x) (0x00400500 | ((x) << 16)) void WrCmd (uint32_t cmd) { LPC_USB->DevIntClr = CCEMTY_INT; LPC_USB->CmdCode = cmd; while ((LPC_USB->DevIntSt & CCEMTY_INT) == 0); } USB_IRQHandler(void) { #define INT_IN_EP 0x10 // это бит прерывания Input Report uint32_t disr; disr = LPC_USB->DevIntSt; /* Device Interrupt Status */ if ((disr & INT_IN_EP) && (!fl_send)) // тут проверим кинунуть гада или таки послать данные { LPC_USB->DevIntClr = disr & INT_IN_EP; // сбросим флаг прерывания WrCmd(CMD_SEL_EP_CLRI(INT_IN_EP>>1)); // в железе тоже } else (*rom)->pUSBD->isr(); } /* * Get HID Input Report -> InReport */ void GetInReport (uint8_t src[], uint32_t length) { fl_send=0; // сбросим флаг посылки данных // здесь делаем , что надо return; } void prepare_send (void) { fl_send=1; // взведем флаг посылки двнных LPC_USB->DevIntSet|=INT_IN_EP; // взведем флаг прерывания GetInReport } /* * Set HID Output Report <- OutReport */ void SetOutReport (uint8_t dst[], uint32_t length) { // здесь делаем , что надо... prepare_send(); // типа тут инициируем посылку данных в ответ... return; }