Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

AT91sam7 obsługa USB w przerwaniu

17 Wrz 2007 13:10 2028 10
  • Poziom 10  
    Witam.

    Mam problem z oprogramowaniem komunikacji USB na AT91sam7s64 tak aby działała w przerwaniu.
    Problem w tym że przerwanie po przywołaniu w ogóle się nie wyłącza.

    Inicjalizuje przerwanie za pomocą standardowych funkcji dostarczanych przez ATMELA

    Code:

    void USB_init ( void )
    //* Begin
    {
        //* First, enable the clock of the PIOB
        AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, 1<<AT91C_ID_US0 ) ;

        //* open Usart interrupt
        AT91F_AIC_ConfigureIt (AT91C_BASE_AIC, AT91C_ID_UDP, UDP_INTERRUPT_LEVEL,
                               AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL, USB_c_irq_handler);
           
        AT91F_AIC_EnableIt (AT91C_BASE_AIC, AT91C_ID_UDP);
    }



    W procedurze obsługi przerwania próbowałem zerować flagi RX_DATA_BK0 i RXSETUP w rejestrze UDP_CRS ale mimo to po zakończeniu obsługi przerwania jest ono przywoływane ponownie bez powodu.

    Jeżeli realizuje transmisję bez przerwania to wszystko działa bez zarzutów.
    Darmowe szkolenie: Ethernet w przemyśle dziś i jutro. Zarejestruj się za darmo.
  • Poziom 24  
    Pochwali się kolega projektem obsługi USB? Bo mam problem z jego implementacją w jakikolwiek sposób na AT91SAM7S256 ... Co do kodu to z tego na ile wgłębiłem się w przerwania to wygląda wszystko poprawnie ...
  • Poziom 21  
    Poszukajcie może lepiej na atmelu driverow MSB i HID dla tych procesorków.. U mnie ruszyło od strzała.
  • Poziom 24  
    U mnie Framework'i od Atmel'a do tej pory nie ruszyły ... pomimo kombinacji :(
  • Poziom 27  
    Migod mowisz o MSD ? Ktore Ci ruszyly od zaraz? Od jakegos czasu mecze sie z MSD pod GCC (WInARM) . JEsli masz jakis skompilowany i dzialajacy chetnie go obejrze :)
  • Poziom 27  
    Wydawalo mi sie ze w tym przykładzie nie ma MSD
    "AT91 USB Core + HID Code ported to GNU/gcc"
    Ale skoro mowisz ze jest tam MSD to musze sprawdzic. Udalo Ci sie skompilować ten program i uruchomic go tak by windows widzial dysk wymienny z mozliwoscia jego sformatowania i zapisywania danych na niego?
  • Poziom 21  
    Wyraziłem się nieprecyzyjnie. Oprócz tego, że uruchamia mi się przykład z USB i przerwaniami (link podałem w poprzednim poście), uruchomiłem również bez problemu framework MSD (chyba ze strony atmela). mariuszlorenc pisał, że miał problem z uruchomieniem czegokolwiek z atmela. Teraz coś nie mogę znaleźć linka do zip-a.. Jeśli komuś potrzebny - mogę upload-nąć lub na maila.

    Plik ma nazwę: "AT91 USB Framework - Core 1.02 + MSD 1.0.zip" i jakieś 1.4MB. O ile dobrze pamiętam, wsad do procka emulował 2 dyski, każdy po 12 kb pojemności. Na jednym z nich udało mi się zapisać jakiś plik o wielkości kilku B, który przetrwał do następnego boot-u procka. Na tym etapie zakończyłem zabawę z MSD. Partycje wymagały założenia fat32.. Całość testowałem spod Win XP+SP2. Jeśli trzeba - odgrzebię projekt i prześlę więcej szczegółów. Zapewniam jednak, że nad podziw szybko całość ruszyła.
    Paczka zawierała binaria gotowe do wgrania via USB przy użyciu sam-ba. Nie musiałem nawet nic kompilować..
  • Poziom 24  
    No OK ... binaria od Atmel'a mi śmigają, ale jak mam zaimplementować core to już jest problem ... Praktycznie przekopiowałem CDC USB Framework z drognymi zmianami niezbędnymi do kompilacji, które jestem pewien, że dobrze zmieniam ... i nie chodzi ... znajdź no jakiś projekt i podeślij ...
  • Poziom 1  
    Hello all :)

    Jestem nowym userem więc na wstępie piszę z problemem
    (podpinam się pod ten wątek bo dotyczy przerwań USB w SAMiku)

    Napisałem sobie HIDa pod USB. Testowałem już różne urządzenia
    (mysz, klawiatura, joystick) i wszystko działa ok (włącznie z
    wcześniej opisanym problemem z czyszczeniem flag), do momentu
    w którym zamiast sprawdzać nadchodzące zdarzenia w nieskończonej
    pętli postanowiłem skorzystać z przerwań.

    Mój problem jest taki, że w ogóle nie zostaje wywołana procedura
    obsługi przerwania. AIC oraz plik asemblerowy skonfigurowałem
    zgodnie z przykładami w WinARM (GCC) – tak mi się przynajmniej
    wydaje :)

    Czy mógłby ktoś (ogólnie) opisać krok po kroku jak prawidłowo
    skonfigurować AIC? Pytanie to kieruję głównie do użytkownika
    który zapoczątkował temat, bo jak wspomniał udało mu sie już to
    uczynić :) Oczywiście pomoc innych również mile widziana :)

    Z góry wielkie dzięki!!
    Pozdrawiam!