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

ArkZel

Участник*
  • Постов

    29
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о ArkZel

  • Звание
    Участник
    Участник
  • День рождения 16.02.1982

Информация

  • Город
    Array
  1. Всем привет! Помогите кто работал с АЦП pcm4222!!! Можно ли корректно производить смену частоты дискретизации у pcm4222 во время его работы ни применяя RESET? Если можно, то как это сделать?
  2. Поискал немного в инете и нашел очень полезную ссылку: http://www.microchip.com/forums/tm.aspx?m=...p;\#223235 Сделал все как там говорится. И все заработало. Сделал даже 3 устройства в одном (Audio + 2 COM). Ставлю на них дрова и все работает. Только для CDC устройств использую не usbser.sys, а другой.
  3. Всем привет! Пытаюсь реализовать USB - устройство которое в Windows будет представляться как 2-COM порта. Один COM - порт реализовал, драйвер использовал стандартный usbser.sys. Дескрипторы при этом следующие: DeviceDescriptor CDC1_HS_Device_Descriptor[] = { 18, 0x01, USB_VERSION_20, 0x02, 0x00, 0x00, 0x40, 0xABCD, 0xABCD, USB_RELEASE_NUMBER, 0, 0, 0, 0x01 }; ConfigurationDescriptor CDC1_Standard_Config_Descriptor[] = { 9, 0x02, 0x43, 0x02, 0x01, 0x00, 0x40, 250 }; InterfaceDescriptor CDC1_HS_Default_Interface_COM_Descriptor[] = //communication interface { 9, 0x04, 0x00, 0x00, 0x01, 0x02, 0x02, 0x01, 0x00 }; InterfaceDescriptor CDC1_HS_Default_Interface_DATA_Descriptor[] = //data interface { 9, 0x04, 0x01, 0x00, 0x02, 0x0A, 0x00, 0x00, 0x00 }; CDCFunctionalDescriptor CDC1_Heder_Functional_Descriptor[] = //heder functional descriptor { 0x05, 0x24, 0x00, 0x00, 0x02 }; CDCFunctionalDescriptor CDC1_Call_Management_Descriptor[] = //call management descriptor { 0x05, 0x24, 0x01, 0x03, 0x01 }; CDCFunctionalDescriptor CDC1_Abstract_Control_Management_Descriptor[] = //abstract control management descriptor { 0x04, 0х24, 0x02, 0x06, }; CDCFunctionalDescriptor CDC1_Union_Interface_Functional_Descriptor[] = //union interface functional descriptor { 0x05, 0х24, 0x06, 0x00, 0x01 }; EndpointDescriptor CDC1_HS_Interrupt_In2_Descriptor[] = { 7, USB_ENDPOINT_DESCRIPTOR_TYPE, 0x82, 0x03, 0x0020, 0x02 }; EndpointDescriptor CDC1_HS_Bulk_Out4_Descriptor[] = { 7, USB_ENDPOINT_DESCRIPTOR_TYPE, 0x04, 0x02, 0x0020, 0x00 }; EndpointDescriptor CDC1_HS_Bulk_In4_Descriptor[] = { 7, USB_ENDPOINT_DESCRIPTOR_TYPE, 0x84, 0x02, 0x0020, 0x00 }; Конфигурацию отправляю в следующем порядке: CDC1_Standard_Config_Descriptor[], //9-байт CDC1_HS_Default_Interface_COM_Descriptor[], //9-байт CDC1_Heder_Functional_Descriptor[] //5-байт CDC1_Call_Management_Descriptor[] //5-байт CDC1_Abstract_Control_Management_Descriptor[] //4-байт CDC1_Union_Interface_Functional_Descriptor[] //5-байт CDC1_HS_Interrupt_In2_Descriptor[] //7-байт CDC1_HS_Default_Interface_DATA_Descriptor[] //9-байт CDC1_HS_Bulk_Out4_Descriptor[] //7-байт CDC1_HS_Bulk_In4_Descriptor[] //7-байт Устанавливаю драйвер и все работает. Для 2-х COM-портов: Конфигурацию отправляю в следующем порядке: CDC1_Standard_Config_Descriptor[], //9-байт CDC1_HS_Default_Interface_COM_Descriptor[], //9-байт CDC1_Heder_Functional_Descriptor[] //5-байт CDC1_Call_Management_Descriptor[] //5-байт CDC1_Abstract_Control_Management_Descriptor[] //4-байт CDC1_Union_Interface_Functional_Descriptor[] //5-байт CDC1_HS_Interrupt_In2_Descriptor[] //7-байт CDC1_HS_Default_Interface_DATA_Descriptor[] //9-байт CDC1_HS_Bulk_Out4_Descriptor[] //7-байт CDC1_HS_Bulk_In4_Descriptor[] //7-байт CDC2_HS_Default_Interface_COM_Descriptor[], //9-байт CDC2_Heder_Functional_Descriptor[] //5-байт CDC2_Call_Management_Descriptor[] //5-байт CDC2_Abstract_Control_Management_Descriptor[] //4-байт CDC2_Union_Interface_Functional_Descriptor[] //5-байт CDC2_HS_Interrupt_In2_Descriptor[] //7-байт CDC2_HS_Default_Interface_DATA_Descriptor[] //9-байт CDC2_HS_Bulk_Out4_Descriptor[] //7-байт CDC2_HS_Bulk_In4_Descriptor[] //7-байт Теперь используется 4-е интерфейса. Появляется устройство только драйвер на него поставить не удается. В каком порядке нужно передавать дескрипторы для 2-х COM - портов? Сколько интерфейсов при этом используется? Нужно ли использовать IAD?
  4. Посмотрел этот pdf. Однозначно могу сказать что декодер урезанный и заточен строго под определенные задачи(зато бесплатный - стоимость кодека включена в стоимость чипа). Естественно это сделано чтобы покупали сразу и кодер. Что то свое в кодек вставить нельзя это точно. Так что для выполнения ряда специфических задач этот чип не подходит. Но зато где вы найдете такие вещи и за такие деньги :rolleyes:
  5. Нет ноль не пропущен. Использую следующую структуру: typedef struct ConfigurationDescriptor // standard configuration descriptor //9-bytes { uint8_t bLength; uint8_t bDescriptorType; uint16_t wTotalLength; uint8_t bNumInterfaces; uint8_t bConfigurationValue; uint8_t iConfiguration; uint8_t bmAttributes; uint8_t MaxPower; } ConfigurationDescriptor; А может ли CDC-устройство поддерживать USB2.0 ? Просто все примеры реализации CDC-устройств которые я встречал используют USB1.1. Использую ОС Windows XP SP2. Хочу использовать стандартный драйвер usbser.sys. Но как я понимаю прежде чем система поставит драйвер на устройство, оно должно успешно пройти процесс нумерации. Однако до установки конфигурации дело пока не доходит.
  6. Сам TMS320DM355(365) не занимался (работал с DM6446). Но люди кто работал с ними говорят что никаких лицензионных отчислений на библиотеки и кодеки для этих процов не производятся. И по моему с CCS они не идут. Надо региться на TI и затем скачивать с их сайта. Это что касается сопроцессоров. А на счет различных драйверов (переферия и EDMA), то есть так называемые PSP drivers and EDMA LLD driver, они бесплатные и рабочие.
  7. Всем привет! Пытаюсь сделать CDC-устройство на базе контроллера ISP1583. Использую следующие дескрипторы: DeviceDescriptor CDC1_HS_Device_Descriptor[] = { 18, 0x01, USB_VERSION_20, 0x02, 0x00, 0x00, 0x40, 0xABCD, 0xABCD, USB_RELEASE_NUMBER, 0, 0, 0, 0x01 }; ConfigurationDescriptor CDC1_Standard_Config_Descriptor[] = { 9, 0x02, 0x43, 0x02, 0x01, 0x00, 0x40, 250 }; InterfaceDescriptor CDC1_HS_Default_Interface_COM_Descriptor[] = //communication interface { 9, 0x04, 0x00, 0x00, 0x01, 0x02, 0x02, 0x01, 0x00 }; InterfaceDescriptor CDC1_HS_Default_Interface_DATA_Descriptor[] = //data interface { 9, 0x04, 0x01, 0x00, 0x02, 0x0A, 0x00, 0x00, 0x00 }; CDCFunctionalDescriptor CDC1_Heder_Functional_Descriptor[] = //heder functional descriptor { 0x05, 0x24, 0x00, 0x00, 0x02 }; CDCFunctionalDescriptor CDC1_Call_Management_Descriptor[] = //call management descriptor { 0x05, 0x24, 0x01, 0x03, 0x01 }; CDCFunctionalDescriptor CDC1_Abstract_Control_Management_Descriptor[] = //abstract control management descriptor { 0x04, 0х24, 0x02, 0x06, }; CDCFunctionalDescriptor CDC1_Union_Interface_Functional_Descriptor[] = //union interface functional descriptor { 0x05, 0х24, 0x06, 0x00, 0x01 }; EndpointDescriptor CDC1_HS_Interrupt_In2_Descriptor[] = { 7, USB_ENDPOINT_DESCRIPTOR_TYPE, 0x82, 0x03, 0x0020, 0x02 }; EndpointDescriptor CDC1_HS_Bulk_Out4_Descriptor[] = { 7, USB_ENDPOINT_DESCRIPTOR_TYPE, 0x04, 0x02, 0x0020, 0x00 }; EndpointDescriptor CDC1_HS_Bulk_In4_Descriptor[] = { 7, USB_ENDPOINT_DESCRIPTOR_TYPE, 0x84, 0x02, 0x0020, 0x00 }; Конфигурацию отправляю в следующем порядке: CDC1_Standard_Config_Descriptor[], //9-байт CDC1_HS_Default_Interface_COM_Descriptor[], //9-байт CDC1_Heder_Functional_Descriptor[] //5-байт CDC1_Call_Management_Descriptor[] //5-байт CDC1_Abstract_Control_Management_Descriptor[] //4-байт CDC1_Union_Interface_Functional_Descriptor[] //5-байт CDC1_HS_Interrupt_In2_Descriptor[] //7-байт CDC1_HS_Default_Interface_DATA_Descriptor[] //9-байт CDC1_HS_Bulk_Out4_Descriptor[] //7-байт CDC1_HS_Bulk_In4_Descriptor[] //7-байт После того как отправляю дескриптор конфигурации со всеми вложенными интерфейсами, хост ничего больше не шлет. Что нужно сделать чтобы до конца пройти процесс нумерации?
  8. Почему практически все? Во внешней памяти располагается то что вызывается редко. А все что часто и требует большого количества операций должно находится во внутренней памяти процессора (и желательно максимально оптимизировано - максимальное быстродействие и минимальный размер кода). Большие объемы данных из внешней памяти желательно забирать с помощью DMA, чтобы процессор делал в это время что-то другое полезное.
  9. Все нашел ошибку! Нужно было установить бит USB_ISP1583_regs->Control_Function.BITS.DSEN = 1; для приема данных. Надо лучше читать документацию :) Всем спасибо можно считать тему закрытой.
  10. Пробую передать данные на 0-ю конечную точку с помощью Driver Wizard. Эффект тот же. Принимаю setup: bmRequestType = 0x40 bRequest = 0x0C wValue = 0x0000 wIndex = 0x0000 wLength = 0x0004. После этого пытаюсь забрать данные с EP0OUT. Однако длина принятых данных = 0, никакого прерывания я тоже не ловлю. Как вообще забрать данные с контрольной нулевой точки. Пробовал делать инициализацию Ep0Out, ни к чему не привело.
  11. Я согласен что компилятор может достигнуть высоких результатов. Однако это возможно только на простейших функциях. Кстати размер кода является очень даже критичным критерием в сложных системах (например в различных видеокодеках). Есть очень много различных функций и как правило все они не влезают во внутреннюю память процессора (а так нужен реалтайм). Я столкнулся с этим на TMS320DM6446 (L2 - 80k). Так что грамотное написание отдельных частей существенно облегчает жизнь. Кстати компилятор значительно проигрывает на функциях, которые являются несимметричными, однопроходовыми и требующими разнотипных вычислений (допустим арифметический кодер/декодер).
  12. На стороне хоста использую функцию UsbBuiltVendorRequest(&urb, URB_FUNCTION_VENDOR_DEVICE, sizeof(struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST), 0, 0, 0x0C, 0, 0, &buf, NULL, 4, NULL) для посылки устройству 4-х байтового значения. Устройство получает пакет SETUP в 8-байтный буфер (set-up token). Никаких прерываний по EP0RX не получаю. Где должны находится отправленные данные? Как корректно обрабатывать SETUP запросы, содержащие данные (в направлении OUT).
  13. Т.е. получилось 13 тактов на блок 8х8, так же как и у меня. Хотя прерывания отключены (а основной цикл 13 тактов). Размер кода конечно можно сократить в несколько раз. А так очень даже неплохо. Однако не стоит забывать что эта функция очень простая. p.s. У меня входные массивы могу иметь одинаковые указатели. Попробуйте с помощью компилятора оптимизировать более сложные функции (например DCT, IDCT). И вы поймете что эта задача ему не по зубам.
  14. Давайте попробуем! Вот довольно таки простая функция: * ========================================================================= * * C CODE * * The following is a C code description of the algorithm that lacks * * restrictions. The assembly code may have additional restrictions * * as noted below. * * * * void copy_16to8_stride * * ( * * short *src, /*16-bit continues data*/ * * unsigned int *copy_adress, /*adress of 8-bit data*/ * * unsigned short *copy_stride, /*the address of length of a line*/* * unsigned int num_block /*namber blocks of 8x8*/ * * * * ); * * void copy_16to8_stride * * ( * * short *src, * * unsigned int *copy_adress, * * unsigned short *copy_stride, * * unsigned int num_block * * * * ) * * { * * unsigned int i, j, b; * * unsigned short stride; * * unsigned char *dst_adr; * * for (b = 0; b < num_block; b++) * * { * * stride = copy_stride; * * dst_adr = (unsigned char *)(copy_adress); * * for (j = 0; j < 8; j++) * * { * * for (i = 0; i < 8; i++) * * { * * dst_adr[j * stride + i] = (unsigned char)src[j * 8 + i]; * * } * * } * * src += 64; * * } * * } * * ASSUMPTIONS * * src, dst_adr are double-word aligned. * * num_block is more or equal zero * * * * MEMORY NOTE * * This function is checked up only for little endian memory * * * * NOTES * * This kernel blocks interrupts for * * 28+13*(num_block-1) cycles, if num_block >= 1 * * * * CYCLES * * 28+13*(num_block-1) cycles, if num_block >= 1 * * 7 cycles, if num_block=0 * * * * CODESIZE * * 224 bytes * * ========================================================================= * Попробуйте сделать быстрее. Ядро с64хх. Прерывания заблокированы, однако это для того чтобы размер кода был маленький.
  15. Отправил письмо с примерами для dsk6416 на другой ящик, надеюсь дойдет.
×
×
  • Создать...