Transmission While Transmitter is Busy

If a task or function wants to transmit a CAN frame by calling the function CanBusWrite() while the configured CAN transmitter is busy, the following steps will be performed:


Figure - CAN transmission while transmitter is busy


  1. The function CanBusWrite() is pending on the counting semaphore with the configured TxTimeout. The timeout must be set with CanBusIoCtl() CANBUS_SET_TX_TIMEOUT
  2. If the function has the semaphore within the timeout, the given CAN frame is copied to the internal transmission queue. If a timeout error was detected, the function CanBusWrite() exits with an error-code.

Asynchronous to this actions, the transmission complete interrupt of the CAN controller shall activate the function CanBusTxHandler():

  1. The interrupt handler checks if a CAN frame is in the internal transmission queue.
  2. If a CAN frame is in the queue, the low level device driver function Write() is used to pass the CAN frame to the CAN controller.
  3. The counting semaphore will be posted and the handler will be finished.