Gast
#318601
Folgende Funktion zum Auslesen eines CAN-Transceivers soll in ASM
geschrieben werden: Mir ist nur die erste Zeile unklar:
"uint8_t data;"
Was bedeutet das?
Unten ist mein ASM-Coder, der alles beinhaltet nur diese erste Zeile
nicht.
----------------------------------------------------------------
uint8_t mcp2515_read_register(uint8_t adress)
{
uint8_t data;
/* CS low */
PORTB &= ~(1<<SPI_CS);
spi_putc(SPI_READ);
spi_putc(adress);
data = spi_putc(0xff); // Dummy Byte
/* CS high */
PORTB |= (1<<SPI_CS);
return data;
}
-----------------------------------------------------------------
uint8_t spi_putc( uint8_t data )
{
/* Sendet ein Byte */
SPDR = data;
/* Wartet bis Byte gesendet wurde */
while( !( SPSR & (1<<SPIF) ) )
;
return SPDR; // release SPIF
}
-----------------------------------------------------------------
ASSEMBLER:
getbyte:
; /SS low
cbi PortB, 4
; READ COMMAND
ldi temp, READ
out SPDR, temp
wait_spi_g1:
sbis SPSR, SPIF ; Transmission complete?
rjmp wait_spi_g1
in temp, SPDR ; release SPIF here
;ADDRESS
out SPDR, address
wait_spi_g2:
sbis SPSR, SPIF ; Transmission complete?
rjmp wait_spi_g2
in temp, SPDR ; release SPIF here
; DUMMY BYTE
ldi temp, 0b10101010
out SPDR, temp
wait_spi_g3:
sbis SPSR, SPIF ; Transmission complete?
rjmp wait_spi_g3
; RESULT:
in temp, SPDR
; /SS high
sbi PortB, 4
ret