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

[AVR][C] - komunikacja przez SPI

PietrekDer 08 Sie 2008 16:41 2593 2
REKLAMA
  • #1 5420822
    PietrekDer
    Poziom 13  
    Witam
    Potrzebuję skomunikować się z układem MCP2515 przez SPI, czytam dokumentację MCP2515, jak i opis transmisji ze strony ATmega8 i kilka rzeczy nie daje mi spokoju. Mianowicie:

    Układ mega8 jest Masterem i on zapewnia sygnał SCK. Sygnał SS (pin jako wyjście) ustawiam "ręcznie" tuż przed zapisem danej do SPDR, ale sygnał zegarowy nie trwa przez cały czas niskiego poziomu SS, ale tylko podczas wysyłania danych, a tuż po wysłaniu np 2 bajtów, potrzeba utrzymać dalej sygnał zegarowy aby układ MCP2515 mógł odesłać pożądane dane (rysunek) i właśnie to nie daje mi spokoju, jak utrzymać ten sygnał zegarowy :?:

    Tak wygląda fragment kodu konfiguracja SPI oraz wysyłanie 1B danych:
    
    		//konfiguracja
    		SPCR |= 1<<SPE | 1<<MSTR | 1<<SPR1 | 1<<SPR0;
    
    			//Transmisja danej
    			SS_low();	//makro SS = 0
    			SPDR = data1;	//ładuj daną
    			while((SPSR & 1<<SPIF)==0)	//czekaj, aż SPIF osiągnie wartość 1
    			{}
    			SPIF_clr();		//wyzeruj ręcznie flagę SPIF
    			SS_high();		//SS = 1
    
  • REKLAMA
  • #3 5420886
    PietrekDer
    Poziom 13  
    No racja, przecież SPDR jest podwójnie buforowany przy odczycie danych, a przy odsyłaniu danych przez MCP nawet nieważne co występuje na SI, czyli może być cokolwiek, nietylko 0x00. Myślę że to powinno zadziałać :)

    Dodano po 2 [godziny] 36 [minuty]:

    Tak, sprawdziłem, wysyłam całą komendę oby odczytać dowolny rejestr, wysyłam dodatkowo bajt 0x00, a odbieram 0x87, czyli wartość domyślną jaką posiada rejestr CANCTRL. Dzięki za pomoc :)
REKLAMA