Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: USB
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > RS232/LPT/USB/PCMCIA/FireWire
Страницы: 1, 2, 3, 4, 5, 6
Konst_777
Цитата(toweroff @ Nov 14 2010, 00:59) *
...Сигналы /WR, /RD, A, D смотрелись осциллом с полосой 200МГц, нет никаких пертрубаций, иголок точно не увидел

а PKTEND ?
toweroff
Цитата(Konst_777 @ Nov 15 2010, 20:35) *
а PKTEND ?

сигнал тоже в порядке. Но, т.к. я пользую AUTO FIFO IN, указываю размер пакета в виде 0x200 и такой же передаю, он, по идее, должен отправляться самостоятельно? Или я неправ?
toweroff
Подскажите, где найти DC описание параметров фронтов сигналов интерфейса для FX2? Что-то на сайте по всяким запросам типа "rise time" не нашел...
А то уже совсем ничего не понимаю, все делаю как в TRM, перелопатил много буржуйских форумов, пробовал их рекомендации и примеры, но проблема не решается sad.gif
toweroff
Сейчас обнаружил одну вещь - меняю последовательность описания точек в dscr.a51 - все, софт перестает работать даже на отправку в точку OUT
Возможно, тут и порылась проблема... правда, какая - непонятно smile.gif хорошо бы, чтобы временно непонятно smile.gif

все, это клин... девайс был отключен... перекур
Konst_777
Цитата(toweroff @ Nov 16 2010, 00:51) *
сигнал тоже в порядке. Но, т.к. я пользую AUTO FIFO IN, указываю размер пакета в виде 0x200 и такой же передаю, он, по идее, должен отправляться самостоятельно? Или я неправ?

Да, в этом случае PKTEND можно не использовать. Важно, чтобы этот сигнал не висел в воздухе и не был в активном состоянии (может быть и "0" и "1" в зависимости от установок регистра FIFOPINPOLAR).


Цитата(toweroff @ Nov 16 2010, 16:25) *
Подскажите, где найти DC описание параметров фронтов сигналов интерфейса для FX2?...

Datasheet для FX2LP. Datasheet для FX2 не смог найти на сайте Cypress. Полагаю, что временные диаграммы одинаковы для FX2 и FX2LP. Но проверять лень. Поэтому выкладываю datasheet для FX2:
toweroff
Цитата(Konst_777 @ Nov 16 2010, 21:40) *
Да, в этом случае PKTEND можно не использовать. Важно, чтобы этот сигнал не висел в воздухе и не был в активном состоянии (может быть и "0" и "1" в зависимости от установок регистра FIFOPINPOLAR).

не висит, контроллер туда сразу 1 выдает и FIFOPINPOLAR весь себе в нулях (см.ниже). Это дело самым первым проверил

Цитата(Konst_777 @ Nov 16 2010, 21:40) *
Datasheet для FX2LP. Datasheet для FX2 не смог найти на сайте Cypress. Полагаю, что временные диаграммы одинаковы для FX2 и FX2LP. Но проверять лень. Поэтому выкладываю datasheet для FX2:

извиняюсь, неточно написал. Действительно, FX2LP. Но, к сожалению, суть дела не меняет... даташит, конечно, уже изучался ранее. Есть все-таки надежда, что сам железячный интерфейс работает корректно, потому как ранее на том же месте SX2 нормально съедала дескриптор и компом распознавалась

Чую, что грабли уже близко... но никак не доберусь..

TD_Init() весь написал заново на всякий случай, прямо по шагам от TRM:
Код
void TD_Init(void)             // Called once at startup
{
/*  OLD
*/
   BREAKPT &= ~bmBPEN;      // to see BKPT LED go out TGE
   Rwuen = TRUE;            // Enable remote-wakeup


/*
   my code
*/

    CPUCS = 0x10;  // 48 MHz

  SYNCDELAY;
  PINFLAGSAB = 0xF0;            // FLAGA - indexed, FLAGB - EP8FF
  SYNCDELAY;
  PINFLAGSCD = 0x08;            // FLAGC - EP2EF, FLAGD - indexed
  SYNCDELAY;

  FIFOPINPOLAR = 0x00;

  SYNCDELAY;                    //
  PORTACFG = 0x40;  // FLAGD is /CHIPSELECT


////////////  STEP 1 TRM

  SYNCDELAY;                    //
  IFCONFIG = 0xC8; // for async

////////////  STEP 2 TRM

  SYNCDELAY;                    //
  IFCONFIG |= 0x03; // enable slave FIFO

////////////  STEP 3 TRM

  SYNCDELAY;                    //
  REVCTL=0x03;

////////////  STEP 4 TRM

  // EP2 512 BULK OUT 2x
  SYNCDELAY;                    // see TRM section 15.14
  EP2CFG = 0xA2;                // BUF[1:0]=10 for 2x buffering
  
  // EP6 512 BULK IN 2x
  SYNCDELAY;                    //
  EP8CFG = 0xE2;                // BUF[1:0]=10 for 2x buffering
  
  // EP4 and EP6 are not used in this implementation...
  SYNCDELAY;                    //
  EP4CFG = 0x20;                // clear valid bit
  SYNCDELAY;                    //
  EP6CFG = 0x60;                // clear valid bit


////////////  STEP 5 TRM

  SYNCDELAY;
  FIFORESET = 0x80;             // activate NAK-ALL to avoid race conditions
  SYNCDELAY;                    // see TRM section 15.14
  FIFORESET = 0x02;             // reset, FIFO 2
  SYNCDELAY;                    // see TRM section 15.14
  FIFORESET = 0x04;             // reset, FIFO 4
  SYNCDELAY;                    // see TRM section 15.14
  FIFORESET = 0x06;             // reset, FIFO 6
  SYNCDELAY;                    //
  FIFORESET = 0x08;             // reset, FIFO 8


  SYNCDELAY;                    //
  OUTPKTEND = 0x82;
  SYNCDELAY;                    //
  OUTPKTEND = 0x82;

  SYNCDELAY;                    //
  EP2FIFOCFG = 0x15;            // AUTOOUT=1, WORDWIDE=1
  
  SYNCDELAY;                    //
  EP8FIFOCFG = 0x0D;            // AUTOIN=1, WORDWIDE=1

  SYNCDELAY;
  EP8AUTOINLENH = 0x02;
  SYNCDELAY;
  EP8AUTOINLENL = 0x00;

  SYNCDELAY;                    // see TRM section 15.14
  FIFORESET = 0x00;             // deactivate NAK-ALL

}


Посадил девайс на супрессовский драйвер. То же самое - отправляется 512 байт, возвращается 2, т.е. дело точно не в драйвере sad.gif
(сам девайс тупо получает пакет 512 байт, модифицирует первые 4 байта и отсылает пакет назад)
toweroff
Товарищи, если не сложно, приведите пример своего дескриптора, может все-таки я где напортачил...
alexkok
Цитата(toweroff @ Nov 22 2010, 13:23) *
Товарищи, если не сложно, приведите пример своего дескриптора, может все-таки я где напортачил...

Я выкладывал здесь
ave!
USB HID в CY7C63813-SXC может работать со всеми выключенными таймерами?

Хочу сделать HID клавиатуру на CY7C63813. Но у меня проблема.
Если при нажатой кнопке зациклить "USB_LoadEP(1,(UINT8*)&report_packet,8);", то постоянно быстро печатается буква. А если после нажатия только один раз вызвать эту функцию, то ничего не печатается.

Как обнаружить запрос компа и в нужный момент ответить на него посылкой данных?

Расскажите кто-нибудь про функции:

USB_bCheckActivity
USB_bGetConfiguration
USB_bGetEPState
USB_EnableOutEP

Может, кто подскажет, в чем проблема. Уже несколько дней с ней парюсь. (
ave!
while (!usbInterruptIsReady()); // ждем прихода прерывания
usbSetInterrupt (reportBuffer, 8); // посылаем в ответ пакет

Это из проекта на AVRе. Подскажите, как первую команду для CY7C63813 организовать.

----------------------------------------------------
(дополнено)

Может, кому пригодится. Решил так:

if (USB_bGetConfiguration()) // Only send report if USB device is configured
{
USB_LoadEP(1,(UINT8*)&report_packet,8); // Send to PC report_packet
while(!USB_bGetEPState(1)); // Waits for ACK from PC
}

Главное работает нормально.
toweroff
Подниму еще раз тему. Итак, имеется: Slave FIFO, асинхронный интерфейс, шина данных 16 бит, /RD соединен с /OE и идет на /OE контроллера, /WR с /WR
Контрольные точки - 0x02 IN, 0x06 OUT, bulk, 512, четверная буферизация. Анализируются флаги FLAGB, FLAGC, которые настроены как FLAGB: EP2FF, FLAGC: EP6EF

После передачи с хоста данных, FLAGC падает (очередь не пустая). Начинается чтение... но FLAGC более не поднимается. Осциллограммы все в порядке, выборка кристалла, чтение, адрес FIFO - всы выставляется корректно. Длительность /CS - 100ns, /RD - 80ns

Не понимаю, куда копать. FLAGD настроен как SLCS

Вот моя инициализация:
Код
void TD_Init(void)             // Called once at startup
{

    PORTACFG = 0x40;

    REVCTL = 0x03; // REVCTL.0 and REVCTL.1 set to 1
    SYNCDELAY;
  
      CPUCS = 0x10; // CLKSPD[1:0]=10, for 48MHz operation
    IFCONFIG = 0xCB; // Configures FX2LP in Slave FIFO mode
    SYNCDELAY;
    EP2CFG = 0xE0; // EP2IN, bulk, size 512, 4x buffered
    SYNCDELAY;
    EP6CFG = 0xA0; // EP6OUT, bulk, size 512, 4x buffered
    SYNCDELAY;

    FIFORESET = 0x80; // set NAKALL bit to NAK all transfers from host
    SYNCDELAY;
    FIFORESET = 0x02; // reset EP2 FIFO
    SYNCDELAY;
    FIFORESET = 0x06; // reset EP6 FIFO
    SYNCDELAY;
    FIFORESET = 0x00; // clear NAKALL bit to resume normal operation
    SYNCDELAY;

    OUTPKTEND = 0x86; // Arm quattro EP6 buffers to ”prime the pump”
    SYNCDELAY;
    OUTPKTEND = 0x86; // Arm quattro EP6 buffers to ”prime the pump”
    SYNCDELAY;
    OUTPKTEND = 0x86; // Arm quattro EP6 buffers to ”prime the pump”
    SYNCDELAY;
    OUTPKTEND = 0x86; // Arm quattro EP6 buffers to ”prime the pump”
    SYNCDELAY;


    EP6FIFOCFG = 0x00; // AUTOOUT=0
    SYNCDELAY;
    EP6FIFOCFG = 0x11; // AUTOOUT=1
    SYNCDELAY;
    EP2FIFOCFG = 0x09; // AUTOIN=1
    SYNCDELAY;
    PINFLAGSAB = 0xC0; // FLAGA - indexed, FLAGB - EP2FF
    SYNCDELAY;
    PINFLAGSCD = 0x0A; // FLAGC - EP6EF, FLAGD - indexed
    SYNCDELAY;

    EP6AUTOINLENH = 0x02;
    SYNCDELAY;
    EP6AUTOINLENL = 0x00;
    SYNCDELAY;

}
toweroff
Проблема решена, код рабочий. Перепутал местами на плате A0 и A1
Bonifacyi
Добрый день! есть несколько вопросов по устаревшему CY7C68001.
1. Есть ли возможность сбросить fifo out (та, с которой данные забираются на комп) без сброса всей микросхемы?
2. Есть ли возможность сбросить ту же фифошку с помощью компа? Может какая команда есть?
3. Правильно ли я понимаю, что регистр flush принудительно отправляет данные на комп?
4. Не могли немножко по подробнее рассказать про буферизацию, какую использовать?

Спасибо!
toweroff
Не работает пин PKTEND
AUTOIN срабатывает четко. Как только пакет короткий, дергаю пином PKTEND в ноль - и ничего. Сигнал точно доходит, длительность в порядке
Полярность тоже настроена на низкий уровень.
Что я мог упустить?

Разобрался
Теперь нужно понять, как со стандартным интерфейсом микроконтроллера (A, D, /WR, /RD, /CS) сделать так, чтобы PKTEND работал в активном состоянии /CS

PS
Достаточно установить PKTEND и один раз ПРОЧИТАТЬ из точки IN
spindelsinn
подскажите где и у кого можно купить отладочные платы cypress для high speed периферии?
toweroff
Цитата(spindelsinn @ Jul 13 2011, 12:41) *
подскажите где и у кого можно купить отладочные платы cypress для high speed периферии?

в терре есть такое чудо: http://www.terraelectronica.ru/pdf/DIGILENT/DL-USB2.pdf


2 All
Подскажите, пожалуйста, такой момент. Файл IIC, появляющийся после компиляции в кейле, содержит байт-в-байт содержимое EEPROM? Что-то у меня длина, PID/VID не сходятся с документацией. Больше длина интересует, т.к. судя по этому файлу, длина 0х0003, а реальная - 2 с гаком килобайта
Konst_777
Цитата(toweroff @ Jul 18 2011, 14:04) *
Подскажите, пожалуйста, такой момент. Файл IIC, появляющийся после компиляции в кейле, содержит байт-в-байт содержимое EEPROM?...

Да

Цитата(toweroff @ Jul 18 2011, 14:04) *
...Что-то у меня ... длина 0х0003, а реальная - 2 с гаком килобайта

Это всего один из множества блоков данных. Первые блоки данных содержат код обработки прерываний.

Цитата(toweroff @ Jul 18 2011, 14:04) *
...Что-то у меня ... PID/VID не сходятся с документацией.

d:\cypress\usb\bin\hex2bix -i -m 16384 -f 0xC2 -v 0x04B4 -p 0x0081 -c 0x41 -o FX2LP.iic FX2LP.hex

Проверьте Вашу командную строку для получения файла *.iic. Точнее, проверьте значения параметра -v (VID) и параметра -p (PID). Если Вы не используете эти параметры, то в файл *.iic будут записаны значения по умолчанию: VID=0x0547, PID=0x2131.
toweroff
Konst_777, спасибо, посмотрю. Я так понял, что эти первые 3 байта - прыжок на загрузчик, который потом и загрузит содержимое EEPROM?
Konst_777
Цитата(toweroff @ Jul 19 2011, 20:31) *
...Я так понял, что эти первые 3 байта - прыжок на загрузчик, который потом и загрузит содержимое EEPROM?

Нет, просто сам код всегда сегментирован. Яркий пример - таблица прерываний:
Код
             CSEG AT 0h       ; Reset location
             LJMP Start         ; jump to start Program

             CSEG AT 3h       ; External Interrupt 0 (/INT0)
             RETI
                    
             CSEG AT 0Bh       ; Timer 0 Overflow
             LJMP Timer0_ISR
                    
             CSEG AT 13h       ; External Interrupt 1 (/INT1)
             RETI
                    
            CSEG AT 1Bh       ; Timer 1 Overflow
            RETI
и т.д.

То есть, между участками кода есть зазоры. Файл *.iic отображает содержимое *.hex файла. Если преобразовать *.hex файл таким образом, чтобы он содержал весь код, начиная с нулевого адреса и заканчивая максимальным адресом памяти программ, то и *.iic файл вместо десятков сегментов будет содержать один.
toweroff
Цитата(Konst_777 @ Jul 19 2011, 21:57) *
То есть, между участками кода есть зазоры. Файл *.iic отображает содержимое *.hex файла. Если преобразовать *.hex файл таким образом, чтобы он содержал весь код, начиная с нулевого адреса и заканчивая максимальным адресом памяти программ, то и *.iic файл вместо десятков сегментов будет содержать один.

то-то я смотрю, что простой bin2hex раздувает на бОльший размер
спасибо!
IVTIVT
Добрый все день! Имеется usb-устройство с cайпрессовским СY7C68013 . Поначалу работа с ним велась в Windows через драйвер cyusb.sys - всё работало, данные посредством FIFO передавались верные (устройство принимает данные и передает по usb в pc ). Затем встал вопрос об аналогичной работе в Линуксе. Была использована библиотека libusb.

Что происходит в данный момент : если после включения устройства ,подключенного к компьютеру с Виндоус - перезагрузить компьютер и войти в Линукс - всё работает, данные принимаются в Линуксе правильные. Но стоит только сбросить питание устройства (вне зависимости от того, подключено ли оно шнуром к компьютеру) - как при включении питания обратно - данные принимаются абсолютно левые. Под данными я подразумеваю набор байт. То есть возникло подозрение, что драйвер cyusb.sys вносит какие-то инициализационные изменения , так как если включить Виндоус - все работает - перейти в Линукс - все работает - выключить КОМПЬЮТЕР - включить компьютер - все по-прежнему работает. Перестает работать только в том случае, если сбросить питание УСТРОЙСТВА (если сбросить и включить обратно питание устройства, находясь при этом в Виндоус - всё работает).

Исходя из этого у меня вопрос - передает ли драйвер cyusb.sys какие-либо параметры в устройство ? (подчеркну еще раз, что сама передача данных идет исправно, просто сами байты становятся "левыми" - причем всегда одинаковыми, вне зависимости от тех данных, которые устройство должно передать). Такое впечатление, что где-то в какой-то регистр fx2 при сбросе питания вводится значение по умолчанию, при к-ом сами данные могут портиться. Какой (и так ли это) - выяснить не удалось.

TRM читал. Надеюсь на помощь
toweroff
Что-то не пойму я поведения 68013A

Подключено к арму через асинхронный интерфейс, /mpOE подключен одновременно к /SLOE и /SLRD

FIFO и точки настроены как EP2 - IN, EP6 - OUT

Когда данные гоняются малыми объемами (<512 байт), все в порядке

Когда передается большой кусок, проц вычитывает иногда лишние 2 байта (шина данных 16бит). Вычитывание лишних байтов - четко по границе 512-байтового блока

Осциллограф четко показывает, что флаг EP6EF падает еще до того, как закончится /mpCS и /mpOE. Длительность /mpCS и /mpOE как только не менял, вплоть до около 150нс - ноль эмоций. Флаг, как и описано в даташите, падает не позднее 70нс от начала /mpOE

Вот код чтения точки:

Код
void FX2_USB_ReadFIFO(U16* buf, U32 len)
{
    while(len)
    {
        while(!is_FLAGC);
        *buf++ = FX2_FIFO6;
        len -= 2;    
    }
}


сигналы все нормальные, звона нет.

Я уже не знаю, в какую сторону думать...
MSL
Цитата(IVTIVT @ Jul 19 2012, 15:13) *
сигналы все нормальные, звона нет.
Я уже не знаю, в какую сторону думать...


Что-то мне это напоминает... http://electronix.ru/forum/index.php?showtopic=66313&hl=
maxis
Чтоб не плодить темы задам вопрос тут:
Изучаю cy7c68013a, задача принять аудио данные. Дискриптор написал, устройство определяется нормально, но данные на устройство не уходят.
Вроде всё делаю по примерам, но никак не заставить устройство принимать пакеты. В чём может быть дело?
CODE
#pragma NOIV // Do not generate interrupt vectors

#include "fx2.h"
#include "fx2regs.h"
#include "fx2sdly.h" // SYNCDELAY macro

extern BOOL GotSUD; // Received setup data flag
extern BOOL Sleep;
extern BOOL Rwuen;
extern BOOL Selfpwr;

BYTE Configuration; // Current configuration
BYTE AlternateSetting; // Alternate settings

void EZUSB_INITI2C();

//#define bmEP2IRQ 0x10


//-----------------------------------------------------------------------------
// Task Dispatcher hooks
// The following hooks are called by the task dispatcher.
//-----------------------------------------------------------------------------

void TD_Init(void) // Called once at startup
{

// set the CPU clock to 48MHz
CPUCS = ((CPUCS & ~bmCLKSPD) | bmCLKSPD1);
SYNCDELAY;

// set the slave FIFO interface to 48MHz
IFCONFIG |= 0x40;
SYNCDELAY;


// b7: Valid
// b6: DIR (0=OUT, 1=IN)
// b[5:4] Type (01=ISO, 10=BULK, 11=INT)
// b3: Size (0=512, 1=1024 bytes)
// b2: 0
// b[1:0] Buffering (00=quad, 10=double, 11=triple)
// Only using endpoint 4, zero the valid bit on all others
EP1OUTCFG = EP1INCFG = EP2CFG = EP4CFG = EP6CFG = EP8CFG = 0x00;
SYNCDELAY;
EP4CFG = 0x98; // EP4 is DIR=OUT, TYPE=ISOC, SIZE=1024, BUF=4x
SYNCDELAY;

// OUT endpoints do NOT come up armed
EP4BCL = 0x80; // arm first buffer by writing BC w/skip=1
SYNCDELAY;
EP4BCL = 0x80; // arm second buffer by writing BC w/skip=1

// enable dual autopointer feature
//AUTOPTRSETUP |= 0x01;

USBIE |= bmSOF; // Enable the SOF IRQ to serve as LED timers
//EPIE = bmEP2IRQ; // Enable EP6 and EP2 Interrupts to turn on transfer LEDS
//EPIE = bmEP4IRQ; // Enable EP6 and EP4 Interrupts to turn on transfer LEDS

OEA = 0xFF;
IOA = 0xFF;
}

void TD_Poll(void) // Called repeatedly while the device is idle
{
IOA = 0x00;
// check EP4 EMPTY(busy) bit in EP2468STAT (SFR), core set's this bit when FIFO is empty
if(!(EP2468STAT & bmEP4EMPTY))
{
EP4BCL = 0x80; // re(arm) EP4OUT
}
IOA = 0xFF;
}

BOOL TD_Suspend(void) // Called before the device goes into suspend mode
{
return(TRUE);
}

BOOL TD_Resume(void) // Called after the device resumes
{
return(TRUE);
}

//-----------------------------------------------------------------------------
// Device Request hooks
// The following hooks are called by the end point 0 device request parser.
//-----------------------------------------------------------------------------

BOOL DR_GetDescriptor(void)
{
return(TRUE);
}

BOOL DR_SetConfiguration(void) // Called when a Set Configuration command is received
{
Configuration = SETUPDAT[2];
return(TRUE); // Handled by user code
}

BOOL DR_GetConfiguration(void) // Called when a Get Configuration command is received
{
EP0BUF[0] = Configuration;
EP0BCH = 0;
EP0BCL = 1;
return(TRUE); // Handled by user code
}

BOOL DR_SetInterface(void) // Called when a Set Interface command is received
{
AlternateSetting = SETUPDAT[2];
return(TRUE); // Handled by user code
}

BOOL DR_GetInterface(void) // Called when a Set Interface command is received
{
EP0BUF[0] = AlternateSetting;
EP0BCH = 0;
EP0BCL = 1;
return(TRUE); // Handled by user code
}

BOOL DR_GetStatus(void)
{
return(TRUE);
}

BOOL DR_ClearFeature(void)
{
return(TRUE);
}

BOOL DR_SetFeature(void)
{
return(TRUE);
}

BOOL DR_VendorCmnd(void)
{
return(TRUE);
}

//-----------------------------------------------------------------------------
// USB Interrupt Handlers
// The following functions are called by the USB interrupt jump table.
//-----------------------------------------------------------------------------

// Setup Data Available Interrupt Handler
void ISR_Sudav(void) interrupt 0
{
GotSUD = TRUE; // Set flag
EZUSB_IRQ_CLEAR();
USBIRQ = bmSUDAV; // Clear SUDAV IRQ
}

// Setup Token Interrupt Handler
void ISR_Sutok(void) interrupt 0
{
EZUSB_IRQ_CLEAR();
USBIRQ = bmSUTOK; // Clear SUTOK IRQ
}

void ISR_Sof(void) interrupt 0
{
EZUSB_IRQ_CLEAR();
USBIRQ = bmSOF; // Clear SOF IRQ
}

void ISR_Ures(void) interrupt 0
{
// whenever we get a USB reset, we should revert to full speed mode
pConfigDscr = pFullSpeedConfigDscr;
((CONFIGDSCR xdata *) pConfigDscr)->type = CONFIG_DSCR;
pOtherConfigDscr = pHighSpeedConfigDscr;
((CONFIGDSCR xdata *) pOtherConfigDscr)->type = OTHERSPEED_DSCR;

EZUSB_IRQ_CLEAR();
USBIRQ = bmURES; // Clear URES IRQ
}

void ISR_Susp(void) interrupt 0
{
Sleep = TRUE;
EZUSB_IRQ_CLEAR();
USBIRQ = bmSUSP;
}

void ISR_Highspeed(void) interrupt 0
{
if (EZUSB_HIGHSPEED())
{
pConfigDscr = pHighSpeedConfigDscr;
((CONFIGDSCR xdata *) pConfigDscr)->type = CONFIG_DSCR;
pOtherConfigDscr = pFullSpeedConfigDscr;
((CONFIGDSCR xdata *) pOtherConfigDscr)->type = OTHERSPEED_DSCR;
}

EZUSB_IRQ_CLEAR();
USBIRQ = bmHSGRANT;
}
void ISR_Ep0ack(void) interrupt 0
{
}
void ISR_Stub(void) interrupt 0
{
}
void ISR_Ep0in(void) interrupt 0
{
}
void ISR_Ep0out(void) interrupt 0
{
}
void ISR_Ep1in(void) interrupt 0
{
}
void ISR_Ep1out(void) interrupt 0
{
}
void ISR_Ep2inout(void) interrupt 0
{
//BYTE dum;
//EZUSB_IRQ_CLEAR();
//EPIRQ = bmEP2IRQ; // Clear IRQ

// check EP2 EMPTY(busy) bit in EP2468STAT (SFR), core set's this bit when FIFO is empty
if(!(EP2468STAT & bmEP2EMPTY))
{
EP2BCL = 0x80; // re(arm) EP2OUT
}
}
void ISR_Ep4inout(void) interrupt 0
{
//BYTE dum;
//EZUSB_IRQ_CLEAR();
//EPIRQ = bmEP4IRQ; // Clear IRQ

// check EP4 EMPTY(busy) bit in EP2468STAT (SFR), core set's this bit when FIFO is empty
if(!(EP2468STAT & bmEP4EMPTY))
{
EP4BCL = 0x80; // re(arm) EP4OUT
}
}
void ISR_Ep6inout(void) interrupt 0
{
}
void ISR_Ep8inout(void) interrupt 0
{
}
void ISR_Ibn(void) interrupt 0
{
}
void ISR_Ep0pingnak(void) interrupt 0
{
}
void ISR_Ep1pingnak(void) interrupt 0
{
}
void ISR_Ep2pingnak(void) interrupt 0
{
}
void ISR_Ep4pingnak(void) interrupt 0
{
}
void ISR_Ep6pingnak(void) interrupt 0
{
}
void ISR_Ep8pingnak(void) interrupt 0
{
}
void ISR_Errorlimit(void) interrupt 0
{
}
void ISR_Ep2piderror(void) interrupt 0
{
}
void ISR_Ep4piderror(void) interrupt 0
{
}
void ISR_Ep6piderror(void) interrupt 0
{
}
void ISR_Ep8piderror(void) interrupt 0
{
}
void ISR_Ep2pflag(void) interrupt 0
{
}
void ISR_Ep4pflag(void) interrupt 0
{
}
void ISR_Ep6pflag(void) interrupt 0
{
}
void ISR_Ep8pflag(void) interrupt 0
{
}
void ISR_Ep2eflag(void) interrupt 0
{
}
void ISR_Ep4eflag(void) interrupt 0
{
}
void ISR_Ep6eflag(void) interrupt 0
{
}
void ISR_Ep8eflag(void) interrupt 0
{
}
void ISR_Ep2fflag(void) interrupt 0
{
}
void ISR_Ep4fflag(void) interrupt 0
{
}
void ISR_Ep6fflag(void) interrupt 0
{
}
void ISR_Ep8fflag(void) interrupt 0
{
}
void ISR_GpifComplete(void) interrupt 0
{
}
void ISR_GpifWaveform(void) interrupt 0
{
}

CODE
;;-----------------------------------------------------------------------------
;; File: dscr.a51
;; Contents: This file contains descriptor data tables.
;;
;; $Archive: /USB/Examples/Fx2lp/bulkloop/dscr.a51 $
;; $Date: 9/01/03 8:51p $
;; $Revision: 3 $
;;
;;
;;-----------------------------------------------------------------------------
;; Copyright 2003, Cypress Semiconductor Corporation
;;-----------------------------------------------------------------------------;;-----------------------------------------------------------------------------

DSCR_DEVICE equ 1 ;; Descriptor type: Device
DSCR_CONFIG equ 2 ;; Descriptor type: Configuration
DSCR_STRING equ 3 ;; Descriptor type: String
DSCR_INTRFC equ 4 ;; Descriptor type: Interface
DSCR_ENDPNT equ 5 ;; Descriptor type: Endpoint
DSCR_DEVQUAL equ 6 ;; Descriptor type: Device Qualifier

DSCR_DEVICE_LEN equ 18
DSCR_CONFIG_LEN equ 9
DSCR_INTRFC_LEN equ 9
DSCR_ENDPNT_LEN equ 7
DSCR_DEVQUAL_LEN equ 10

ET_CONTROL equ 0 ;; Endpoint type: Control
ET_ISO equ 1 ;; Endpoint type: Isochronous
ET_BULK equ 2 ;; Endpoint type: Bulk
ET_INT equ 3 ;; Endpoint type: Interrupt

public DeviceDscr, DeviceQualDscr, HighSpeedConfigDscr, FullSpeedConfigDscr, StringDscr, UserDscr

DSCR SEGMENT CODE PAGE

;;-----------------------------------------------------------------------------
;; Global Variables
;;-----------------------------------------------------------------------------
rseg DSCR ;; locate the descriptor table in on-part memory.

DeviceDscr:
db DSCR_DEVICE_LEN ;; Descriptor length
db DSCR_DEVICE ;; Decriptor type
dw 0002H ;; Specification Version (BCD)
db 00H ;; Device class
db 00H ;; Device sub-class
db 00H ;; Device sub-sub-class
db 64 ;; Maximum packet size
dw 0FF00H ;; Vendor ID
dw 0FF0H ;; Product ID (Sample Device)
dw 0000H ;; Product version ID
db 1 ;; Manufacturer string index
db 2 ;; Product string index
db 0 ;; Serial number string index
db 1 ;; Number of configurations

DeviceQualDscr:
db DSCR_DEVQUAL_LEN ;; Descriptor length
db DSCR_DEVQUAL ;; Decriptor type
dw 0002H ;; Specification Version (BCD)
db 00H ;; Device class
db 00H ;; Device sub-class
db 00H ;; Device sub-sub-class
db 64 ;; Maximum packet size
db 1 ;; Number of configurations
db 0 ;; Reserved

HighSpeedConfigDscr:

/* Configuration 1 */
db 0x09 /* bLength */
db 0x02 /* bDescriptorType */
db (HighSpeedConfigDscrEnd-HighSpeedConfigDscr) mod 256 /* wTotalLength 109 bytes*/
db (HighSpeedConfigDscrEnd-HighSpeedConfigDscr) / 256
db 0x02 /* bNumInterfaces */
db 0x01 /* bConfigurationValue */
db 0x00 /* iConfiguration */
db 0xC0 /* bmAttributes BUS Powred*/
db 0x32 /* bMaxPower = 100 mA*/
/* 09 byte*/

/* USB Speaker Standard interface descriptor */
db 0x09 /* bLength */
db 0x04 /* bDescriptorType */
db 0x00 /* bInterfaceNumber */
db 0x00 /* bAlternateSetting */
db 0x00 /* bNumEndpoints */
db 0x01 /* bInterfaceClass */
db 0x01 /* bInterfaceSubClass */
db 0x00 /* bInterfaceProtocol */
db 0x00 /* iInterface 7??????????*/

;;USB Speaker Class-specific AC Interface Descriptor */
db 0x09 ;;;;/* bLength */
db 0x24 ;;;;/* bDescriptorType */
db 0x01 ;;;;/* bDescriptorSubtype */
db 0x00, 0x01 ;;;;/* 1.00 */ ;;/* bcdADC */
db 0x27, 0x00 ;;;;/* wTotalLength = 39 30?????????*/
db 0x01 ;;;;/* bInCollection */
db 0x01 ;;;;/* baInterfaceNr */
;;;;/* 09 byte*/

;;;;/* USB Speaker Input Terminal Descriptor */
db 0x0C ;;;;/* bLength */
db 0x24 ;;;;/* bDescriptorType */
db 0x02 ;;;;/* bDescriptorSubtype */
db 0x01 ;;;;/* bTerminalID */
db 0x01, 0x01 ;;;;/* wTerminalType AUDIO_TERMINAL_USB_STREAMING 0x0101 */
db 0x00 ;;;;/* bAssocTerminal */
db 0x02, 0x03 ;;;;/* bNrChannels */
;;;;/* wChannelConfig 0x0003 Mono */
db 0x00
db 0x00 ;;;;/* iChannelNames */
db 0x00 ;;;;/* iTerminal */

;;;;/*USB Speaker Output Terminal Descriptor */
db 0x09 ;;;;/* bLength */
db 0x24 ;;;;/* bDescriptorType */
db 0x03 ;;;;/* bDescriptorSubtype */
db 0x02 ;;;;/* bTerminalID */
db 0x01 ;;/* wTerminalType 0x0301*/
db 0x03
db 0x00 ;;/* bAssocTerminal */
db 0x01 ;;/* bSourceID */
db 0x00 ;;/* iTerminal */
;;/* 09 byte*/

;;/* USB Speaker Standard AS Interface Descriptor - Audio Streaming Zero Bandwith */
;;/* Interface 1, Alternate Setting 0 */
db 0x09 ;;/* bLength */
db 0x04 ;;/* bDescriptorType */
db 0x01 ;;/* bInterfaceNumber */
db 0x00 ;;/* bAlternateSetting */
db 0x00 ;;/* bNumEndpoints */
db 0x01 ;;/* bInterfaceClass */
db 0x02 ;;/* bInterfaceSubClass */
db 0x00 ;;/* bInterfaceProtocol */
db 0x00 ;;/* iInterface */
;;/* 09 byte*/

;;/* USB Speaker Standard AS Interface Descriptor - Audio Streaming Operational */
;;/* Interface 1, Alternate Setting 1 */
db 0x09 ;;/* bLength */
db 0x04 ;;/* bDescriptorType */
db 0x01 ;;/* bInterfaceNumber */
db 0x01 ;;/* bAlternateSetting */
db 0x01 ;;/* bNumEndpoints */
db 0x01 ;;/* bInterfaceClass */
db 0x02 ;;/* bInterfaceSubClass */
db 0x00 ;;/* bInterfaceProtocol */
db 0x00 ;;/* iInterface */
;;/* 09 byte*/

;;/* USB Speaker Audio Streaming Interface Descriptor */
db 0x07 ;;/* bLength */
db 0x24 ;;/* bDescriptorType */
db 0x01 ;;/* bDescriptorSubtype */
db 0x01 ;;/* bTerminalLink */
db 0x01 ;;/* bDelay */
db 0x01 ;;/* wFormatTag AUDIO_FORMAT_PCM 0x0001*/
db 0x00
;;/* 07 byte*/

;;/* USB Speaker Audio Type III Format Interface Descriptor */
db 0x0B ;;/* bLength */
db 0x24 ;;/* bDescriptorType */
db 0x02 ;;/* bDescriptorSubtype */
db 0x01 ;;/* bFormatType */
db 0x02 ;;/* bNrChannels */
db 0x03 ;;/* bSubFrameSize : 3 Bytes per frame (24bits) */
db 24 ;;/* bBitResolution (24-bits per sample) */
db 0x01 ;;/* bSamFreqType only one frequency supported */
db 0x80 ;;/* Audio sampling frequency coded on 3 bytes */
db 0xBB
db 0x00 ;;/* 11 byte*/

;;/* Endpoint 1 - Standard Descriptor */
db 0x09 ;;/* bLength */
db 0x05 ;;/* bDescriptorType */
db 0x04 ;;/* bEndpointAddress 4 out endpoint*/
db 0x01;;0x05 ;;/* bmAttributes */
db 0x20 ;;/* wMaxPacketSize in Bytes (Freq(Samples)*2(Stereo)*2(HalfWord)) */
db 0x01
db 0x01 ;;/* bInterval */
db 0x00 ;;/* bRefresh */
db 0x00;//0x81 ;;/* bSynchAddress */
;;/* 09 byte*/

;;/* Endpoint - Audio Streaming Descriptor*/
db 0x07 ;;/* bLength */
db 0x25 ;;/* bDescriptorType */
db 0x01 ;;/* bDescriptor */
db 0x00 ;;/* bmAttributes */
db 0x00 ;;/* bLockDelayUnits */
db 0x00 ;;/* wLockDelay */
db 0x00
;;/* 07 byte*/

;; Endpoint - Standard Descriptor <-------- additional feedback EP
;;db 0x09 ;;/* bLength */
;;db 0x05 ;;/* bDescriptorType */
;;db 0x81 ;;/* bEndpointAddress */
;;db 0x01 ;;/* bmAttributes */
;;db 0x03 ;;/*1x 3 bytes wMaxPacketSize */
;;db 0x00
;;db 0x01 ;;/* bInterval */
;;db 0x03 ;;/* bRefresh, every 2ms */
;;db 0x00 ;;/* bSynchAddress */
;;/* 09 byte*/

HighSpeedConfigDscrEnd:

FullSpeedConfigDscr:

/* Configuration 1 */
db 0x09 /* bLength */
db 0x02 /* bDescriptorType */
db (HighSpeedConfigDscrEnd-HighSpeedConfigDscr) mod 256 /* wTotalLength 109 bytes*/
db (HighSpeedConfigDscrEnd-HighSpeedConfigDscr) / 256
db 0x02 /* bNumInterfaces */
db 0x01 /* bConfigurationValue */
db 0x00 /* iConfiguration */
db 0xC0 /* bmAttributes BUS Powred*/
db 0x32 /* bMaxPower = 100 mA*/
/* 09 byte*/

/* USB Speaker Standard interface descriptor */
db 0x09 /* bLength */
db 0x04 /* bDescriptorType */
db 0x00 /* bInterfaceNumber */
db 0x00 /* bAlternateSetting */
db 0x00 /* bNumEndpoints */
db 0x01 /* bInterfaceClass */
db 0x01 /* bInterfaceSubClass */
db 0x00 /* bInterfaceProtocol */
db 0x00 /* iInterface 7??????????*/

;;USB Speaker Class-specific AC Interface Descriptor */
db 0x09 ;;;;/* bLength */
db 0x24 ;;;;/* bDescriptorType */
db 0x01 ;;;;/* bDescriptorSubtype */
db 0x00, 0x01 ;;;;/* 1.00 */ ;;/* bcdADC */
db 0x27, 0x00 ;;;;/* wTotalLength = 39 30?????????*/
db 0x01 ;;;;/* bInCollection */
db 0x01 ;;;;/* baInterfaceNr */
;;;;/* 09 byte*/

;;;;/* USB Speaker Input Terminal Descriptor */
db 0x0C ;;;;/* bLength */
db 0x24 ;;;;/* bDescriptorType */
db 0x02 ;;;;/* bDescriptorSubtype */
db 0x01 ;;;;/* bTerminalID */
db 0x01, 0x01 ;;;;/* wTerminalType AUDIO_TERMINAL_USB_STREAMING 0x0101 */
db 0x00 ;;;;/* bAssocTerminal */
db 0x02, 0x03 ;;;;/* bNrChannels */
;;;;/* wChannelConfig 0x0003 Mono */
db 0x00
db 0x00 ;;;;/* iChannelNames */
db 0x00 ;;;;/* iTerminal */

;;;;/*USB Speaker Output Terminal Descriptor */
db 0x09 ;;;;/* bLength */
db 0x24 ;;;;/* bDescriptorType */
db 0x03 ;;;;/* bDescriptorSubtype */
db 0x02 ;;;;/* bTerminalID */
db 0x01 ;;/* wTerminalType 0x0301*/
db 0x03
db 0x00 ;;/* bAssocTerminal */
db 0x01 ;;/* bSourceID */
db 0x00 ;;/* iTerminal */
;;/* 09 byte*/

;;/* USB Speaker Standard AS Interface Descriptor - Audio Streaming Zero Bandwith */
;;/* Interface 1, Alternate Setting 0 */
db 0x09 ;;/* bLength */
db 0x04 ;;/* bDescriptorType */
db 0x01 ;;/* bInterfaceNumber */
db 0x00 ;;/* bAlternateSetting */
db 0x00 ;;/* bNumEndpoints */
db 0x01 ;;/* bInterfaceClass */
db 0x02 ;;/* bInterfaceSubClass */
db 0x00 ;;/* bInterfaceProtocol */
db 0x00 ;;/* iInterface */
;;/* 09 byte*/

;;/* USB Speaker Standard AS Interface Descriptor - Audio Streaming Operational */
;;/* Interface 1, Alternate Setting 1 */
db 0x09 ;;/* bLength */
db 0x04 ;;/* bDescriptorType */
db 0x01 ;;/* bInterfaceNumber */
db 0x01 ;;/* bAlternateSetting */
db 0x01 ;;/* bNumEndpoints */
db 0x01 ;;/* bInterfaceClass */
db 0x02 ;;/* bInterfaceSubClass */
db 0x00 ;;/* bInterfaceProtocol */
db 0x00 ;;/* iInterface */
;;/* 09 byte*/

;;/* USB Speaker Audio Streaming Interface Descriptor */
db 0x07 ;;/* bLength */
db 0x24 ;;/* bDescriptorType */
db 0x01 ;;/* bDescriptorSubtype */
db 0x01 ;;/* bTerminalLink */
db 0x01 ;;/* bDelay */
db 0x01 ;;/* wFormatTag AUDIO_FORMAT_PCM 0x0001*/
db 0x00
;;/* 07 byte*/

;;/* USB Speaker Audio Type III Format Interface Descriptor */
db 0x0B ;;/* bLength */
db 0x24 ;;/* bDescriptorType */
db 0x02 ;;/* bDescriptorSubtype */
db 0x01 ;;/* bFormatType */
db 0x02 ;;/* bNrChannels */
db 0x03 ;;/* bSubFrameSize : 3 Bytes per frame (24bits) */
db 24 ;;/* bBitResolution (24-bits per sample) */
db 0x01 ;;/* bSamFreqType only one frequency supported */
db 0x80 ;;/* Audio sampling frequency coded on 3 bytes */
db 0xBB
db 0x00 ;;/* 11 byte*/

;;/* Endpoint 1 - Standard Descriptor */
db 0x09 ;;/* bLength */
db 0x05 ;;/* bDescriptorType */
db 0x04 ;;/* bEndpointAddress 4 out endpoint*/
db 0x01;;0x05 ;;/* bmAttributes */
db 0x20 ;;/* wMaxPacketSize in Bytes (Freq(Samples)*2(Stereo)*2(HalfWord)) */
db 0x01
db 0x01 ;;/* bInterval */
db 0x00 ;;/* bRefresh */
db 0x00;//0x81 ;;/* bSynchAddress */
;;/* 09 byte*/

;;/* Endpoint - Audio Streaming Descriptor*/
db 0x07 ;;/* bLength */
db 0x25 ;;/* bDescriptorType */
db 0x01 ;;/* bDescriptor */
db 0x00 ;;/* bmAttributes */
db 0x00 ;;/* bLockDelayUnits */
db 0x00 ;;/* wLockDelay */
db 0x00
;;/* 07 byte*/

;; Endpoint - Standard Descriptor <-------- additional feedback EP
;;db 0x09 ;;/* bLength */
;;db 0x05 ;;/* bDescriptorType */
;;db 0x81 ;;/* bEndpointAddress */
;;db 0x01 ;;/* bmAttributes */
;;db 0x03 ;;/*1x 3 bytes wMaxPacketSize */
;;db 0x00
;;db 0x01 ;;/* bInterval */
;;db 0x03 ;;/* bRefresh, every 2ms */
;;db 0x00 ;;/* bSynchAddress */
;;/* 09 byte*/

FullSpeedConfigDscrEnd:

StringDscr:

StringDscr0:
db StringDscr0End-StringDscr0 ;; String descriptor length
db DSCR_STRING
db 09H,04H
StringDscr0End:

StringDscr1:
db StringDscr1End-StringDscr1 ;; String descriptor length
db DSCR_STRING
db 'R',00
db '6',00
db 'M',00
db 'F',00
db '4',00
db '9',00
db 'T',00
db '2',00
StringDscr1End:

StringDscr2:
db StringDscr2End-StringDscr2 ;; Descriptor length
db DSCR_STRING
db 'Q',00
db 'W',00
db 'E',00
db 'R',00
db 'T',00
db 'Y',00
StringDscr2End:

UserDscr:
dw 0000H
end
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.