реклама на сайте
подробности

 
 
> Проблемы с GPIF в CY7C68013a
Мария Е
сообщение Nov 29 2008, 11:23
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 56
Регистрация: 18-11-07
Из: Москва
Пользователь №: 32 424



Здравствуйте!
Пытаюсь разобраться с GPIF в МК CY7C68013a. Согласно TechRefManual создаю файл для инициализации GPIF с помощью GpifDesigner (скачала с сайта cypress). Но столкнулась со следующей проблемой: если в проект в Кейле подключать сгенерированный GpifDesigner сишный файл, то проект нормально компилится, прошивается в МК, но при переподключении устройства (из Cypress USB Console) новое устройство консолью не обнаруживается. Через некоторое время винда говорит, что USB устройство не опознано, а USB Device viewer:
---===>Device Information<===---

ConnectionStatus: FailedEnumeration
Current Config Value: 0x00 -> Device Bus Speed: Low
Device Address: 0x00
Open Pipes: 0
*!*ERROR: No open pipes!

===>Device Descriptor<===
*!*ERROR: bLength of 0 incorrect, should be 18
bLength: 0x00
bDescriptorType: 0x00
bcdUSB: 0x0000
bDeviceClass: 0x00
*!*ERROR: Device enumeration failure

Если убрать файл, сгенерированный GpifDesigner, то все ок (обнаруживается новое устройство)wacko.gif

Кто-нибудь сталкивался с чем-то подобным? В чем может быть проблема?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Мария Е
сообщение Dec 29 2008, 21:00
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 56
Регистрация: 18-11-07
Из: Москва
Пользователь №: 32 424



Спасибо за пример, действительно сильно помогло.
Сейчас работает in передача (из плис в CY7C68013a и в хост) в manual mode, но проблемы с autoin.
На сколько я поняла, настройка autoin заключается в его разрешении и загрузке числа байт (которое хотим передавать автоматически) в EP2AUTOINLENH:L.
Если я пишу в EP2AUTOINLENH:L число меньше 40, то хостом принимается 512 байт, а если больше 40, то устройство вообще не опознается системой.
Подскажите, в чем может быть косяк?
Я неправильно понимаю принцип работы?

Куски кода:

.....// инициализация
SYNCDELAY;
EP2FIFOCFG = 0x04; // EP2 is: 0, INFM1=0, OEP1=0, AUTOOUT=0, AUTOIN=0, ZEROLEN=1, 0, WORDWIDE=0
SYNCDELAY;
EP2FIFOCFG = 0x0c; // EP2 is: 0, INFM1=0, OEP1=0, AUTOOUT=0, AUTOIN=1, ZEROLEN=1, 0, WORDWIDE=0
SYNCDELAY;

EP2AUTOINLENH = MSB(count); // if AUTOIN=1, auto commit 512 byte packets
SYNCDELAY;
EP2AUTOINLENL = LSB(count);
.......

//опрос
if( GPIFTRIG & 0x80 ) // if GPIF interface IDLE
{
if ( ! ( EP24FIFOFLGS & 0x01 ) ) // if EP2 fifo is not full
{

SYNCDELAY;
GPIFTCB1 = MSB(count); // setup transaction count with 512
SYNCDELAY;
GPIFTCB0 = LSB(count);
SYNCDELAY;

GPIFTRIG = GPIFTRIGRD | GPIF_EP2; // launch GPIF FIFO READ Transaction to EP2IN
SYNCDELAY;

while( !( GPIFTRIG & 0x80 ) ); // poll GPIFTRIG.7 GPIF Done bit

SYNCDELAY;
.....

Если делать передачу пакетов через установку соответствующего бита в регистре INPKTEND, то все нормально работает. Но хотелось бы полного автомата))))
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 20:34
Рейтинг@Mail.ru


Страница сгенерированна за 0.01351 секунд с 7
ELECTRONIX ©2004-2016