Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: USB C8051F340 и Borland Builder C++
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > MCS51
bychkov_vladimir
Добрый день !

где можно найти пример описания хост программы для работы с контроллером C8051F340 созданной в Borland builder C++ c поддержкой USB интерфейса.
пример аналогичный тем, которые поставляються совместно с кит платой по управлению мерцанием светодиодов и т.д.
попытка переделать поставляемые примеры не увенчалась успехом.
очень хотелось бы пример исходника, который приведен в AN039

может кто то сталкивался с подобным - буду признателен !
спасибо !
vladec
Делал в свое время на Builder-е HOST-программу для C8051F320, в общем ни каких особых проблем не было. Единственной для меня непреодолимой трудностью оказалось статически прилинковать ихнюю dll в Borland, пришлось работать с ней в режиме динамической подгрузки.
alvol
Цитата(vladec @ Oct 11 2007, 11:00) *
Делал в свое время на Builder-е HOST-программу для C8051F320, в общем ни каких особых проблем не было. Единственной для меня непреодолимой трудностью оказалось статически прилинковать ихнюю dll в Borland, пришлось работать с ней в режиме динамической подгрузки.


тоже работал с C8051F320, но с использованием технологии USBExpress
Dll ихнюю пережал из Visual Studio в BorlandBuilder варинт (утилитка в комплекте с билдером идет), тогда еще глюк был в Dll с определением количества байт в очереди, но его исправили за пару недель, так что все заработало, правда как USB 1.1 и то благодаря USBExpress малек медленнее.
Неудобство этой технологии вызвало использованием ими виртуального прерывания (добавочного), из-за чего, пока не передаст данные USB, процессор не выполняет дальше действия, т.е. работает не как аппаратная реализация, а программная с вызыванием функции. Про это было на буржуйском форуме очень подробно объяснено, что придется идти на уступки по скорости из-за простоты реализации.

если интересно можно будет поискать что-то
oran-be
AN139 (не 039, как я понял) предназначен для объяснения тонкостей реализации обязательных ЮСБишных фич. Для построения рабочего креатиффа, не углубляясь в типовые дебри лучше использовать АН169 USBExpress. Тем более, что механизм очень похожий, используется ЕР0 в булк режиме. Исходники есть и на хост, и на функцию.
А добавочное прерывание ничем не оличается от обычного, просто силабовские программеры не нашли другого способа разместить функцию обработки запроса, определяемую пользователем по фиксированному адресу. Им из-за такого метода пришлось на шару вколбасить сохранение и восстановление контекста рабочих регистров - 32 такта нагрузки.
alvol
Цитата(oran-be @ Oct 15 2007, 15:42) *
AN139 (не 039, как я понял) предназначен для объяснения тонкостей реализации обязательных ЮСБишных фич. Для построения рабочего креатиффа, не углубляясь в типовые дебри лучше использовать АН169 USBExpress. Тем более, что механизм очень похожий, используется ЕР0 в булк режиме. Исходники есть и на хост, и на функцию.
А добавочное прерывание ничем не оличается от обычного, просто силабовские программеры не нашли другого способа разместить функцию обработки запроса, определяемую пользователем по фиксированному адресу. Им из-за такого метода пришлось на шару вколбасить сохранение и восстановление контекста рабочих регистров - 32 такта нагрузки.


кста, чтоб не париться с замедлением при заполнении в стеке, можно указать, что нужно использовать банки памяти спец директивой, вроде :

void UART0_Interrupt (void) interrupt 4 using 1 //Interrupt recieve RI0 and transmite TI0 (page 89)
{
}
oran-be
Цитата
кста, чтоб не париться с замедлением при заполнении в стеке, можно указать, что нужно использовать банки памяти спец директивой...

Здесь не совсем тот случай. Прерывание используется в либе и поменять банк не получится. А виртуальное прерывание программеры силаба использовали судя по всему по некомпетентности, поскольку им достаточно было объявить абсолютный кодовый сегмент. Видать не нашли. как это сделать. В итоге у них в либе перед вызовом пользовательской функции идет кусок кода, скорее всего накатанный на асеммблере, где восстанавливаются рабочие регистры, но вместо выхода из прерывания происходит калл по адресу виртуального прерывания. Для того, чтобы сделать все по человечески, т.е. использовать отдельный банк и убрать лишние маслания в стеке надо либо написать все по новому, либо выломать код из либы и отрехтовать его.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.