[an error occurred while processing this directive]
Проблема с USBN9603
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Amink 16 сентября 2002 г. 19:04

Инициализация контроллера, как в примере, выложенном на сайте NS, и пару раз приводившееся в конфе.
iwrite_usb(CCONF,CLKDIV-1); /*set clock freq */
iwrite_usb(MCNTRL,0);
/*give a soft reset, then set ints to push pull, active hi or lo*/
iwrite_usb(MCNTRL,SRST);

/*set default address, enable EP0 only **************************/
iwrite_usb(FAR,AD_EN+0);
iwrite_usb(EPC0, 0x00);

/*set up interrupt masks ****************************************/
iwrite_usb(NAKMSK,NAK_O0+NAK_I3); /*NAK evnts*/
iwrite_usb(TXMSK,TXFIFO0+TXFIFO1+TXFIFO3); /*TX events*/
iwrite_usb(RXMSK,RXFIFO0+RXFIFO1+RXFIFO3); /*RX events*/

iwrite_usb(ALTMSK,NORMAL_ALTMSK); /*ALT evnts*/
iwrite_usb(MAMSK,(INTR_E+RX_EV+NAK+TX_EV+ALT));

/*enable the receiver and go operational ************************/
iwrite_usb(TXC0,FLUSH); /* flush TX0 and disable */
iwrite_usb(RXC0,RX_EN); /*enable the receiver */
write_usb(NFSR,OPR_ST); /*go operational */
iwrite_usb(MCNTRL,VREG_ST+INTR_TYPE+NAT); /*set NODE ATTACH */
}
При подключении кабеля USB происходит следующее:
контроллер выставляет прерывание по RESET в ALTEV, прерывание обрабатываетя как в примере-
evnt = read_usb(ALTEV); /*check the events */
if(evnt & RESET_A) /*reset event */
{
write_usb(NFSR,RST_ST); /*enter reset state */
write_usb(FAR,AD_EN+0); /*set default address */
write_usb(EPC0, 0x00); /*enable EP0 only */
FLUSHTX0; /*flush TX0 and disable */
write_usb(RXC0,RX_EN); /*enable the receiver */

/*adjusting ints is nec. here in case we were in suspend */
write_usb(ALTMSK,NORMAL_ALTMSK);/*adjust interrupts */

write_usb(NFSR,OPR_ST); /* go operational */
}

else if(evnt & RESUME_A) /*resume event */
{
write_usb(ALTMSK,NORMAL_ALTMSK);/*adjust interrupts */
write_usb(NFSR,OPR_ST); /*go operational */
}

else if(evnt & SD3) /*suspend event */
{
write_usb(ALTMSK,SUSPND_ALTMSK);/*adj interrupts */
write_usb(NFSR,SUS_ST); /*enter suspend state */
}

else /*spurious alt. event! */
{
}
}
После обработки приходит тоже самое прерывание. Так продолжается примерно 25 мсек. Затем еще две активности по 25 мсек, и тишина.
При отключении и повторном включении кабеля USB - все повторяется.
Никакой попытки передать запрос от host не вижу.
Помогите понять в чем здесь проблема.
Спасибо.

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru