Пробую запустить USB host на LPC2388, доска SK-MLPC2388 от starterkit.ru, схема здесь: http://www.starterkit.ru/doc/SK_MLPC2378_88.pdf
разъем USB host подключен к первому каналу USB (p0.29, p0.30). Для начала пробую адаптировать под эту плату код Usbhost.Lite от NXP
Использую CrossStudio с отлажчиком MT-Link.
После инициализации хоста, при вставлении флешки в разъем не приходит прерывание. Программный вызов прерывания ( VICSoftInt = (1<<22); ) приводит к вызову обработчика, отсюда делаю вывод что прерывания сконфигурированны правильно.
При более пристальном изучении кода инициализации хоста пришел к выводу что в нем не хватает такого куска:
#define PORT_FUNC_U1DEV_U2HST 0
#define PORT_FUNC_U1HST_U2HST 1
#define PORT_FUNC_RESERVED 2
#define PORT_FUNC_U1HST_U2DEV 3
OTGStCtrl = ( PORT_FUNC_U1HST_U2DEV << OTGStCtrl_PORT_FUNC_BIT );
так как в спецификации на LPC23xx упоминается, что OTG контроллер перед использованием необходимо сконфигурировать, дабы он понял, что порт 1 ( в моем случае ) будет использоваться в режиме хоста.
проблема собственно в том, что при выполнении этой строчки кода я вылетаю в Data Abort.
в LPC2388.h OTGStCtrl определен так:
#define OTGStCtrl (*(volatile unsigned *)0xFFE0C110)
и это полностью совпадает с LPC23xx User Manual
при попытке просмотреть под отладчиком содержимое памяти по этому адресу вижу 0xAAAAAAAA, что наводит на мысли о том, что отладчик тоже не справляется с чтением этого региона. (все адреса, начиная с FFE0C100, задефайненного (правда в кейловских хедерах, но думаю это не принципиально) как USBOTG_BASE_ADDR читаются как 0xAAAAAAAA )
Подскажите, уважаемые коллеги, в какую сторону копать?