Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: USB_HID под CrossWorks
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
FormatCft
Дорброго времени суток!

Может кто поделиться исходниками HID под CW? (На возможность переложить пример из под кейла рассмотрел. Показалось муторно.)

Заранее спасибо!
KostyantynT
Цитата(FormatCft @ Feb 17 2009, 22:45) *
Дорброго времени суток!

Может кто поделиться исходниками HID под CW? (На возможность переложить пример из под кейла рассмотрел. Показалось муторно.)

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

Како процессор?
FormatCft
Цитата(КонстантинТ @ Feb 18 2009, 02:19) *
Како процессор?

lpc23xx.

Усё. Переделал пример от кейла. Не такой он уж и страшный как оказалось.
Gantz
Цитата(FormatCft @ Feb 18 2009, 01:24) *
lpc23xx.

Усё. Переделал пример от кейла. Не такой он уж и страшный как оказалось.



Можно глянуть вашь пример. У меня такой же вопрос. А примера под CW нету. Покаместь мучаюсь.
FormatCft
Цитата(Gantz @ Feb 18 2009, 17:04) *
Можно глянуть вашь пример. У меня такой же вопрос. А примера под CW нету. Покаместь мучаюсь.

Сложновато. Уже воткнул в проект и под фриртос. Вообщем ничего сложного. 

Главное в выравниванием разобраться (у меня это функции USB_WriteEP и USB_ReadEP) и поправить некоторые непереносимые вещи на которые ругается компилятор.


Вообщем по большому счету это модули usbhw.cpp и модуль usbcore.cpp. 

Основную загвоздку исправил так:

Код
DWORD USB_WriteEP (DWORD EPNum, BYTE *pData, DWORD cnt) {
 DWORD n;
 unsigned char masiv[4] __attribute__ ((aligned (32)));

 USB_CTRL = ((EPNum & 0x0F) << 2) | CTRL_WR_EN;

 TX_PLENGTH = cnt;
 unsigned long    i    = 0;
 for (n = 0; n < (cnt + 3) / 4; n++) {
     masiv[i++] = *(pData+i);
                masiv[i++] = *(pData+i);
                masiv[i++] = *(pData+i);
                masiv[i++] = *(pData+i);
                
     TX_DATA = *((DWORD *)masiv);
     i    = 0;

     pData += 4;
 }

 USB_CTRL = 0;

 WrCmd(CMD_SEL_EP(EPAdr(EPNum)));
 WrCmd(CMD_VALID_BUF);

 return (cnt);
}

Как можно увидеть куча лишнего. Но  чтобы красиво было нужно потратить время.
Если у кого-то найдется более изящное решение, просьба поделиться.
Regressor
Цитата(FormatCft @ Feb 18 2009, 23:40) *
Вообщем по большому счету это модули usbhw.cpp и модуль usbcore.cpp. 
Основную загвоздку исправил так:

Код
DWORD USB_WriteEP (DWORD EPNum, BYTE *pData, DWORD cnt) {
 DWORD n;
 unsigned char masiv[4] __attribute__ ((aligned (32)));

Как можно увидеть куча лишнего. Но  чтобы красиво было нужно потратить время.
Если у кого-то найдется более изящное решение, просьба поделиться.


В примерах под кейл выравнивания нету, и они вроде работают. А в чем заключалась загвоздка ?
FormatCft
Цитата(Regressor @ Mar 2 2009, 03:52) *
В примерах под кейл выравнивания нету, и они вроде работают. А в чем заключалась загвоздка ?


Ну остается только, Вам, взять и проверить smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.