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