Witam,
wymyśliłem sobie, że dane z czujnika PMSA003 będę odczytywał UARTem z udziałem DMA.
Wygląda to zatem tak, że na poczatku:
deklaruję tablicę o rozmiarze ramki z czujnika
konfiguruję USART
konfiguruję DMA
Definiuję jeszcze funkcję odpowiedzialną za rozpoczęcie pracy DMA
I to koniec wstępu.
Następnie, w trakcie działania programu, w odpowiednim dla mnie momencie uruchamiam taką oto funkcję
Jej zadaniem jest włączenie DMA, a następnie wysłanie do czujnika PMS żądania przesłania danych - po tym zapytaniu czujnik odpowiada ramką 32-bajtową.
Na koniec obsługuję przerwanie od zakończenia transakcji DMA i program leci sobie dalej (obróbka danych itd.)
Problem polega na tym, że w trakcie debugowania okazuje się, iż dane w tablicy nie są właściwe. Ramka powinna zaczynać się od bajtów startu 0x44 i 0x4D, a wg debugera takie wartości pojawiają się też w środku tablicy - tak, jakby początek ramki z czujnika nie pokrywał się z początkiem tablicy.
I teraz mam dwa podejrzenia - albo niepoprawnie skonfigurowałem DMA i coś się źle przeładowuje albo w czasie debugowania wartości zmiennych są nieprawidłowe.
wymyśliłem sobie, że dane z czujnika PMSA003 będę odczytywał UARTem z udziałem DMA.
Wygląda to zatem tak, że na poczatku:
deklaruję tablicę o rozmiarze ramki z czujnika
Kod: C / C++
konfiguruję USART
Kod: C / C++
konfiguruję DMA
Kod: C / C++
Definiuję jeszcze funkcję odpowiedzialną za rozpoczęcie pracy DMA
Kod: C / C++
I to koniec wstępu.
Następnie, w trakcie działania programu, w odpowiednim dla mnie momencie uruchamiam taką oto funkcję
Kod: C / C++
Jej zadaniem jest włączenie DMA, a następnie wysłanie do czujnika PMS żądania przesłania danych - po tym zapytaniu czujnik odpowiada ramką 32-bajtową.
Na koniec obsługuję przerwanie od zakończenia transakcji DMA i program leci sobie dalej (obróbka danych itd.)
Kod: C / C++
Problem polega na tym, że w trakcie debugowania okazuje się, iż dane w tablicy nie są właściwe. Ramka powinna zaczynać się od bajtów startu 0x44 i 0x4D, a wg debugera takie wartości pojawiają się też w środku tablicy - tak, jakby początek ramki z czujnika nie pokrywał się z początkiem tablicy.
I teraz mam dwa podejrzenia - albo niepoprawnie skonfigurowałem DMA i coś się źle przeładowuje albo w czasie debugowania wartości zmiennych są nieprawidłowe.
