summaryrefslogtreecommitdiff
path: root/can.c
diff options
context:
space:
mode:
Diffstat (limited to 'can.c')
-rw-r--r--can.c24
1 files changed, 16 insertions, 8 deletions
diff --git a/can.c b/can.c
index 706fdb3..16b66a0 100644
--- a/can.c
+++ b/can.c
@@ -135,10 +135,15 @@ static void can_send(uint32_t daddr, uint8_t len, uint8_t *data)
}
#ifndef R0KET
+union {
+ uint8_t b[4];
+ uint32_t u;
+} can_rx_addr;
+uint8_t can_rx_dlc, can_rx_data[8];
+
static void can_rxh(uint8_t buffer)
{
- uint8_t dlc, c, rtr;
- uint32_t addr;
+ uint8_t c, byte;
if (buffer)
uart_puts("can: RX1IF\n");
@@ -146,17 +151,20 @@ static void can_rxh(uint8_t buffer)
uart_puts("can: RX0IF\n");
spi_ss(0);
spi_wrrd(0x90 + 0x04 * buffer);
- addr = 0;
-#define rdaddr() c = spi_wrrd(0xff); uart_puthex(c); addr <<= 8; addr |= c
+ c = 0;
+#define rdaddr() byte = spi_wrrd(0xff); uart_puthex(byte); can_rx_addr.b[c++] = byte
rdaddr();
rdaddr();
rdaddr();
rdaddr();
- dlc = spi_wrrd(0xff);
- uart_puthex(dlc);
+ can_rx_dlc = spi_wrrd(0xff);
+ uart_puthex(can_rx_dlc);
uart_puts("\n");
- for (c = 0; c < (dlc & 0x0f); c++)
- uart_puthex(spi_wrrd(0xff));
+ for (c = 0; c < (can_rx_dlc & 0x0f); c++) {
+ byte = spi_wrrd(0xff);
+ can_rx_data[c] = byte;
+ uart_puthex(byte);
+ }
uart_puts("\n");
spi_ss(1);
}