Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: cy7c68013a SlaveFIFO проблема с отправкой данных по USB
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > RS232/LPT/USB/PCMCIA/FireWire
temik
Подскажите, в чем может быть проблема? Cy7c68013 работает в SlaveFIFO, мастер - Spartan3E. В EP6 (FIFOADDR[1:0]='10') постоянно пишу 0xAA до заполнения FIFO. На компе в CyConsole вижу только нули. Данные на шину FD[7:0] выставлены, строб SLWR работает (менял как только мог, даже был принулительно выставил на шины адреса и данных инфу постоянно и дергал только SLWR, все равно результат один). подскажите, где копать?
Исходник прилагаю:
dscr.a51

Код
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   04414H    ;; Vendor ID
      dw   5500H    ;; 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:  
      db   DSCR_CONFIG_LEN             ;; Descriptor length
      db   DSCR_CONFIG                ;; Descriptor type
      db   (HighSpeedConfigDscrEnd-HighSpeedConfigDscr) mod 256;; Total Length (LSB)
      db   (HighSpeedConfigDscrEnd-HighSpeedConfigDscr)  /  256;; Total Length (MSB)
      db   1    ;; Number of interfaces
      db   1    ;; Configuration number
      db   0    ;; Configuration string
      db   10000000b ;; Attributes (b7 - buspwr, b6 - selfpwr, b5 - rwu)
      db   250    ;; Power requirement (div 2 ma)

;; Interface Descriptor
      db   DSCR_INTRFC_LEN    ;; Descriptor length
      db   DSCR_INTRFC    ;; Descriptor type
      db   0             ;; Zero-based index of this interface
      db   0             ;; Alternate setting
      db   4             ;; Number of end points
      db   0ffH          ;; Interface class
      db   00H             ;; Interface sub class
      db   00H             ;; Interface sub sub class
      db   0             ;; Interface descriptor string index
      
;; Endpoint Descriptor
      db   DSCR_ENDPNT_LEN    ;; Descriptor length
      db   DSCR_ENDPNT    ;; Descriptor type
      db   02H             ;; Endpoint number, and direction
      db   ET_BULK          ;; Endpoint type
      db   00H             ;; Maximun packet size (LSB)
      db   02H             ;; Max packect size (MSB)
      db   00H             ;; Polling interval

;; Endpoint Descriptor
      db   DSCR_ENDPNT_LEN    ;; Descriptor length
      db   DSCR_ENDPNT    ;; Descriptor type
      db   04H             ;; Endpoint number, and direction
      db   ET_BULK          ;; Endpoint type
      db   00H             ;; Maximun packet size (LSB)
      db   02H             ;; Max packect size (MSB)
      db   00H             ;; Polling interval

;; Endpoint Descriptor
      db   DSCR_ENDPNT_LEN    ;; Descriptor length
      db   DSCR_ENDPNT    ;; Descriptor type
      db   86H             ;; Endpoint number, and direction
      db   ET_BULK          ;; Endpoint type
      db   00H             ;; Maximun packet size (LSB)
      db   02H             ;; Max packect size (MSB)
      db   00H             ;; Polling interval

;; Endpoint Descriptor
      db   DSCR_ENDPNT_LEN    ;; Descriptor length
      db   DSCR_ENDPNT    ;; Descriptor type
      db   88H             ;; Endpoint number, and direction
      db   ET_BULK          ;; Endpoint type
      db   00H             ;; Maximun packet size (LSB)
      db   02H             ;; Max packect size (MSB)
      db   00H             ;; Polling interval

HighSpeedConfigDscrEnd:  

FullSpeedConfigDscr:  
      db   DSCR_CONFIG_LEN             ;; Descriptor length
      db   DSCR_CONFIG                ;; Descriptor type
      db   (FullSpeedConfigDscrEnd-FullSpeedConfigDscr) mod 256;; Total Length (LSB)
      db   (FullSpeedConfigDscrEnd-FullSpeedConfigDscr)  /  256;; Total Length (MSB)
      db   1    ;; Number of interfaces
      db   1    ;; Configuration number
      db   0    ;; Configuration string
      db   10000000b ;; Attributes (b7 - buspwr, b6 - selfpwr, b5 - rwu)
      db   50    ;; Power requirement (div 2 ma)

;; Interface Descriptor
      db   DSCR_INTRFC_LEN    ;; Descriptor length
      db   DSCR_INTRFC    ;; Descriptor type
      db   0             ;; Zero-based index of this interface
      db   0             ;; Alternate setting
      db   4             ;; Number of end points
      db   0ffH          ;; Interface class
      db   00H             ;; Interface sub class
      db   00H             ;; Interface sub sub class
      db   0             ;; Interface descriptor string index
      
;; Endpoint Descriptor
      db   DSCR_ENDPNT_LEN    ;; Descriptor length
      db   DSCR_ENDPNT    ;; Descriptor type
      db   02H             ;; Endpoint number, and direction
      db   ET_BULK          ;; Endpoint type
      db   40H             ;; Maximun packet size (LSB)
      db   00H             ;; Max packect size (MSB)
      db   00H             ;; Polling interval

;; Endpoint Descriptor
      db   DSCR_ENDPNT_LEN    ;; Descriptor length
      db   DSCR_ENDPNT    ;; Descriptor type
      db   04H             ;; Endpoint number, and direction
      db   ET_BULK          ;; Endpoint type
      db   40H             ;; Maximun packet size (LSB)
      db   00H             ;; Max packect size (MSB)
      db   00H             ;; Polling interval

;; Endpoint Descriptor
      db   DSCR_ENDPNT_LEN    ;; Descriptor length
      db   DSCR_ENDPNT    ;; Descriptor type
      db   86H             ;; Endpoint number, and direction
      db   ET_BULK          ;; Endpoint type
      db   40H             ;; Maximun packet size (LSB)
      db   00H             ;; Max packect size (MSB)
      db   00H             ;; Polling interval

;; Endpoint Descriptor
      db   DSCR_ENDPNT_LEN    ;; Descriptor length
      db   DSCR_ENDPNT    ;; Descriptor type
      db   88H             ;; Endpoint number, and direction
      db   ET_BULK          ;; Endpoint type
      db   40H             ;; Maximun packet size (LSB)
      db   00H             ;; Max packect size (MSB)
      db   00H             ;; Polling interval

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   'T',00
      db   'e',00
      db   'm',00
      db   'i',00
      db   'k',00
      db   '0',00
      db   '8',00
            
StringDscr1End:

StringDscr2:  
      db   StringDscr2End-StringDscr2    ;; Descriptor length
      db   DSCR_STRING
      db   'T',00
      db   '-',00
      db   '-',00
      db   'U',00
      db   'S',00
      db   'B',00
StringDscr2End:

UserDscr:      
      dw   0000H
      end



periph.c
Код
//-----------------------------------------------------------------------------
#pragma NOIV               // Do not generate interrupt vectors

#include "fx2.h"
#include "fx2regs.h"
#include "syncdly.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

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

void TD_Init(void)             // Called once at startup
{
//   BREAKPT &= ~bmBPEN;      // to see BKPT LED go out TGE

REVCTL=0x03;//ok
SYNCDELAY;
CPUCS=0x10;
IFCONFIG=0xCB;//ok
SYNCDELAY;
EP2CFG=0xA2;
SYNCDELAY;

EP4CFG=0xA2;
SYNCDELAY;


EP6CFG=0xE0;
SYNCDELAY;

EP8CFG=0xE0;
SYNCDELAY;


FIFORESET=0x80;
SYNCDELAY;
FIFORESET=0x02;
SYNCDELAY;
FIFORESET=0x04;
SYNCDELAY;
FIFORESET=0x06;
SYNCDELAY;
FIFORESET=0x08;
SYNCDELAY;
FIFORESET=0x00;
SYNCDELAY;
OUTPKTEND=0x02;
SYNCDELAY;
OUTPKTEND=0x02;
SYNCDELAY;
OUTPKTEND=0x04;
SYNCDELAY;
OUTPKTEND=0x04;
SYNCDELAY;

EP2FIFOCFG=0x10;
SYNCDELAY;



EP4FIFOCFG=0x10;
SYNCDELAY;

EP6FIFOCFG=0x0C;
SYNCDELAY;

EP8FIFOCFG=0x0C;
SYNCDELAY;

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

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


PORTACFG=0x00;
SYNCDELAY;

PINFLAGSAB=0x00;
SYNCDELAY;

PINFLAGSCD=0x00;
SYNCDELAY;

FIFOPINPOLAR=0x00;
SYNCDELAY;


}

void TD_Poll(void)             // Called repeatedly while the device is idle
{
}

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;
}


Заранее прошу крепко не ругатся, контроллер только начал осваивать.
alexkok
Цитата(temik @ Jan 9 2009, 10:40) *
Подскажите, в чем может быть проблема? Cy7c68013 работает в SlaveFIFO, мастер - Spartan3E. В EP6 (FIFOADDR[1:0]='10') постоянно пишу 0xAA до заполнения FIFO. На компе в CyConsole вижу только нули. Данные на шину FD[7:0] выставлены, строб SLWR работает (менял как только мог, даже был принулительно выставил на шины адреса и данных инфу постоянно и дергал только SLWR, все равно результат один). подскажите, где копать?
Исходник прилагаю:
dscr.a51

dw 04414H ;; Vendor ID
dw 5500H ;; Product ID (Sample Device)

Насколько я понимаю, CyConsole работает только с сайпрессовскими VID PID, например 0x04b4 0x8613.
rvk
Необязательно, нужно просто залезть в ее inf файл,и скопировать в двух местах строки с VID/PID, и вписать свое. Так можно играться и с EzUSB и с CYUSB.
temik
VID i PID ни при чем, ошибка была в программе ПЛИС при работе с шиной. Найдено, исправлено. Вопрос снимается
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.