Cześć wszystkim:)
Mam taki problem, bawię się czujnikem BMP280 i piszę do niego swoją własną bibliotekę. Czujnik ten może rozmawiać z uP przez dwa protokoły I2C oraz SPI. Bibliotekę chcę tak przygotować, aby wystarczyło zmienić dwa parametry i na ich podstawie automatycznie kompilował się kod z obsługą SPI lub I2C. Tyle wstępu teraz czas na opis problemu
Mamy fragment funkcji, za pomcą któej konfiguruję parametry pracy czujnika. Po zapisaniu parametrów (wywołąnie funkcji BMP280_write_data) chcę je odczytać (wywołanie funkcji BMP280_read_data) z czujnika i sprawdzić czy poprawnie się zapisały:
język c Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Funkcja BMP280_read_data jest sparametryzowana i w zalożności od stanu zmiennych BMP280_I2C oraz BMP280_SPI kompilowana jest odpowiednia funkcja do obsługi magistra
język c Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
A tak wygląda funkcja odczytująca odebrane dane po SPI
język c Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
I teraz tak, w funkcji BMP280_Conf (pierwsza u samej góry) w linijce trzynastej przekazuje adres pierwszego elementu tablicy buf do funkcji BMP280_read_data - i moim życzeniem jest, aby do tej tablicy trafiły odczytane wartości z magistrali SPI. Funkcja BMP280_read_data przekazuje ten nr rejestru (adres pierwszego elementu tablicy buf) do funkcji SPI_ReceiveData, a w niej dane otrzymane po SPI zapisuję do wskaźnika Dane - linijka 13. Niestety, w efekcie takiej incepscji wskaźnikó moja tablica buf ma wartości "0".
Co ciekawe, incepcja wskaźnikowa działa poprawnie w przypadku podania adresu uni (patrz linijka 14 w funkcji BMP280_Conf ). W uni poprawnie lądują wszystkie wartości odczytane z SPI.
Może mi ktoś podpowie gdzie robię błąd ?
|