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