Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 29 mar 2024, o 14:16


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 1 ] 

Jest OK ?!
TAK 94%  94%  [ 15 ]
NIE 6%  6%  [ 1 ]
Liczba głosów : 16
Autor Wiadomość
PostNapisane: 23 kwi 2016, o 19:20 
Offline
Nowy

Dołączył(a): 01 lut 2013
Posty: 2
Pomógł: 0

W poprzednim poście LINK pokazałem jak w bardzo prosty sposób w Atmel Studio 7 przy pomocy bibliotek ASF wykorzystać port USB, zdefiniować go jako port szeregowy i przekierować no niego potoki STDIN/STDOUT.
W tym poście chcę dodatkowo podłączyć kartę SD korzystając z bibliotek Atmela, a informacje o karcie SD będą wyświetlane poprzez port szeregowy emulowany przez interfejs USB procesora.

Ważną sprawą jest fakt, że ASF (Atmel Software Fundation) to gotowe sterowniki, komponenty, usługi i funkcje realizujące obsługę portów IO, interfejsów komunikacyjnych, usług i procedur do wykorzystania w naszym kodzie.
Czasem dzięki kilku liniom kodu i odpowiednim definicjom można uzyskać naprawdę spektakularne efekty.

Poniżej obrazek ze strony Atmela pokazujący strukturę ASF,
Obrazek

W naszym projekcie będziemy korzystali z następujących komponentów ASF:
- „GPIO service” do zdefiniowania trybu pracy portów procesora
- „SD/MMC stack component” do komunikacji z kartą SD
- „SD/MMC memory Access komponent” zawierający funkcję odczytu i zapisu danych na/z karty
- „USB Device (service) CDC_STDIO” – do obsługi USB w trybie emulacji portu szeregowego przechwytującego STDIN/STDOUT

Użyte w projekcie komponenty ASF w oknie ASF Wizard powinny wyglądać TAK
Obrazek

Po dodaniu komponentów czas na konfigurację plików nagłówkowych.
Tak jak poprzednio konfigurujemy pliki conf_clock.h oraz conf_usb.h

Plik /config/conf_clock.h definiuje parametry taktowania procesora.
Modyfikujemy w nim trzy sekcjie:

1. zmieniamy parametr CONFIG_SYSCLK_SOURCE z domyślnego 2MHz na 32Mhz
Składnia: [ Pobierz ] [ Ukryj ]
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
Składnia: [ Pobierz ] [ Ukryj ]
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
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Teraz zajmijmy się plikiem /config/conf_usb.h
W 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 ...
Składnia: [ Pobierz ] [ Ukryj ]
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.
Przyda się jeszcze zakomentować poniższą linie znajdującą się gdzieś na początku pliku....
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Nowością będzie definicja pliku conf_board.h.
W pliku tym definiujemy połączenia procesora do komponentów zewnętrznych.
W tym przypadku będą te definicje podłączenia karty SD oraz przycisku sprzętowego FLIP podłączonego do portu E5 procesora.
Jeśli nie mamy przełącznika WRITE_PROTECT to go nie definiujemy, poniżej jest on zakomentowany ponieważ u mnie nie występuje.

Zawartość mojego pliku conf_board.h wygląda tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Ponieważ mój zestaw nie jest żadną z płyt uruchomieniowo/deweloperskich Atmela, wieć muszę jeszsze do pliku
/ASF/common/boards/user_board/init.c dopisać zawartość procedury board_init, która inicjuje komponenty zewnętrzne i porty procesora do współpracy z nimi.
Jak widać ja musiałem tylko konfigurować porty IO do współpracy z kartą SD oraz pin E5 do którego jest podłączony microswitch [FLIP].

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Skoro jest już tyle... należy zająć się programem głównym...

Po uruchomieniu procesora program czeka za naciśnięcie przycisku podłączonego do portu E5 (zwieramy pin procesora do masy),
daje nam to czas na otwarcie okienka terminala portu szeregowego (u mnie COM5).
Po naciśnięciu przycisku FLIP program działa w pętli badając status karty i wyświetlając informacje o niej.

Zmienna status przechowuje informacje o aktualnym statusie karty SD.
Zmienna port to numer portu ( możliwe jest zdefiniowanie i podłączenie kilku kart SD i wybór pomiędzy nimi za pomocą sygnału CD, użyjemy wtedy SD_MMC_0_CD_GPIO, SD_MMC_1_CD_GPIO itd. w pliku conf_board.h )

Cała reszta to użycie funkcji i definicji które są już w ASF.

A tak wygląda program

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Działający program wygląda tak jak poniżej, jest to przykład dla dwóch różnych kart SD.
Obrazek

I to by było na tyle ... w następnym "odcinku" dodamy do projektu bibliotekę FatFS ( jej Atmelowską wersję )
i spróbujemy coś odczytać i zapisać.


Załączniki:

Aby zobaczyć załączniki musisz się zalogować. Tylko zalogowani użytkownicy mogą oglądać i pobierać załączniki.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 1 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO