Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[STM32] SPI rejestr RD nie przyjmuje danych [?]

11 Lip 2011 23:19 2259 11
  • Poziom 9  
    Witam problem jest następujący, inicjalizacja SPI przechodzi (wydaje mi się że poprawnie). Niżej podam wartości rejestrów SPI3. Problem polega na tym że nie mogę nic wpisać do DR w interfejsie SPI, nie mam jeszcze nic podpiętego do SPI ale mam zamiar przetestować całość na modułach MMcc1100 i płytce ewaluacyjnej z STM32 na pokładzie (stm32-p107 z OLIMEXu). Próbowałem też z podpiętym modułem MMcc1100 ale tez nie działa więc zacząłem od najprostrzej rzeczy, czyli wpisania wartości do rejestru DR.


    konfiguracja SPI:
    Kod: c
    Zaloguj się, aby zobaczyć kod


    program główny:
    Kod: c
    Zaloguj się, aby zobaczyć kod


    w trakcie wykonywania pętli while(1) rejestry SPI3 mają wartości:
    SPI3_CR1 = 0x00004374
    SPI3_SR = 0x00000002 flaga TXE = 1 (czyli DR == 0)
    SPI3_DR = 0x00000000
    reszta rejestrów też jest równa 0

    Czy można wpisywać wartość do rejestru DR bez połączenia się ze SLAVE'm [?]
  • Specjalista - Mikrokontrolery
    Rejestr DR jest "specjalnej troski" - wpisując coś do niego rozpoczynasz nadawanie, odczytując go odczytujesz to co interfejs SPI odebrał wcześniej. Zapis i odczyt odwołują się fizycznie do innych elementów układu peryferyjnego. Innymi słowy - wartość odczytana != wartość wpisana (pomijamy oczywiście przypadki, że odebrałeś akurat to co wysłałeś).

    4\/3!!
  • Poziom 9  
    ale ja nie odczytuje tej wartości przez interfejs SPI tylko przez podgląd rejestrów w trakcie debugowania.
  • Specjalista - Mikrokontrolery
    Czyli odczytujesz...

    Odczyt to odczyt. To nie jest kwestia kompilatora, programu czy wyboru, tylko sprzętu.

    4\/3!!
  • Poziom 9  
    Jeszcze jedno pytanie, w interfejsie SPI kiedy zaczyna się taktowanie SCLK [?]
    Po stronie procka SPI jest MASTER, a po stronie modułu SLAVE. Na NSS daje logiczne '0' w celu otwarcia magistrali, czekam na stan niski na SO (taka jast rekomendacja ze strony TI przy wpisie do SLAVE'a), wpisuje dane do DR, na koniec odłączam magistrale przez ustawienie NSS w stan wysoki czyli logiczna '1'. W którym momencie zaczyna się taktowanie SCLK i jak się o tym MASTER dowiaduje że już teraz ma taktować SCLK. Do tej pory myślałem że to się dzieje po ustawieniu stanu niskiego na NSS ale zerowanie NSS robie programowo więc cały sterownik interfejsu SPI o tym nie wie ( [?] ).

    Wysyłanie robie w taki sposób:
    Kod: c
    Zaloguj się, aby zobaczyć kod


    nie mogę zaobserwować taktowania na lini SCLK przy wywołaniu takiej funkcji, nie wiem co robię nie tak...
  • Specjalista - Mikrokontrolery
    Po wpisaniu czegoś do rejestru DR jego zawartość kopiowana jest do rejestru przesuwnego (jeśli nie trwa inna transmisja) i wtedy rozpoczyna się rzeczywisty transfer. Szczegóły w manualu.

    Tak apropo to ustawienie flagi TXE oznacza e bufor transmisji jest pusty i NIC WIĘCEJ. Wcale nie oznacza to fizycznego końca transmisji! Ponownie polecam manual i diagramy/opisy które wszystko opisują.

    4\/3!!
  • Poziom 9  
    Ok przeczytałem manual do SPI, przeczytałem manual do modułu cc1100 i dalej mam problem. Moduł nie chce się zRESETowac przy sprzętowej obsłudze SPI, a przy programowej działa.

    funkcja resetu modulu:
    Kod: c
    Zaloguj się, aby zobaczyć kod



    SPI programowy (prosze sie nie przejmowac tymi maskami wartosc ccxxx0_SRES nie ulegnie zmianie bo wynosi 0x30 - maski zrobione do wysylania innych instrukcji)
    Kod: c
    Zaloguj się, aby zobaczyć kod


    petla while(1) w mainie
    Kod: c
    Zaloguj się, aby zobaczyć kod



    konfiguracja SPI:
    Kod: c
    Zaloguj się, aby zobaczyć kod
  • Poziom 35  
    O nieeeee, znowu FWlib!!!...

    Ja wiem że ten post nic nie wnosi, no z szczerego serca chciałbym pomóc, bo potrafię, ale mózg mówi mi "głupocie stanowcze NIE"....
  • Poziom 9  
    no to faktycznie wielkie dzieki.
  • Specjalista - Mikrokontrolery
    Pin CS masz ustawiony na Alternate Function, a skoro sterujesz nim ręcznie to powinien być zwyczajnym wyjściem. Do tego SPI masz skonfigurowane chyba na "tylko wyjście" (direction - tx), więc nic mądrego nie odbierzesz. Linii MOSI i SCK nie możesz sterować ręcznie, jeśli są ustawione jako Alternate Function. I tak dalej - ogólnie pełny chaos w Twoim kodzie.

    Nie jestem pewny, czy to wszystko, bo też nie używam tego ogłupiającego tworu zwanego górnolotnie "biblioteką".

    4\/3!!
  • Poziom 9  
    Dzieki Freddie z tym pinem CS to była faktycznie moja pomyłka, a z konfiguracja SPI próbowałem na rózne sposoby wczesniej tylko że nie wiedziałem jaka jest różnica między AF, a Out wiec i tak nie miało prawa działać. NSVINC nie każdy jest tak genialny jak Ty, niektórzy dopiero sie ucza, a to forum właśnie chyba do tego służy. Teraz już wszystko działa.

    temat uważam za zamknięty.
  • Pomocny post
    Specjalista - Mikrokontrolery
    cuber1988 napisał:
    tylko że nie wiedziałem jaka jest różnica między AF, a Out

    Alternate Function stosuje się jeśli chcesz przestawić pin na WYJŚCIE z jakiegoś układu peryferyjnego, np. wyjście PWM z timera, nadawanie z SPI, ...

    Cytat:
    NSVINC nie każdy jest tak genialny jak Ty, niektórzy dopiero sie ucza

    Chodzi po prostu o to, że warto się nauczyć operować na sprzęcie. Jeśli to opanujesz, to i z biblioteki skorzystasz jak będziesz miał taką fantazję czy potrzebę (przykładem niech będzie choć pomoc jaką dostałeś, choć ja tej biblioteki nie używałem NIGDY). Jeśli opanujesz tylko bibliotekę, to raczej na samym sprzęcie szybko nie podziałasz. Sama idea biblioteki nie jest zła czy coś, tylko po prostu akurat ta biblioteka nie jest specjalnie dobra, optymalna, wygodna czy czytelna... Wracając do wątku nauki, prościej od razu nauczyć się "dobrze" (znaczenie zależne od osobistych preferencji oczywiście) niż nauczyć się "jakoś", a potem od początku uczyć się "dobrze", bo zwykle zostaje się na etapie "jakoś". Moim (i nie tylko) zdaniem, biblioteka ta niczego specjalnie nie ułatwia - żeby cokolwiek zrobić najpierw musisz się dowiedzieć JAK (manual mikrokontrolera), a potem jeszcze trzeba dowiedzieć się jak to zrealizować z wykorzystaniem tego kodu (manual biblioteki). Jak kończą się próby ominięcia etapu pierwszego wiesz z autopsji.

    Czemu wciąż wszyscy uparcie tkwią przy jej stosowaniu? No bo "jakoś" ta biblioteka działa, w końcu uruchomi się to co trzeba, a że można lepiej, szybciej, prościej i optymalnie, to już robi się nieistotne. Ale czy o to chodzi, żeby "w końcu" "jakoś" zadziałało?

    4\/3!!