2.15. mcp2515 — CAN BUS chipset

Source code: src/drivers/mcp2515.h, src/drivers/mcp2515.c

Test code: tst/drivers/mcp2515/main.c


Defines

MCP2515_SPEED_1000KBPS
MCP2515_SPEED_500KBPS
MCP2515_MODE_NORMAL
MCP2515_MODE_LOOPBACK

Functions

int mcp2515_init(struct mcp2515_driver_t *self_p, struct spi_device_t *spi_p, struct pin_device_t *cs_p, struct exti_device_t *exti_p, void *chin_p, int mode, int speed)

Initialize given driver object.

Return
zero(0) or negative error code.
Parameters
  • self_p: Driver object to initialize.
  • spi_p: SPI driver to use.
  • cs_p: SPI chip select pin.
  • exti_p: External interrupt tp use.
  • chin_p: Frames received from the hardware are written to this channel.
  • mode: Device mode.
  • speed: CAN bus speed in kbps.

int mcp2515_start(struct mcp2515_driver_t *self_p)

Starts the CAN device using given driver object.

Return
zero(0) or negative error code.
Parameters
  • self_p: Initialized driver object.

int mcp2515_stop(struct mcp2515_driver_t *self_p)

Stops the CAN device referenced by driver object.

Return
zero(0) or negative error code.
Parameters
  • self_p: Initialized driver object.

ssize_t mcp2515_read(struct mcp2515_driver_t *self_p, struct mcp2515_frame_t *frame_p)

Read a CAN frame.

Return
zero(0) or negative error code.
Parameters
  • self_p: Initialized driver object.
  • frame_p: Read frame.

ssize_t mcp2515_write(struct mcp2515_driver_t *self_p, const struct mcp2515_frame_t *frame_p)

Write a CAN frame.

Return
zero(0) or negative error code.
Parameters
  • self_p: Initialized driver object.
  • frame_p: Frame to write.

struct mcp2515_frame_t

Public Members

uint32_t id
int size
int rtr
uint32_t timestamp
uint8_t data[8]
struct mcp2515_driver_t

Public Functions

mcp2515_driver_t::THRD_STACK(stack, 1024)

Public Members

struct spi_driver_t spi
struct exti_driver_t exti
int mode
int speed
struct chan_t chout
struct chan_t *chin_p
struct sem_t isr_sem
struct sem_t tx_sem