diff options
Diffstat (limited to 'can.c')
-rw-r--r-- | can.c | 24 |
1 files changed, 16 insertions, 8 deletions
@@ -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); } |