logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[mpc555][C] QSPI i urzadzenia aktywne przy niskim CS

tysky 22 Sty 2009 22:55 2107 5
REKLAMA
  • #1 6039920
    tysky
    Poziom 13  
    Witam,

    Aktualnie zajmuję się projektem opartym na tym procesorze. Moim zadaniem jest skomunikowanie przetwornika DAC z uP.

    Przetwornik to MCP4921, a w skrócie to wygląda tak: dane są przyjmowane przy niskim stanie CS. Następnie sygnał ten musi się podnieść, żeby dane zostały zaakceptowane.

    Po ustawieniu i odpaleniu programu uP jest dobrze, oprócz jednej rzeczy. Na oscyloskopie podglądam moją transmisję: dane lecą, zegar chodzi, tylko CS chodzi odwrotnie do tego czego potrzebuję: stan wysoki, gdy przesyła dane, po przesłaniu stan niski.

    Jaki ustawić, żeby "zanegować" CS ?? Pewnie mógłbym to zrobić sprzętowo, ale nie wierze, że nie można tego zrobić programowo.
  • REKLAMA
  • #2 6039999
    Konto nie istnieje
    Poziom 1  
  • REKLAMA
  • #3 6043021
    tysky
    Poziom 13  
    Nie napisalem, ze to sprawdzilem jako pierwsze ;). Tylko, ze w przeciwnym wypadku CS, nie podnosi sie...caly czas jest niski. A dodam, ze zmieniam tylko jeden bit - ten odpowiedzialny za CS.


    Jeżeli programowałeś już na tym procku, to pewnie korzystałeś z plików nagłowkowych zapewniających dostęp do rejestrów poprzez zdefiniowane nazwy - biblioteka dostępna m.in. w Matlabie. Wszystko ustawiam używając tych nazw.
  • REKLAMA
  • #4 6043618
    Konto nie istnieje
    Poziom 1  
  • REKLAMA
  • #5 6048481
    tysky
    Poziom 13  
    Gdy moduł QSPI jest wyłączony są to piny ogólnego przenaczenia (I/O). Konfiguruję ten moduł tak, że QSPI ma kontrolę nad tymi pinami...czyli zamieniają się odpowiednio w MISO, MOSI, SDI, CS0...CS3. Jest szereg rejestrów, które umożliwiają konfigurację tego interfejsu: od prędkości po opóźnienia pomiędzy kolejnymi paczkami danych.

    Nie wiem czy zdarzyło Ci się pracować na tym modelu, ale to wygląda tak, że każde słowo, które ma być wysłane jest opisane odpowiednim poleceniem. I tak słowo do wysłania ląduje w "TRANSFER RAM", polecenie w "COMMAND RAM"

    Oto i moje słowo sterujące:
    
    	//enable 16 bits transfer
    	QSMCM.COMDRAM[0].B.BITSE = 1;
    	//chip selected remain asserted after transfer
    	QSMCM.COMDRAM[0].B.CONT = 1;
    	//delay after transfer 0 = standard
    	QSMCM.COMDRAM[0].B.DT = 0;
    	//SCK <-> CS realtion 0= standard
    	QSMCM.COMDRAM[0].B.DSCK = 0;
    	//activate chip select PCSx = 1
    	QSMCM.COMDRAM[0].B.PCS0 = 1;
    	QSMCM.COMDRAM[0].B.PCS1 = 1;
    	QSMCM.COMDRAM[0].B.PCS2 = 0;
    	QSMCM.COMDRAM[0].B.PCS3 = 0;


    Czyli prawdopodobnie źle konfiguruję QSPI lub o czymś zapomniałem, a CS raczej nie muszę czyścić.
    A w manualu nie wyczytałem, co ustawić, żeby aktywacja CS oznaczała aktywny niskim poziomem.
  • #6 6049105
    Konto nie istnieje
    Poziom 1  
REKLAMA