Napisałem ten krótki poradnik, ponieważ mam wrażenie że sprzętowa obsługa portu USB dla XMEGA jest w wielu publikacjach traktowana po macoszemu.
Atmel udostępnia
AtmelStudio w wersji 7 oraz biblioteki
Atmel Software Framework,
które umożliwiają w dość prosty sposób obsłużyć komponenty "wokół" procesora.
ARDUINO ma "wbudowaną" obsługę portu szeregowego co znakomicie ułatwia debugowanie programów, a dlaczego tego nie zrobić dla procesorów XMEGA z ze sprzętową obsługą USB?!
Dlatego spróbujmy zmusić naszą XMEGE by przekierować
STDIN/STDOUT na emulowany port szeregowy poprzez wbudowany w procesor sprzętowy interfejs USB.
W tym poradniku użyłem Atmel Studio 7.0.790 (biada mi, nie eclipse) z "wbudowanym" Atmel Software Framework w wersji 3.30.1.
Zaczynamy od otwarcia nowego projektu "GCC C ASF Board Project"
Następnie wybieramy typ procesora (w moim wypadku ATxmega128A3U) i rodzaj płyty na której on jest.
Ponieważ nie używam żadnego z zestawów firmy Atmel, wybrałem "User Board Template"
Po utworzeniu pustego projektu czas na wybór komponentów z biblioteki Atmel Software Framework (ASF) z których będziemy korzystać.
By to zrobić z menu wybierzmy ASF -> ASF Wizard lub wciśnijmy kombinację klawiszy ALT+W.
Powinno się pojawić okno jak poniżej...
Tutaj bardzo ważne jest zaznaczenie komponentu USB Device Serwice i z listy rozwijanej wybranie cdc_stdio ( uwaga: jest również komponent "cdc" - to nie ten, musi być cdc_stdio)
Klikamy Add oraz Apply i otrzymujemy to co poniżej
Teraz zamykamy okienko ASF i konfigurujemy nasz projekt.
W oknie Solution Explorer odnajdujemy w katalogu "config" pliki
conf_clock.h, conf_usb.h i poprzez podwójne kliknięcie na nich otwieramy je do edycji.
Zauważcie, że u mnie przy nazwach plików jest czerwona kropka, świadczy to o tym, że plik został zmodyfikowany.
Plik conf_clock.h definiuje parametry taktowania procesora.Modyfikujemy w nim trzy sekcjie:
1. zmieniamy parametr CONFIG_SYSCLK_SOURCE z domyślnego 2MHz na 32Mhz
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
2. zmieniamy parametr CONFIG_SYSCLK_PSADIV z domyślnego SYSCLK_PSADIV_1 na SYSCLK_PSADIV_2
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
3. usuwamy komentarz w liniach zawierających CONFIG_OSC_RC32_CAL i CONFIG_OSC_AUTOCAL_RC32MHZ_REF_OSC
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Teraz zajmijmy się plikiem conf_usb.hW nim znajdzmy definicję funkcji wywoływanych po aktywacji portu usb
Musimy odnaleźć w nim definicje UDI_CDC_ENABLE_EXT, UDI_CDC_DISABLE_EXT
i zamienić na poniższe ...
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Linie te są odpowiedzialne za podłączenie/odłączenie STDIO w momencie gdy jest aktywowany/deaktywowany port USB z obsługą urządzenia typu Communication Device Class.
Następnie dodajmy co nieco do plilku main.czmieniając jego zawartość na poniższą ...
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
I to już właściwie wszystko .... Linie
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
powinny się znajdować na początku każdego projektu używającego ASF.
Linia
stdio_usb_init(); włącza obsługę STDIO dla USB.
Po kompilacji i zrestartowaniu procesora mamy w systemie windows dodatkowy port szeregowy, który jest połączony z STDIN/STDOUT procesora i możemy go wykorzystać do dowolnych celów....
A TUTAJ rozwinięcie tematu ... dokładamy kartę SD.