GY-63_MS5611/libraries/FastShiftIn/readme.md

66 lines
2.4 KiB
Markdown
Raw Normal View History

2021-01-29 06:31:58 -05:00
[![Arduino CI](https://github.com/RobTillaart/FastShiftIn/workflows/Arduino%20CI/badge.svg)](https://github.com/marketplace/actions/arduino_ci)
2021-12-17 09:14:55 -05:00
[![Arduino-lint](https://github.com/RobTillaart/FastShiftIn/actions/workflows/arduino-lint.yml/badge.svg)](https://github.com/RobTillaart/FastShiftIn/actions/workflows/arduino-lint.yml)
[![JSON check](https://github.com/RobTillaart/FastShiftIn/actions/workflows/jsoncheck.yml/badge.svg)](https://github.com/RobTillaart/FastShiftIn/actions/workflows/jsoncheck.yml)
2021-01-29 06:31:58 -05:00
[![License: MIT](https://img.shields.io/badge/license-MIT-green.svg)](https://github.com/RobTillaart/FastShiftIn/blob/master/LICENSE)
[![GitHub release](https://img.shields.io/github/release/RobTillaart/FastShiftIn.svg?maxAge=3600)](https://github.com/RobTillaart/FastShiftIn/releases)
2021-12-17 09:14:55 -05:00
2020-11-27 05:16:22 -05:00
# FastShiftIn
2021-12-17 09:14:55 -05:00
Arduino library for **AVR** optimized shiftIn - e.g. for 74HC165.
A library for FastShiftOut also exist - https://github.com/RobTillaart/FastShiftOut
2020-11-27 05:16:22 -05:00
## Description
FastShiftIn is a class that has optimized code (AVR only) to shift in data faster
2021-12-17 09:14:55 -05:00
than the normal **shiftIn()** function.
2020-11-27 05:16:22 -05:00
It speeds up the shift using low level ports and masks. These are predetermined
in the constructor of the FastShiftIn object.
If not an **ARDUINO_ARCH_AVR** or **ARDUINO_ARCH_MEGAAVR** the class falls back
to the default shiftIn() implementation.
2021-12-17 09:14:55 -05:00
2020-11-27 05:16:22 -05:00
## Performance
The performance of **read()** is substantially faster than the default Arduino
**shiftIn()**, but not as fast as HW SPI.
Exact how big the performance gain is can be seen with the example sketch.
It does a comparison and shows how the class is to be used.
2021-12-17 09:14:55 -05:00
2020-11-27 05:16:22 -05:00
## Interface
The interface exists of the following functions:
2021-12-17 09:14:55 -05:00
- **int read(void)** reads a new value.
- **int lastRead()** returns last value read.
- **bool setBitOrder(uint8_t bitOrder)** set LSBFIRST or MSBFIRST. Returns false for other values.
2021-01-29 06:31:58 -05:00
- **uint8_t getBitOrder(void)** returns LSBFIRST or MSBFIRST
2021-12-17 09:14:55 -05:00
- **int readLSBFIRST(void)** optimized LSB read().
- **int readMSBFIRST(void)** optimized MSB read().
2020-11-27 05:16:22 -05:00
## Notes
- The optimizations are AVR only for now, other platforms may follow.
- The 74HC165 needs 0.1uF caps and the data and clock lines may need
pull up resistors, especially if wires are exceeding 10 cm (4").
2021-12-17 09:14:55 -05:00
2020-11-27 05:16:22 -05:00
## Operation
See examples
2021-12-17 09:14:55 -05:00
## Future
- esp32 optimization readLSBFIRST readMSBFIRST
- read8() read16(), read24(), read32()
- **read(uint8_t \* arr, uint8_t nr)** ??
- example schema