Witam.
Piszę właśnie program, którego zadaniem jest pobranie 1 klatki (zrobienie zdjęcia) z kamery MT9D111 (nota katalogowa: http://www.dragonwake.com/download/camera/MT9D111/mt9d111_rev5.pdf ) Klatki z kamery będzie pobierał mikrokontroler STM32F429, taktowany częstotliwością 180MHz.
Wzoruję się na informacjach zawartych na stronie: http://www.stm32.eu/node/307
Napisałem podstawowe funkcje, konfigurujące:
- PORTY GPIO, wykorzystane do komunikacji z kamerą:
- RCC (dołączenie sygnałów taktujących do peryferii)
- układ interfejsu kamery DCMI oraz DMA:
- układ przerwań NVIC
- oraz układ I2C do wysyłania ustawień do kamery:
Później, w programie głównym, wywołuje powyższe funkcje konfigurujące:
Następnie, sprawdzam, czy kamera jest podłączona i inicjalizuję kamerę:
Jeżeli chodzi o funkcję inicjalizującą kamerę i inne funkcje związane z kamerą - są one w osobnym pliku i przedstawiają się tak:
Teraz, gdybym chciał wykonać zdjęcie, wywołuję w pętli głównej funkcję wykonaj_foto():
Czyli w tym momencie, po wywołaniu funkcji wykonaj_foto(), układ DMA powinien wysłać dane do RAMU - do tablicy, zdefiniowanej wcześniej w programie:
do której DMA powinien wysyłać dane z DCMI, jak zostało skonfigurowane w 3 funkcji w poście (czyli DCMI_Config() ):
Tablica ma rozmiar 9600, ponieważ będą przesyłane obrazy o rozdzielczości (tak ustaliłem) 160 x 120 pikseli, w formacie 565RGB (czyli po 2B na piksel). Wynika z tego, że potrzebuję 160*120*2 = 38 400 bajtów w tablicy. Każda komórka tablicy ma 4B, więc potrzebuję 38 400 / 4 - 9600 komórek typu uint32.
Teraz chciałbym zapytać, co robię źle... Program, po wgraniu do mikrokontrolera nie działa. Efektem wywołania funkcji robiącej zdjęcie powinna być zapełniona tablica bufor_RAM_danych_obrazka, jednak tak nie jest. Czym to może być spowodowane?
Czy jest może źle układ DMA skonfigurowany? - mam wątpliwości w miejscach:
Piszę właśnie program, którego zadaniem jest pobranie 1 klatki (zrobienie zdjęcia) z kamery MT9D111 (nota katalogowa: http://www.dragonwake.com/download/camera/MT9D111/mt9d111_rev5.pdf ) Klatki z kamery będzie pobierał mikrokontroler STM32F429, taktowany częstotliwością 180MHz.
Wzoruję się na informacjach zawartych na stronie: http://www.stm32.eu/node/307
Napisałem podstawowe funkcje, konfigurujące:
- PORTY GPIO, wykorzystane do komunikacji z kamerą:
Kod: C / C++
- RCC (dołączenie sygnałów taktujących do peryferii)
Kod: C / C++
- układ interfejsu kamery DCMI oraz DMA:
Kod: C / C++
- układ przerwań NVIC
Kod: C / C++
- oraz układ I2C do wysyłania ustawień do kamery:
Kod: C / C++
Później, w programie głównym, wywołuje powyższe funkcje konfigurujące:
Kod: C / C++
Następnie, sprawdzam, czy kamera jest podłączona i inicjalizuję kamerę:
Kod: C / C++
Jeżeli chodzi o funkcję inicjalizującą kamerę i inne funkcje związane z kamerą - są one w osobnym pliku i przedstawiają się tak:
Kod: C / C++
Teraz, gdybym chciał wykonać zdjęcie, wywołuję w pętli głównej funkcję wykonaj_foto():
Kod: C / C++
Czyli w tym momencie, po wywołaniu funkcji wykonaj_foto(), układ DMA powinien wysłać dane do RAMU - do tablicy, zdefiniowanej wcześniej w programie:
Kod: C / C++
do której DMA powinien wysyłać dane z DCMI, jak zostało skonfigurowane w 3 funkcji w poście (czyli DCMI_Config() ):
Kod: C / C++
Tablica ma rozmiar 9600, ponieważ będą przesyłane obrazy o rozdzielczości (tak ustaliłem) 160 x 120 pikseli, w formacie 565RGB (czyli po 2B na piksel). Wynika z tego, że potrzebuję 160*120*2 = 38 400 bajtów w tablicy. Każda komórka tablicy ma 4B, więc potrzebuję 38 400 / 4 - 9600 komórek typu uint32.
Teraz chciałbym zapytać, co robię źle... Program, po wgraniu do mikrokontrolera nie działa. Efektem wywołania funkcji robiącej zdjęcie powinna być zapełniona tablica bufor_RAM_danych_obrazka, jednak tak nie jest. Czym to może być spowodowane?
Czy jest może źle układ DMA skonfigurowany? - mam wątpliwości w miejscach:
Kod: C / C++