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

[Cortex M3][SPI]Autmatyczna kontrola linii CS

30 Wrz 2010 10:38 1852 6
  • Poziom 23  
    Cześć
    Skonfigurowałem sobie SPI w STM32 :

    Code:

    SPI2->CR1|=SPI_CR1_MSTR|(SPI_CR1_BR&(0b111<<3))|SPI_CR1_SPE|SPI_CR1_DFF;
    SPI2->CR2|=SPI_CR2_SSOE;


    linia NSS skonfigurowana jako Alternate Function push pull.

    I teraz myślałem że linia NSS będzie przywierana do masy na czas transmisji a na niej jest cały czas 0, nie wiem czy moja konfiguracja jest zła czy źle rozumiem działanie tego pinu w trybie out. W każdym razie chciałbym żeby służyła jako CS dla odbiornika. Czy da się to zrobić sprzętowo czy trzeba programowo sterować (co by było trochę dziwne bo jak pod to potem DMA podpiąć) ?
  • Poziom 35  
    Źle rozumiesz prace tego pinu!

    Nie ma takiego SPI gdzie CSy będą same chodzić w górę i w dół w zależności od tego czy nadajesz czy nie...
    CSem musisz machać sam!!. Przeciez piszac kod dokladnie wiesz, kiedy rozpoczynasz transakcje po SPI, więc cięzko tam jedna linijka kodu tego CSa ręcznie ustawić do masy?...
    Ustaw ten pin jako standardowe wyjscie (w CRx ustaw na odpowiednim nibblu trójkę) i machaj pinem programowo z wykorzystaniem rejestrów BSRR i BRR...

    Druga kwestia, to DMA....
    Może tak?
    - [wylacz obsługe DMA w samym SPI]
    - [przygotuj bufory]
    - [skonfiguruj DMA i wlacz]
    - [ustaw CS w niski]
    - [włącz obsługę DMA w SPI]

    ...to tyle.

    CSa musisz kiedyś też podnosić - najlepsze miejsce na to jest przerwanie od DMA na Transfer Complete, bit TCIF. Oczywiscie to przerwanie musisz włączyć w konfiguracji DMA.
    Uzyj do tego przerwania od DMA RX, bo TX wystepuje jeszcze w trakcie wysuwania ostatnich bitów z rejestru przesuwnego SPI, i jak podniesiesz w tym momencie CSa to masz whiskas nie dane...
  • Użytkownik usunął konto  
  • Poziom 23  
    Tylko czy CS nie dzwiga się po każdym wysłanym bajcie. Wg. przebiegów transmisji tak to wygląda.
  • Użytkownik usunął konto  
  • Poziom 22  
    Cytat:
    Źle rozumiesz prace tego pinu!

    Nie ma takiego SPI gdzie CSy będą same chodzić w górę i w dół w zależności od tego czy nadajesz czy nie...


    Phi... no ładnie takie herezje głosić.
    Ja bym powiedział, ze nie ma takiego SPI gdzie CSy nie będą same chodzić. Oczywiście SP w poważnym mikrokontrolerze, w którym jest DMA dla SPI.
    A propos DMA to fajnie to wymyśliłeś tylko gdzie tu główna idea DMA czyli praca bez udziału CPU?

    A co do STM to w user manualu RM0008 na stronie 655 jest napisane jak byk:
    Cytat:
    NSS management by hardware or software...

    Na dwóch następnych stronach jest opisane co i jak.
    Poza tym w innym przypadku po kiego grzyba byłby wyróżniany pin jako CS czy tam NSS?
  • Poziom 23  
    Z tą automatyczną kontrolą się jeszcze będę bawił, a przy okazji mam jedno pytanie :) Jak to jest z tą flagą RXNE ?

    mam :
    Code:

      while (!(SPI1->SR&SPI_SR_RXNE));
      Data = SPI1->DR;


    i żeby poprawnie działało muszę dać opóźnienie pomiędzy while-m a odbiorem danej inaczej się krzaczy.