ArkZel
Участник*-
Постов
29 -
Зарегистрирован
-
Посещение
Репутация
0 ОбычныйИнформация о ArkZel
-
Звание
Участник
- День рождения 16.02.1982
Информация
-
Город
Array
-
Всем привет! Помогите кто работал с АЦП pcm4222!!! Можно ли корректно производить смену частоты дискретизации у pcm4222 во время его работы ни применяя RESET? Если можно, то как это сделать?
-
Поискал немного в инете и нашел очень полезную ссылку: http://www.microchip.com/forums/tm.aspx?m=...p;\#223235 Сделал все как там говорится. И все заработало. Сделал даже 3 устройства в одном (Audio + 2 COM). Ставлю на них дрова и все работает. Только для CDC устройств использую не usbser.sys, а другой.
-
Всем привет! Пытаюсь реализовать 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?
-
Посмотрел этот pdf. Однозначно могу сказать что декодер урезанный и заточен строго под определенные задачи(зато бесплатный - стоимость кодека включена в стоимость чипа). Естественно это сделано чтобы покупали сразу и кодер. Что то свое в кодек вставить нельзя это точно. Так что для выполнения ряда специфических задач этот чип не подходит. Но зато где вы найдете такие вещи и за такие деньги :rolleyes:
-
Нет ноль не пропущен. Использую следующую структуру: 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. Но как я понимаю прежде чем система поставит драйвер на устройство, оно должно успешно пройти процесс нумерации. Однако до установки конфигурации дело пока не доходит.
-
Сам TMS320DM355(365) не занимался (работал с DM6446). Но люди кто работал с ними говорят что никаких лицензионных отчислений на библиотеки и кодеки для этих процов не производятся. И по моему с CCS они не идут. Надо региться на TI и затем скачивать с их сайта. Это что касается сопроцессоров. А на счет различных драйверов (переферия и EDMA), то есть так называемые PSP drivers and EDMA LLD driver, они бесплатные и рабочие.
-
CDC - устройство не проходит нумерацию
ArkZel опубликовал тема в RS232/LPT/USB/PCMCIA/FireWire
Всем привет! Пытаюсь сделать 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-байт После того как отправляю дескриптор конфигурации со всеми вложенными интерфейсами, хост ничего больше не шлет. Что нужно сделать чтобы до конца пройти процесс нумерации? -
TMS320'C6xxx
ArkZel ответил RCray тема в Сигнальные процессоры и их программирование - DSP
Почему практически все? Во внешней памяти располагается то что вызывается редко. А все что часто и требует большого количества операций должно находится во внутренней памяти процессора (и желательно максимально оптимизировано - максимальное быстродействие и минимальный размер кода). Большие объемы данных из внешней памяти желательно забирать с помощью DMA, чтобы процессор делал в это время что-то другое полезное. -
Все нашел ошибку! Нужно было установить бит USB_ISP1583_regs->Control_Function.BITS.DSEN = 1; для приема данных. Надо лучше читать документацию :) Всем спасибо можно считать тему закрытой.
-
Пробую передать данные на 0-ю конечную точку с помощью Driver Wizard. Эффект тот же. Принимаю setup: bmRequestType = 0x40 bRequest = 0x0C wValue = 0x0000 wIndex = 0x0000 wLength = 0x0004. После этого пытаюсь забрать данные с EP0OUT. Однако длина принятых данных = 0, никакого прерывания я тоже не ловлю. Как вообще забрать данные с контрольной нулевой точки. Пробовал делать инициализацию Ep0Out, ни к чему не привело.
-
TMS320'C6xxx
ArkZel ответил RCray тема в Сигнальные процессоры и их программирование - DSP
Я согласен что компилятор может достигнуть высоких результатов. Однако это возможно только на простейших функциях. Кстати размер кода является очень даже критичным критерием в сложных системах (например в различных видеокодеках). Есть очень много различных функций и как правило все они не влезают во внутреннюю память процессора (а так нужен реалтайм). Я столкнулся с этим на TMS320DM6446 (L2 - 80k). Так что грамотное написание отдельных частей существенно облегчает жизнь. Кстати компилятор значительно проигрывает на функциях, которые являются несимметричными, однопроходовыми и требующими разнотипных вычислений (допустим арифметический кодер/декодер). -
На стороне хоста использую функцию 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).
-
TMS320'C6xxx
ArkZel ответил RCray тема в Сигнальные процессоры и их программирование - DSP
Т.е. получилось 13 тактов на блок 8х8, так же как и у меня. Хотя прерывания отключены (а основной цикл 13 тактов). Размер кода конечно можно сократить в несколько раз. А так очень даже неплохо. Однако не стоит забывать что эта функция очень простая. p.s. У меня входные массивы могу иметь одинаковые указатели. Попробуйте с помощью компилятора оптимизировать более сложные функции (например DCT, IDCT). И вы поймете что эта задача ему не по зубам. -
TMS320'C6xxx
ArkZel ответил RCray тема в Сигнальные процессоры и их программирование - DSP
Давайте попробуем! Вот довольно таки простая функция: * ========================================================================= * * 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хх. Прерывания заблокированы, однако это для того чтобы размер кода был маленький. -
DSP/BIOS EDMA
ArkZel ответил qxov тема в Сигнальные процессоры и их программирование - DSP
Отправил письмо с примерами для dsk6416 на другой ящик, надеюсь дойдет.