سلام خدمت اساتید محترم
لطفا این تیکه کد رو اگه ممکنه توضیح بدید که میخواد چیکار کنه
در مورد ارتباط CAN تو میکرو کنترلر avr
لطفا این تیکه کد رو اگه ممکنه توضیح بدید که میخواد چیکار کنه
در مورد ارتباط CAN تو میکرو کنترلر avr
کد:
uint8_t mcp2515_get_message(tCAN *message) { // read status uint8_t status = mcp2515_read_status(SPI_RX_STATUS); uint8_t addr; if (bit_is_set(status,6)) { // message in buffer 0 addr = SPI_READ_RX; } else if (bit_is_set(status,7)) { // message in buffer 1 addr = SPI_READ_RX | 0x04; } else { // Error: no message available return 0; } RESET(MCP2515_CS); spi_putc(addr); // read id message->id = (uint16_t) spi_putc(0xff) << 3; message->id |= spi_putc(0xff) >> 5; spi_putc(0xff); spi_putc(0xff); // read DLC uint8_t length = spi_putc(0xff) & 0x0f; message->header.length = length; message->header.rtr = (bit_is_set(status, 3)) ? 1 : 0; // read data for (uint8_t i=0;i<length;i++) { message->data[i] = spi_putc(0xff); } SET(MCP2515_CS); // clear interrupt flag if (bit_is_set(status, 6)) { mcp2515_bit_modify(CANINTF, (1<<RX0IF), 0); } else { mcp2515_bit_modify(CANINTF, (1<<RX1IF), 0); } return (status & 0x07) + 1; }
دیدگاه