Changeset 250
- Timestamp:
- 10/21/08 17:09:28 (3 years ago)
- Location:
- trunk/electronics/avr/can
- Files:
-
- 3 modified
Legend:
- Unmodified
- Added
- Removed
-
trunk/electronics/avr/can/cannet.c
r236 r250 34 34 int8_t send_canmsg(canmsg_t *msg) 35 35 { 36 uint8_t i; 37 uint8_t reg; 36 uint8_t stat; 37 uint8_t rts; 38 uint8_t txbuf; 38 39 uint8_t hdrbuf[4]; 39 40 40 /* TODO: rewrite this to use load tx buffer */ 41 for (i = TXB0CTRL; i <= TXB0CTRL + 0x20; i += 0x10) { 42 mcp_read(i, ®, 1); 43 if ((reg & (1 << 3)) == 0) { 41 stat = mcp_read_stat(); 42 txbuf = 0; 43 rts = 0; 44 45 /* See fig. 12-8 in MCP2515 datasheet. */ 46 rts |= !!(stat & (1 << 2)); 47 rts |= !!(stat & (1 << 4)) << 1; 48 rts |= !!(stat & (1 << 6)) << 2; 44 49 45 hdr2buf(&msg->hdr, hdrbuf); 46 mcp_write(i + 1, hdrbuf, 4); 47 reg |= 1 << 3; 48 mcp_write_byte(i, reg); 49 mcp_write_byte(i + 5, msg->dlc); 50 mcp_write(i + 6, msg->data, msg->dlc); 51 return 0; 52 } 50 if (rts == 7) 51 return -1; 52 53 if ((rts & 1) == 0) { 54 txbuf = TXBUF0; 55 rts |= 1; 56 } else if ((rts & 2) == 0) { 57 txbuf = TXBUF1; 58 rts |= 2; 59 } else { 60 txbuf = TXBUF2; 61 rts |= 4; 53 62 } 54 63 55 return -1; 64 hdr2buf(&msg->hdr, hdrbuf); 65 66 mcp_load_txbuf(txbuf, hdrbuf, 4); 67 mcp_load_txbuf(txbuf + 1, msg->data, msg->dlc); 68 mcp_rts(rts); 69 70 return 0; 56 71 } 72 57 73 58 74 /* rxbuf is the address of RXBnCTRL */ -
trunk/electronics/avr/can/mcp.c
r233 r250 39 39 addr &= 0x03; 40 40 clrbit(CSP, CS); 41 spi_send(MCPRXBUF | ( addr<< 1));41 spi_send(MCPRXBUF | ((addr & 0x03) << 1)); 42 42 for (i = 0; i < nbuf; i++) { 43 43 buf[i] = spi_recv(); … … 74 74 addr &= 0x07; 75 75 clrbit(CSP, CS); 76 spi_send(MCPTXBUF | addr);76 spi_send(MCPTXBUF | (addr & 0x07)); 77 77 for (i = 0; i < nbuf; i++) { 78 78 spi_send(buf[i]); -
trunk/electronics/avr/can/mcp.h
r233 r250 65 65 66 66 67 /* for mcp_read_rxbuf 68 * D suffix is data only 69 */ 70 enum { 71 RXBUF0 = 0, 72 RXBUF0D, 73 RXBUF1 = 2, 74 RXBUF1D, 75 }; 76 77 /* For mcp_load_txbuf */ 78 enum { 79 TXBUF0 = 0, 80 TXBUF0D, 81 TXBUF1, 82 TXBUF1D, 83 TXBUF2, 84 TXBUF2D, 85 };

