Оригинальная прошивка с исходными текстами здесь, в архиве: ftp://ftp.radio.ru/pub/2007/01/usbjoy/prog.zip
Взял новый драйвер USB от objective development: http://www.obdev.at/products/vusb/download.html
Отредактировал как надо usbconfig-prototype.h в соответствии со старым, переименовал в usbconfig.h, заменил все остальные исходники драйвера новыми, в т.ч. скопировал asmcommon.inc и usbdrvasm12.inc.
Создал новый проект в IAR, добавил все файлы.
В свойствах проекта выбрал контроллер ATmega8a, на вкладке System отметил галочку "Enable bit defintions in I/O-include files".
В common.h выкинул io.h, заменил на iom8a.h, выкинул pgmspace.h, пофиксил ошибку с __flash (было объявлено как const chat, требовало char), выкинул interrupt.h, новых ошибок после этого не заметил.
Остались ошибки в драйвере USB.
В строке, в которой присутствует переменная USBIN в usbdrv.c:
Error[Pe020]: identifier "PINPORTD" is undefined
в
Код: Выделить всё
uchar usbLineStatus = USBIN & USBMASK;Error[50]: Undefined symbol:'PINPORTD'
Error[50]: Undefined symbol:'DDRPORTD'
Error[50]: Undefined symbol:'PORTPORTD'
в строках
Код: Выделить всё
sbis USBIN, USBMINUSКод: Выделить всё
in x2, USBDDR;[-12] 12 cycles until SOPКод: Выделить всё
sbi USBOUT, USBMINUS;[-10] prepare idle state; D+ and D- must have been 0 (no pullups)Также, остались варнинги:
Warning[Pe068]: integer conversion resulted in a change of sign C:\sega-update\usbdrv.c 318
Warning[Pe068]: integer conversion resulted in a change of sign C:\sega-update\usbdrv.c 320
Warning[Pe068]: integer conversion resulted in a change of sign C:\sega-update\usbdrv.c 329
Warning[Pe068]: integer conversion resulted in a change of sign C:\sega-update\usbdrv.c 331
Warning[Pe068]: integer conversion resulted in a change of sign C:\sega-update\usbdrv.c 333
в строках типа
Код: Выделить всё
GET_DESCRIPTOR(USB_CFG_DESCR_PROPS_DEVICE, usbDescriptorDevice)Код: Выделить всё
#define GET_DESCRIPTOR(cfgProp, staticName) \
if(cfgProp){ \
if((cfgProp) & USB_PROP_IS_RAM) \
flags = 0; \
if((cfgProp) & USB_PROP_IS_DYNAMIC){ \
len = usbFunctionDescriptor(rq); \
} \
else \
{ \
len = USB_PROP_LENGTH(cfgProp); \
usbMsgPtr = (uchar *)(staticName); \
} \
} \Искал по всем исходникам (в т.ч. заголовочным файлам IAR) 'PINPORTD', 'DDRPORTD', 'PORTPORTD' - ничего не нашел.

