Forum: Compiler & IDEs Probleme mit SW SPI (aus Atmel appnote 320)


von Nils (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich habe folgendes Problem mit der Implementierung eines SW SPI's 
basierend auf der Appnote 320 von Atmel: Beschreibe ich ein Register des 
Slave (bei mir MPC2515) und lese es direkt danach wieder aus, bekomme 
ich einen Wert der doppelt so groß ist wieder zurück. Der Interpreter 
des Logicanalysers zeigt allerdings den richtigen Wert an. Wird da 
irgendein Register in der Assembler Routine einmal zu viel geschiftet?

Hier der Aufruf in der Funktion:
1
void mcp2515_write_register(const uint8_t address, uint8_t data )
2
{
3
    spi_enable_mcp2515();
4
    spi_putc(SPI_WRITE);
5
    spi_putc(address);
6
    spi_putc(data);
7
    spi_disable_mcp2515();
8
}
9
10
uint8_t mcp2515_read_register(const uint8_t address)
11
{
12
    uint8_t ret;
13
14
    spi_enable_mcp2515();
15
    spi_putc(SPI_READ);
16
    spi_putc(address);
17
    ret = spi_putc(0x00);
18
    spi_disable_mcp2515();
19
20
    return ret;
21
}
22
23
uint8_t i;
24
mcp2515_write_register( MCP_CANCTRL, 15);
25
i = mcp2515_read_register( MCP_CANCTRL);
26
usart_write ("i: %i\r\n",i);

i enthält nach dem aufruf den Wert 30

Hat jemand irgendwelche Ideen?

Vielen Dank!

Gruß

Nils

von Nils (Gast)


Angehängte Dateien:

Lesenswert?

Hier nochmal der Screenshot des LA...

von Nils (Gast)


Lesenswert?

Problem gelöst!

Die MISO Leitung musste zur high flanke eingelesen werden... manchmal 
hilft es den Kram einfach aufzuschreiben :)

Gruß

Nils

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.