diff options
author | David Lamparter <equinox@diac24.net> | 2012-06-20 14:22:16 +0200 |
---|---|---|
committer | David Lamparter <equinox@diac24.net> | 2012-06-20 14:22:16 +0200 |
commit | 0c7bebea1bd05a95d2bb3e04ecb2e44792d6f174 (patch) | |
tree | 021c0ffc52f7d9cf710975b8da37d338dfa8c9c7 /can.c | |
parent | d58959c353f8e70b4b057ce8ba2907b52f6d28b7 (diff) |
light: CAN RX
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); } |