Arduino tinySPI Library
Arduino tinySPI Library Copyright (C) 2018 Jack Christensen GNU GPL v3.0
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License v3.0 as published by the Free Software Foundation.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program. If not, see https://www.gnu.org/licenses/gpl.html
tinySPI is an Arduino SPI master library for ATtiny microcontrollers that utilizes the USI hardware in the ATtiny MCUs. Supported MCUs include ATtiny24/44/84, 25/45/85, 261/461/861, 2313/4313.
Because the USI hardware is not as sophisticated as the dedicated SPI hardware in the ATmega MCUs, tinySPI is more limited than the standard Arduino SPI library but still has several advantages over software bit-bang approaches.
As compared to the Arduino shiftOut() function, tinySPI
- is about 15 times faster,
- has a smaller program memory footprint, and
- has a consistent bit clock period.
tinySPI does not support
- sending the least-significant bit first,
- SPI data modes 2 and 3, or
- user-selectable SPI clock frequencies.
tinySPI will generate an SPI bit clock that is about one-tenth the MCU system clock frequency. For example, given a 1MHz system clock, the SPI clock will be about 100kHz, and it will take about 80μs to transfer one byte.
Interrupts are inhibited during each byte transfer to ensure a consistent bit clock period.
Included with the library are example sketches that demonstrate driving a 74HC595 shift register from an ATtiny84 and from an ATtiny85.
Initializes the SPI bus, sets the USCK and DO pins to outputs, sets the DI pin to input.
Disables the SPI bus (leaving the pin modes unchanged).
Sets the SPI data mode, i.e. clock polarity and phase. See the Wikipedia article on SPI for details.
mode: SPI_MODE0 or SPI_MODE1 (modes 2 and 3 are not supported)
Transfers one byte over the SPI bus, both sending and receiving. Interrupts are inhibited during each byte transfer to ensure a consistent bit clock period.
val: the byte to send over the bus (byte)
the byte read from the bus (byte)