BusSPI

Base SPI bus interface to be used by devices. Concrete implementations in MCU drivers should be passed to drivers.

(c) Alexander Shiryaev, 2016.12 Modified by Tenko for use with ECS

Const

NoError* = 0;
ErrorTimeout* = -1;

Types

Bus* = RECORD
        maxTransferSize*: INTEGER; (* maximum BYTE transfer size supported by driver *)
        timeout*: UNSIGNED32; (* transfere timeout in ms. 0 or lower disable timeout check *)
        error*: INTEGER; (* last transfer error code or NoError if success *)
    END;

Procedures

Bus.Idle

Callback during transfer idle

PROCEDURE (VAR this : Bus) Idle*;

Bus.Transfer

General transfer routine.
  • rxAdr : address to read buffer. Can be 0 for tx only.

  • txAdr : address to write buffer. Can be 0 for rx only.

  • txConst : if TRUE then tx constant value.

  • dataSize : 8 or 16 bit.

  • len : length of buffer

PROCEDURE (VAR this : Bus) Transfer* (rxAdr, txAdr : ADDRESS; txConst : BOOLEAN; dataSize, len : LENGTH);

Bus.Read

Read length bytes to buffer begining at start index and send TXByte

PROCEDURE (VAR this : Bus) Read*(VAR buffer : ARRAY OF BYTE; start, length : LENGTH; TXByte : BYTE);

Bus.Write

Write length bytes from buffer begining at start index

PROCEDURE (VAR this : Bus) Write*(VAR buffer : ARRAY OF BYTE; start, length : LENGTH);

Bus.ReadWrite

Write length bytes from buffer begining at TXStart index and at the same time read length bytes to buffer begining at RXStart index.

PROCEDURE (VAR this : Bus) ReadWrite*(VAR RXBuffer : ARRAY OF BYTE;VAR TXBuffer : ARRAY OF BYTE; RXStart, TXStart, length : LENGTH);