Перейти к содержанию
    

Vitaliy_ARM, где разрешение прерываний в майне?

 

USBIRQ_IRQHandler кто будет вызывать? Даже указателя на него не видно.

 

Контроллер прерываний разве не надо настраивать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Vitaliy_ARM, где разрешение прерываний в майне?

 

USBIRQ_IRQHandler кто будет вызывать? Даже указателя на него не видно.

 

Контроллер прерываний разве не надо настраивать?

 

Внизу кода, после функции main, прописан обработчик прерывания USB.

Если я не ошибаюсь, все настройки прерываний и прочего делают функции, зашитые в область памяти USB драйвера.

Это отражено в презентациях NXP и даташите на процессор.

Одну из презентаций приложил. Попробовал встроить также __enable_interrupt() в часть кода, результат все равно тот же: устройство не опознано.

Хотя usb загрузчик работает без проблем.

 

    (*rom)->pUSBD->init(&DeviceInfo);
    (*rom)->pUSBD->connect(TRUE);
    
    __enable_interrupt();
    
    while(1);

lpc13xx.usb.pdf

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Внизу кода, после функции main, прописан обработчик прерывания USB.

Если речь о USBIRQ_IRQHandler, то в коде не видно ни указателя, ни прямого вызова. Так что его никто не догадается вызвать. И соответственно все прерывания от USB будут недоступны.

 

 

Если я не ошибаюсь, все настройки прерываний и прочего делают функции, зашитые в область памяти USB драйвера.

Частично ошибаетесь. Пользовательская программа (обычно в cstartup.c) имеет свои вектора IRQ, начиная с адреса 0x40. Так вот, если вектор USB-прерывания пользовательской проги не настроен на USBIRQ_IRQHandler, то работать USB не будет.

 

Хотя usb загрузчик работает без проблем.

Он работает на собственном векторе прерываний, бутовом.

 

Хм.. У USB оказывается 2 вектора. И возможно оба их нужно инициализировать .

 

Хотя возможно ещё кое-что. Если работать на бутовом ремапе, то наверное можно как-то работать на бутовых прерываниях (если они это умеют).

 

ЗЫ. lpc13xx.usb.pdf ещё не прочитал. Где-то мог и ошибиться.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если речь о USBIRQ_IRQHandler, то в коде не видно ни указателя, ни прямого вызова. Так что его никто не догадается вызвать. И соответственно все прерывания от USB будут недоступны.

 

Попробую подпаять джитаг. Лучше один раз увидеть :) . Потом отпишусь.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нашёл такую вот инфу

Memory Restrictions: The rom-based HID drivers use sections 0x10000050 to 0x10000180 of the on-chip RAM, meaning that you will need to configure the linker in your toolchain to avoid this area. Any attempt to use this memory for your own code will almost certainly result in system failure. The project files provided with the LPC1343 Code Base are configure to exclude these chunks of memory from system use, but if you are implementing your own custom project and making use of rom-based HID you will need to make sure the linker is properly configured to avoid this memory range.

 

Из исходников в сети нашёл только один

http://www.microbuilder.eu/Projects/LPC134...43CodeBase.aspx

http://www.microbuilder.eu/Projects/LPC134...umentation.aspx

 

Но там вроде как похожий код, тоже без __enable_interrupt().

Только баг бутового (*rom)->pUSBD->init_clk_pins() описан. Точнее полубаг. Ядро начинает работать на 48 МГц, хотя это не обязательно и не всегда удобно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нашёл такую вот инфу

Memory Restrictions: The rom-based HID drivers use sections 0x10000050 to 0x10000180 of the on-chip RAM, meaning that you will need to configure the linker in your toolchain to avoid this area. Any attempt to use this memory for your own code will almost certainly result in system failure. The project files provided with the LPC1343 Code Base are configure to exclude these chunks of memory from system use, but if you are implementing your own custom project and making use of rom-based HID you will need to make sure the linker is properly configured to avoid this memory range.

 

Из исходников в сети нашёл только один

http://www.microbuilder.eu/Projects/LPC134...43CodeBase.aspx

http://www.microbuilder.eu/Projects/LPC134...umentation.aspx

 

Но там вроде как похожий код, тоже без __enable_interrupt().

Только баг бутового (*rom)->pUSBD->init_clk_pins() описан. Точнее полубаг. Ядро начинает работать на 48 МГц, хотя это не обязательно и не всегда удобно.

 

Я учел, что нужно оставить место для аппартного усб стека и прописал это в файл компановщика, так как описано в апликейшин ноте по усб на этот проц.

Все равно не работает. Подпаял джитаг. Почистил примеры яра от инициализаций дисплеев и прочего. По прежнему HID и VCP примеры не работают. Пример микрофона работает.

 

После отладки своего проекта получил следующее:

Увидел, что в моем проекте не проходит функция (*rom)->pUSBD->init_clk_pins(); Отладчик на ней останавливается. Разбираюсь, в чем может быть дело.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Примеры победил. Ошибка была в плате. На вывод USB_VBUS не было подано +5V от разъема. Подал - все заработало! :08:

И мышка и виртуальный ком порт. Только драйвер на VCP под виндовс 7 не захотел ставиться.

 

Мой проект пока не работает. IAR не компилирует обработчик прерывания:

void USBIRQ_IRQHandler(void)
{
  (*rom)->pUSBD->isr();
}

 

В чем может быть дело?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Дело в том, что не подключен свой или стандартный startup.s

 

Его можно взять из проекта с примером.

 

Точнее даже так. В том стартапе, который подключается (ИАРом?) по умолчанию имена обработчиков (в том числе и от USB) могут отличаться. Поэтому варианта два.

1. Узнать имя и изменить своё имя обработчика.

2. Использовать всегда свой стартап и своё имя (любое) обработчика в майне и в стартапе.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Дело в том, что не подключен свой или стандартный startup.s

 

Его можно взять из проекта с примером.

 

Точнее даже так. В том стартапе, который подключается (ИАРом?) по умолчанию имена обработчиков (в том числе и от USB) могут отличаться. Поэтому варианта два.

1. Узнать имя и изменить своё имя обработчика.

2. Использовать всегда свой стартап и своё имя (любое) обработчика в майне и в стартапе.

 

Вариант 1 - ошибка в имени обработчика. Подсмотрел в стартапе :rolleyes: , заменил на void USB_IRQHandler(void) и все сразу заработало. Спасибо!

 

В общем мне процессор очень понравился, если бы не мои ошибки, то вообще было бы все замечательно. Аппаратный хид работает как часы.

 

Всем спасибо за внимание.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ещё подсказка на будущее - при компиляции в С++ режиме стандартные обработчики нужно объявлять как С-функции:

 

extern "C" void USB_IRQHandler()

{

...

}

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ещё подсказка на будущее - при компиляции в С++ режиме стандартные обработчики нужно объявлять как С-функции:

 

extern "C" void USB_IRQHandler()

{

...

}

 

Это сделано.

 

Вопрос такого плана. Может кто имеет опыт работы с HID устройством. Вытаюсь организовать передачу данных от устройства в ПК без потерь. В процессоре в функции GetInReport() стоит счетчикЮ который инкрементируется каждый раз, когда вызывается функция. В проге на ПК делается следующее, в цикле параллельного процесса вызывается постоянно функция ReadFile() и читаются данные из устройства. Иногда наблюдаю пропуски пакетов. Такая задача реализуема или это по другому делается?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...