Vladimir_T, примите запоздалое СПАСИБО) итак, процессор STR912FAW44
в документации на него - в частности в описании усб контроллера - имеется двоякое трактование структуры Packet buffer areas: на стр.362 показано чередование областей ADDR и COUNT каждой контр.точки ..................... ADDR0_TX COUNT0_TX ADDR0_RX COUNT0_RX ......................
а в описании на стр.391 указано, что 32-битный регистр USB_ADDRn содержит два 16-битных ADDR, то есть чередование получается ..................... ADDR0_TX ADDR0_RX COUNT0_TX COUNT0_RX ......................
собственно говоря - вопрос: какова истинная структура Packet buffer areas. спасибо за внимание.
и еще. после анализа громоздких исходников, которые шли к ИАРу, была сделана попытка простейшей инициализации усб-контроллера (для отладочной платы STR912-SK) согласно даташиту. то есть лаконично написать все то, что там было размазано
#include <iostr912f.h> int main () { SCU_PRR0_bit.RST_USB = 0; //USB RESET enable SCU_PCGR0_bit.USB48M = 0; //1: 48 MHz USB clock stop SCU_PCGR0_bit.USB = 1; //1: USB peripheral clock running SCU_PRR0_bit.RST_USB = 1; //USB RESET disable SCU_PCGR1_bit.GPIO7 = 1; //GPIO7 ON SCU_PRR1_bit.RST_GPIO7 = 1; //GPIO7 RESET disable SCU_GPIOOUT7 = 0x5555; // GPIOOUT7 GPIO7_DIR = 0x01; // output SCU_CLKCNTR_bit.USBSEL = 0x0; //USB 48 MHz Clock Selection 00: fMSTR (default) USB_CNTR = 1; //1: Force a reset of the USB Peripheral, SCU_PCGR0_bit.USB48M = 1; //1: 48 MHz USB clock running GPIO7_DATA = 0xFF; // output // Init controls endpoints // Clear USB Reset USB_CNTR_bit.FRES = 0; USB_CNTR_bit.ESOFM = 0; USB_CNTR_bit.RESUME = 0; USB_CNTR_bit.LP_MODE = 0; USB_CNTR_bit.FSUSP = 0; // Must be 0 USB_BTABLE = 0x07E8; USB_DADDR = 0x0080;
*((long*)0x700007E8) = 0x00080000; // установка адресов для двух буферов точки0 *((long*)0x700007EC) = 0x10080008; //установка COUNT для них же USB_ISTR = 0; USB_CNTR = 0;
USB_EP0R = 0x3230; USB_EP1R = 0x00; USB_EP2R = 0x00; GPIO7_DATA = 0xFE; // output
m22: if (USB_ISTR_bit.CTR == 0) goto m22; for(;;) ; } ===================================================================== предполагалось, что в буфер точки0, который расположен в начале Buffer table усб-контроллера, окажется запрос компутера о дескрипторах или статусе устройства (то есть буфер изменит свое содержимое) и будет установлен USB_ISTR_bit.CTR (Correct Transfer: This bit is set by the hardware to indicate that an Endpoint has successfully completed a transaction). но ничего этого не происходит(( чего сделали не так?
Сообщение отредактировал s868 - Feb 29 2008, 09:53
|