W książce Tomasza Francuza "AVR Praktyczne projekty" znalazłem bardzo przyjemny sposób na użycie USART w XMEGA posługując się fprintf lub fscanf.
Niestety po przejściu na DMA okazało się, że nie da się tak łatwo zastąpić fprintf przy użyciu funkcji wysyłającej dane do bufora i dalej przez DMA do komputera.
Znalazłem inny przykład w sieci z wykorzystanie ASF do wysyłania danych przez DMA. Poniżej zamieszczam uzyskany kod:
Brak stosowania opóźnień powoduje oczywiście nadpisywanie wysyłanych tekstów lub usuwanie pewnych ich fragmentów. Czegoś jeszcze nie włączyłem bo na drugi port USART nie są wysyłane napisy.
Próbowałem przerobić program z książki (usart-DMA) tak by używać dwóch kanałów DMA 0 i 1 do obsługi wysyłania danych przez USART. Dodatkowo chciałem obsługiwać przerwanie od USARTC i jeśli zostanie przesłany znak "/" uaktywnić odczyt komendy z USARTC. Niestety po próbach uzyskałem program który wyświetla pierwszy napis na USARTC, nic nie wysyła na USARTF i blokuje następne napisy.
Chciał bym uzyskać prosty kod który prześle napisy na USARTC i F używając DMA. Czy istnieje jakiś sposób na użycie fprintf i jednocześnie bufora tak by obsłużyć DMA?
Nie wiem czy to jest w ogóle możliwe bo fprint musi mieć zdefiniowaną funkcję wysyłającą tekst po jednym znaku. Nie wiem więc czy dało by się to połączyć z buforem który przecież musi dostać odrazu cały tekst.
Dzisiaj jeszcze do tego usiądę i jak mi się coś uda napisać to zamieszczę kod, ale chętnie przyjmę dowolną pomoc.
Niestety po przejściu na DMA okazało się, że nie da się tak łatwo zastąpić fprintf przy użyciu funkcji wysyłającej dane do bufora i dalej przez DMA do komputera.
Znalazłem inny przykład w sieci z wykorzystanie ASF do wysyłania danych przez DMA. Poniżej zamieszczam uzyskany kod:
Kod: C / C++
Brak stosowania opóźnień powoduje oczywiście nadpisywanie wysyłanych tekstów lub usuwanie pewnych ich fragmentów. Czegoś jeszcze nie włączyłem bo na drugi port USART nie są wysyłane napisy.
Próbowałem przerobić program z książki (usart-DMA) tak by używać dwóch kanałów DMA 0 i 1 do obsługi wysyłania danych przez USART. Dodatkowo chciałem obsługiwać przerwanie od USARTC i jeśli zostanie przesłany znak "/" uaktywnić odczyt komendy z USARTC. Niestety po próbach uzyskałem program który wyświetla pierwszy napis na USARTC, nic nie wysyła na USARTF i blokuje następne napisy.
Chciał bym uzyskać prosty kod który prześle napisy na USARTC i F używając DMA. Czy istnieje jakiś sposób na użycie fprintf i jednocześnie bufora tak by obsłużyć DMA?
Nie wiem czy to jest w ogóle możliwe bo fprint musi mieć zdefiniowaną funkcję wysyłającą tekst po jednym znaku. Nie wiem więc czy dało by się to połączyć z buforem który przecież musi dostać odrazu cały tekst.
Dzisiaj jeszcze do tego usiądę i jak mi się coś uda napisać to zamieszczę kod, ale chętnie przyjmę dowolną pomoc.