Эдуард1978 (08.06.2015 12:19, просмотров: 165) ответил vovanadze на Добрый день товарищи! Возникла проблема с USB контроллера AT90USB1287, работает только в девайс-режиме. Не проходит инициализация - нет никаких прерываний, end of reset в том числе. Только v-bus прерывание происходит. Интересует только инициализация, ч
void InitUSB () функция инициализации {
UHWCON =(1<<UVREGE)|(1<<UIDE)|(1<<UIMOD);
UERST=0xff;
UERST=0;
// UDIEN=0;
UDINT=0;
_delay_ms(15);
PLLCSR=0x16;
while ((PLLCSR & 1)==0);
// UEIENX=0;
// USBCON=(1<<USBE)|(1<<OTGPADE);
// USBCON&=~((1<<HOST)|(1<<FRZCLK));
USBCON=0x90;
USBCON=0x90;
// Endpoint 0 selected
UENUM=0;
// Device endpoint registers initialization
// Endpoint 0: On
UECONX=0x01;
UECFG0X=0x00;
// Endpoint X size: 8
// Endpoint X Banks: 1
//ALLOC ON
UECFG1X=0x30;
UECFG1X|=(1<<ALLOC);
while(!(UESTA0X&(1<<CFGOK)));// Endpoint X configuration: Control, OUT
USBCON&=~((1<<HOST)|(1<<FRZCLK));
UDCON&=~((1<<LSM)|(1<<DETACH));
USB_curr_config=0;
USB_USWSTAT=POWERED_STATE;// ; default to powered state
USB_device_status=1;//, BANKED
USB_dev_req=NO_REQUEST;//, BANKED ; No device requests in process
//bufferusb[9]={0x30};
}
void USBReset () функция инициализации при сбросе на шине usb
{
UDADDR = 0;
USB_address_pending=0;
UHWCON |=(1<<UIMOD)|(1<<UVREGE);
UERST=0xff;
UERST=0;
// USBCON=(1<<USBE)|(1<<OTGPADE);
// USBCON&=~((1<<HOST)|(1<<FRZCLK));
// UDIEN=0;
UDINT=0;
// UEINTX=0;
// UEIENX=0;
USBCON=0x90;
USBCON=0x90;
// Endpoint 0 selected
UENUM=0;
// Device endpoint registers initialization
// Endpoint 0: On
//UECONX=0x00;
UECONX=0x01;
UECFG0X=0x00;
// Endpoint X size: 8
// Endpoint X Banks: 1
//ALLOC ON
UECFG1X=0x30;
UECFG1X|=(1<<ALLOC);
while(!(UESTA0X&(1<<CFGOK)));// Endpoint X configuration: Control, OUT
//USBCON&=~((1<<HOST)|(1<<FRZCLK));
// UDCON&=~((1<<LSM)|(1<<DETACH));
UDCON=0x02;
UEIENX|=(1<<RXSTPE);// РАЗРЕШЕНР?Р• ПРЕРЫВАНР?Р• РџРћ ТОКЕНУ SETUP
index1=0;
USB_curr_config=0;
USB_device_status=1;
USB_USWSTAT=DEFAULT_STATE;
//bufferusb[10]={0x31};
// UEINTX=0;
}