Sterowniki urządzeń - podstawy programowania Projekt pt
Transkrypt
Sterowniki urządzeń - podstawy programowania Projekt pt
Michał Chmielowiec Sterowniki urządzeń - podstawy programowania Projekt pt. "Sterownik wyświetlacza graficznego z interfejsem SPI dla systemu Raspbian" 1. Sprzęt - platforma komputerowa Raspberry Pi Model B, opis procesora dostępny pod adresem: http://www.raspberrypi.org/wp-content/uploads/2012/02/BCM2835-ARM-Peripherals.pdf -wyświetlacz telefonu Nokia 3310/5110 ze sterownikiem PCD8544, opis pod adresem: https://www.sparkfun.com/datasheets/LCD/Monochrome/Nokia5110.pdf -sposób podłączenia wyświetlacza do płytki komputera: Ponadto należy wyjście VOUT wyświetlacza podłączyć przez kondensator elektrolityczny 1-10 uF do masy (GND). 2. Opis najważniejszych funkcji sterownika: nokia_disp_init()- funckcja rejestruje sterownik w systemie, wyświetla nadany mu numer "Major" w komunikacie jądra. Ponadto w funkcji następuje mapowanie do pamięci rejestrów odpowiedzialnych za obsługę sprzętowego interfejsu SPI procesora (za pomocą funkcji ioremap). Następnie funkcja wywołuje trzy funkcje: set_SPI_function(); set_GPIO_function(); init_disp(); set_SPI_function() - funckja ustawia odpowiednie bity w rejestrach obsługujących interfejs SPI, między innymi ustalana jest odpowiednia częstotliwość zegara SPI, soposob przesyłu ramki (bit ustalony jest przy zboczu opadającym), a także aktywny stan linii CE0 (stan niski); set_GPIO_function() - w rejestrach obsługujących port GPIO procesora piny GPIO 17 i 18 ustawiane są jako wyjścia; init_disp() - funkcja ustala na milisekundę stan niski na linii RES resetując wyświetlacz. Następnie za pomocą funkcji lcd_write_byte() wysyłane są instrukcje inicjalizujące wyświetlacz (między innymi ystalany jest tryb adresowania pamięci RAM). Następnie funkcja wywołuje funkcję lcd_clear(); lcd_write_byte() - funkcja za wysyła bajt za pomocą interfejsu SPI ustalając przy tym odpowiedni stan na linii D/C (dane do pamięci ram lub instrukcja sterująca); lcd_clear() - funkcja zapisuje zerami całą pamięć RAM wyświetlacza wykorzystująć funkcję lcd_write_byte(); lcd_text() - funkcja parsuje ciąg znaków szukając odpowiednika każdego znaku w tablicy font[]. Tablica font zawiera wzory znaków ASCII gotowe do kopiowania do pamięci wyświetlacza. Niestety wyświetlacz nie posiada trybu tekstowego; my_write() - funckja kopiuje otrzymany ciąg znaków z przestrzeni użytkownika do bufora, następnie za pomocą lcd_text() wyświetla je na wyświetlaczu; my_read() - funckja kopiuje bufor do przestrzeni użytkownika; nokia_disp_exit(void) – funckja "odmapowuje" pamięć która była zajęta przez mapowanie na nią rejestrów obsługi SPI. 3. Wykorzystanie sterownika Aby wykorzystać sterownik należy go skompilować (polecenie make) załadować poleceniem insmod, odczytać przydzielony numer "Major" poleceniem dmesg oraz utworzyć plik urządzenia znakowego poleceniem mknod. W plikach źródłowych znajduje się również prosty program testujący sterownik (test.c), który korzysta z pliku my_dev z folderu z programem. 4. Efekty pracy