BusSPI

Base SPI bus interface.

Concrete implementations in MCU drivers should be passed to code.

(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);