Uart w trybie spi
- tomaszdko
- Posty: 73
- Rejestracja: 06 gru 2018, 19:58
Uart w trybie spi
Ogarniam temat wyświetlania obrazu na monitorze VGA (proste linie idzie bez problemu zrobić ale pojedyncze piksele to już inna bajka , ograniczenia czasowe) i potrzebuje mieć możliwość wysyłania szybko duże ilości danych i to po DMA .
Chciałem zaprząc SPI ale okazuje się że przy Xmega to nie jest takie oczywiste https://www.elektroda.pl/rtvforum/topic3041894.html
Jeśli w dyskusji mówi Leon i TMF to raczej nie ma co się spierać . Wychodzi z tego że trzeba użyć UART w trybie SPI . Jeśli masz Bartek jakiś konfig jak ustawić na to to by było miło . Na forum bascom nie znalazłem .
Nawet odpaliłem STM32f1 w arduino (adc,uart,miganie diodą) ....za stary chyba jestem i za duże przyzwyczajenie by zmieniać środowisko z bascom na arduino (szlaczki,klamry,plusy,minusy ehhh) .
Chciałem zaprząc SPI ale okazuje się że przy Xmega to nie jest takie oczywiste https://www.elektroda.pl/rtvforum/topic3041894.html
Jeśli w dyskusji mówi Leon i TMF to raczej nie ma co się spierać . Wychodzi z tego że trzeba użyć UART w trybie SPI . Jeśli masz Bartek jakiś konfig jak ustawić na to to by było miło . Na forum bascom nie znalazłem .
Nawet odpaliłem STM32f1 w arduino (adc,uart,miganie diodą) ....za stary chyba jestem i za duże przyzwyczajenie by zmieniać środowisko z bascom na arduino (szlaczki,klamry,plusy,minusy ehhh) .
- niveasoft
- Posty: 1219
- Rejestracja: 17 sie 2015, 12:13
- Kontakt:
Re: Uart w trybie spi
Ciekawostką jest że gdyby nie eamail z powiadomieniem to bym nie wiedział, że forum działa.
Coś mi sie musiało stac z moim DNS bo już przez VPNa się łączy bez problemu. Tak jakby DNS od PLAY nie znał mojej strony![Duże szczęście, bardzo dobry humor :D](./images/smilies/icon_e_biggrin.gif)
Co do tego trybu to on chyba nawet w zwykłych AVR`ach musiał być w Bascom ustawiany po rejestrach tak że tu tylko datasheet pomoże.
To najczesciej nie jest skomplikowane tylko trzeba przetrzeć szlak.
Wątek z Elektrody sobie poczytam później bo tam tego trochę jest.
Coś mi sie musiało stac z moim DNS bo już przez VPNa się łączy bez problemu. Tak jakby DNS od PLAY nie znał mojej strony
![Duże szczęście, bardzo dobry humor :D](./images/smilies/icon_e_biggrin.gif)
Co do tego trybu to on chyba nawet w zwykłych AVR`ach musiał być w Bascom ustawiany po rejestrach tak że tu tylko datasheet pomoże.
To najczesciej nie jest skomplikowane tylko trzeba przetrzeć szlak.
Wątek z Elektrody sobie poczytam później bo tam tego trochę jest.
- tomaszdko
- Posty: 73
- Rejestracja: 06 gru 2018, 19:58
Re: Uart w trybie spi
Trochę pogrzebałem i udało się odpalić UART w trybie SPI sprzężone z DMA .
Moja wina była w dwóch miejscach . Pierwsze ustawienie trigera dla DMA
Adres bazowy dla UART C1 to 0x4e i powinno się dodać 1 czyli 0x4f a ja nie wiem czemu wpisywałem 0x4d .
Następna sprawa to trzeba port C ustawić jako wyjście .
SPI BAUD 500000 i UART BAUD 115200 działają dobrze w tym samym czasie :
![Obrazek](SPI.JPG)
Nie zmienia to faktu dlaczego nie idzie ustawić samego SPI z DMA.
Moja wina była w dwóch miejscach . Pierwsze ustawienie trigera dla DMA
Adres bazowy dla UART C1 to 0x4e i powinno się dodać 1 czyli 0x4f a ja nie wiem czemu wpisywałem 0x4d .
Następna sprawa to trzeba port C ustawić jako wyjście .
SPI BAUD 500000 i UART BAUD 115200 działają dobrze w tym samym czasie :
Nie zmienia to faktu dlaczego nie idzie ustawić samego SPI z DMA.
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
- tomaszdko
- Posty: 73
- Rejestracja: 06 gru 2018, 19:58
Re: Uart w trybie spi
Pogrzebałem więcej i odpaliłem SPI z DMA .
Problemem jest założenie że triger ma być od SPI . SPI jest miejscem docelowym a triger ma być EVENT_SYSTEM , który zaprzęgnięty jest np pod TIMER .
Timer przeładuje się co ustalony czas a to uruchamia EVENT . Adres bazowy dla EVENT to &H01 .Właśnie ten adres wpisujemy do trigera DMA .
Oczywiście TIMER trzeba tak ustawić by nie za szybko się przeładował i odpalał EVENT bo SPI nie wyrobi się z przesyłąniem .
Problemem jest założenie że triger ma być od SPI . SPI jest miejscem docelowym a triger ma być EVENT_SYSTEM , który zaprzęgnięty jest np pod TIMER .
Timer przeładuje się co ustalony czas a to uruchamia EVENT . Adres bazowy dla EVENT to &H01 .Właśnie ten adres wpisujemy do trigera DMA .
Oczywiście TIMER trzeba tak ustawić by nie za szybko się przeładował i odpalał EVENT bo SPI nie wyrobi się z przesyłąniem .
Code: [Zaznacz cały] [Rozwiń/Zwiń]
- '*******************************************************************************************************************************************
- '*** SPIc **********************************************************************************************************************************
- '*******************************************************************************************************************************************
- ' PORTC C.4-SS C.5-MOIS C.6-MISO C.7-SCK
- CONFIG SPIC = HARD , MASTER = YES , MODE = 0 , CLOCKDIV = CLK8 , DATA_ORDER = MSB , SS = AUTO
- OPEN "SPIc" FOR BINARY AS #10
- '******************************************************************************************************************************************
- '*** TCC0 *********************************************************************************************************************************
- '******************************************************************************************************************************************
- CONFIG TCC0 = NORMAL , PRESCALE = 1
- Tcc0_per = 80
- '******************************************************************************************************************************************
- '*** EVENT_SYSTEM *************************************************************************************************************************
- '******************************************************************************************************************************************
- CONFIG EVENT_SYSTEM = DUMMY , MUX0 = TCC0_OVF
- '******************************************************************************************************************************************
- '*** DMA0 *********************************************************************************************************************************
- '******************************************************************************************************************************************
- CONFIG DMA = ENABLED , DOUBLEBUF = DISABLED , CPM = RR
- CONFIG DMACH0 = DISABLED , BURSTLEN = 1 , CHANRPT = ENABLED , TCI = OFF , EIL = OFF , SINGLESHOT = ENABLED , SAR = BLOCK , _
- SAM = INC , DAR = BLOCK , DAM = FIXED , TRIGGER = &H01 , BTC = 5 , REPEAT = 0 , SADR = VARPTR(TABLICA(1)) , DADR = VARPTR(spic_data)
- Dma_ch0_ctrla.7 = 1
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
- niveasoft
- Posty: 1219
- Rejestracja: 17 sie 2015, 12:13
- Kontakt:
Re: Uart w trybie spi
Dziś nie mam do tego głowy bo nad czymś pracuję i obiecałem do jutra coś oddać.
W starych AVR było przerwanie w SPI od zakończenia wysyłania bajtu. To nie może generowac zdarzenia?
W Helpie do Config Event Mux nic nie ma. Może to trzeba doczytać![Duże szczęście, bardzo dobry humor :D](./images/smilies/icon_e_biggrin.gif)
W starych AVR było przerwanie w SPI od zakończenia wysyłania bajtu. To nie może generowac zdarzenia?
W Helpie do Config Event Mux nic nie ma. Może to trzeba doczytać
![Duże szczęście, bardzo dobry humor :D](./images/smilies/icon_e_biggrin.gif)
- tomaszdko
- Posty: 73
- Rejestracja: 06 gru 2018, 19:58
Re: Uart w trybie spi
Nie zawracaj sobie głowy . Już i tak w miarę rozkminiłem co i jak z połączeniem SPI z DMA .
Stare avr-y nie mają DMA więc by poległy z masą danych i wyrobieniem się w czasie a trzeba dodać też że chcemy by procek coś więcej robił niż wysyłał.
Stare avr-y nie mają DMA więc by poległy z masą danych i wyrobieniem się w czasie a trzeba dodać też że chcemy by procek coś więcej robił niż wysyłał.
- niveasoft
- Posty: 1219
- Rejestracja: 17 sie 2015, 12:13
- Kontakt:
Re: Uart w trybie spi
Nie czytałem tego wątku na Elektrodzie z braku czasu, ale teraz z ciekawosci za tym przerwaniem zajrzałem do noty i od razu napisali ![Duże szczęście, bardzo dobry humor :D](./images/smilies/icon_e_biggrin.gif)
![Duże szczęście, bardzo dobry humor :D](./images/smilies/icon_e_biggrin.gif)
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
- tomaszdko
- Posty: 73
- Rejestracja: 06 gru 2018, 19:58
Re: Uart w trybie spi
Bartek ...jak zrobić by przesyłać bajty przez SPI lub polecenie SHIFTOUT w taki sam sposób jak przez UART .
Kiedy wysyłam po SPI to przebieg wygląda tak i na monitorze jest kicha: a efekt na monitorze jest taki :/ Kiedy wysyłam zmienna przez UART to wygląda tak i to jest ok bo nie ma przerw między pojedyńczymi bitami w zmiennej WORD.
Tyle że nie mogę użyć UART bo jest zbyt wolny i drastycznie spada rozdzielczość obrazu. Najlepiej to by mnie interesowało jak wysłać ramkę bitów np: 200 .
Jak zrobić taką ramkę i nie może być tych przerw między bitami.
Kiedy wysyłam po SPI to przebieg wygląda tak i na monitorze jest kicha: a efekt na monitorze jest taki :/ Kiedy wysyłam zmienna przez UART to wygląda tak i to jest ok bo nie ma przerw między pojedyńczymi bitami w zmiennej WORD.
Tyle że nie mogę użyć UART bo jest zbyt wolny i drastycznie spada rozdzielczość obrazu. Najlepiej to by mnie interesowało jak wysłać ramkę bitów np: 200 .
Jak zrobić taką ramkę i nie może być tych przerw między bitami.
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
- tomaszdko
- Posty: 73
- Rejestracja: 06 gru 2018, 19:58
Re: Uart w trybie spi
Code: [Zaznacz cały] [Rozwiń/Zwiń]
- dim ll as word :ll=61680':ll=&B1111_0000_1111_0000
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.