Uart w trybie spi

Rodzina procesorów bogatszych w wiele nowych rozwiązań i dlatego warto po nie sięgnąć.
ODPOWIEDZ
Awatar użytkownika
tomaszdko
Posty: 72
Rejestracja: 06 gru 2018, 19:58

Uart w trybie spi

Post autor: tomaszdko » 07 kwie 2024, 20:42

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) .
Awatar użytkownika
niveasoft
Posty: 1216
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: Uart w trybie spi

Post autor: niveasoft » 07 kwie 2024, 21:09

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 :D

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.
Awatar użytkownika
tomaszdko
Posty: 72
Rejestracja: 06 gru 2018, 19:58

Re: Uart w trybie spi

Post autor: tomaszdko » 08 kwie 2024, 19:40

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

Nie zmienia to faktu dlaczego nie idzie ustawić samego SPI z DMA.
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Awatar użytkownika
tomaszdko
Posty: 72
Rejestracja: 06 gru 2018, 19:58

Re: Uart w trybie spi

Post autor: tomaszdko » 08 kwie 2024, 22:31

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 .
  1. '*******************************************************************************************************************************************
  2. '*** SPIc **********************************************************************************************************************************
  3. '*******************************************************************************************************************************************
  4. ' PORTC  C.4-SS   C.5-MOIS   C.6-MISO   C.7-SCK
  5. CONFIG SPIC = HARD , MASTER = YES , MODE = 0 , CLOCKDIV = CLK8 , DATA_ORDER = MSB , SS = AUTO
  6. OPEN "SPIc" FOR BINARY AS #10
  7. '******************************************************************************************************************************************
  8. '*** TCC0 *********************************************************************************************************************************
  9. '******************************************************************************************************************************************
  10. CONFIG TCC0 = NORMAL , PRESCALE = 1
  11. Tcc0_per = 80
  12. '******************************************************************************************************************************************
  13. '*** EVENT_SYSTEM *************************************************************************************************************************
  14. '******************************************************************************************************************************************
  15. CONFIG EVENT_SYSTEM = DUMMY , MUX0 = TCC0_OVF
  16. '******************************************************************************************************************************************
  17. '*** DMA0 *********************************************************************************************************************************
  18. '******************************************************************************************************************************************
  19. CONFIG DMA = ENABLED , DOUBLEBUF = DISABLED , CPM = RR
  20. CONFIG DMACH0 = DISABLED , BURSTLEN = 1 , CHANRPT = ENABLED , TCI = OFF , EIL = OFF , SINGLESHOT = ENABLED , SAR = BLOCK , _
  21. SAM = INC , DAR = BLOCK , DAM = FIXED , TRIGGER = &H01 , BTC = 5 , REPEAT = 0 , SADR = VARPTR(TABLICA(1)) , DADR = VARPTR(spic_data)
  22. Dma_ch0_ctrla.7  = 1
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Awatar użytkownika
niveasoft
Posty: 1216
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: Uart w trybie spi

Post autor: niveasoft » 08 kwie 2024, 22:39

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ć :D
Awatar użytkownika
tomaszdko
Posty: 72
Rejestracja: 06 gru 2018, 19:58

Re: Uart w trybie spi

Post autor: tomaszdko » 08 kwie 2024, 22:58

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ł.
Awatar użytkownika
niveasoft
Posty: 1216
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: Uart w trybie spi

Post autor: niveasoft » 08 kwie 2024, 23:08

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 :D
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Awatar użytkownika
tomaszdko
Posty: 72
Rejestracja: 06 gru 2018, 19:58

Re: Uart w trybie spi

Post autor: tomaszdko » 10 kwie 2024, 19:12

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:
SHIFTOUT.JPG
a efekt na monitorze jest taki :/
1.jpg
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.
Awatar użytkownika
tomaszdko
Posty: 72
Rejestracja: 06 gru 2018, 19:58

Re: Uart w trybie spi

Post autor: tomaszdko » 10 kwie 2024, 19:13

P1050341.JPG
zmienna
  1. dim ll as word :ll=61680':ll=&B1111_0000_1111_0000
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
ODPOWIEDZ