TMCStepper
Library supporting Trinamic Stepper Drivers for Arduino platforms
Loading...
Searching...
No Matches
SW_SPI.cpp
Go to the documentation of this file.
1
5#include "SW_SPI.h"
6
7SW_SPIClass::SW_SPIClass(uint16_t mosi, uint16_t miso, uint16_t sck) :
8 mosi_pin(mosi),
9 miso_pin(miso),
10 sck_pin(sck)
11 {}
12
14 pinMode(mosi_pin, OUTPUT);
15 pinMode(sck_pin, OUTPUT);
16 pinMode(miso_pin, INPUT_PULLUP);
17 #ifdef ARDUINO_ARCH_AVR
18 mosi_register = portOutputRegister(getPort(mosi_pin));
19 miso_register = portInputRegister(getPort(miso_pin));
20 sck_register = portOutputRegister(getPort(sck_pin));
21 mosi_bm = digitalPinToBitMask(mosi_pin);
22 miso_bm = digitalPinToBitMask(miso_pin);
23 sck_bm = digitalPinToBitMask(sck_pin);
24 #endif
26}
27
28uint8_t SW_SPIClass::transfer(uint8_t ulVal) {
29 uint8_t value = 0;
31
32 for (uint8_t i=7 ; i>=1 ; i--) {
33 // Write bit
34 !!(ulVal & (1 << i)) ? writeMOSI_H : writeMOSI_L;
35 // Start clock pulse
37 // Read bit
38 value |= ( readMISO ? 1 : 0) << i;
39 // Stop clock pulse
41 }
42
43 !!(ulVal & (1 << 0)) ? writeMOSI_H : writeMOSI_L;
45 value |= ( readMISO ? 1 : 0) << 0;
46
47 return value;
48}
49
50uint16_t SW_SPIClass::transfer16(uint16_t data) {
51 uint16_t returnVal = 0x0000;
52 returnVal |= transfer((data>>8)&0xFF) << 8;
53 returnVal |= transfer(data&0xFF) & 0xFF;
54 return returnVal;
55}
#define writeMOSI_L
#define readMISO
#define writeSCK_L
#define writeSCK_H
#define writeMOSI_H
uint16_t transfer16(uint16_t data)
Definition SW_SPI.cpp:50
void init()
Definition SW_SPI.cpp:13
SW_SPIClass(uint16_t sw_mosi_pin, uint16_t sw_miso_pin, uint16_t sw_sck_pin)
Definition SW_SPI.cpp:7
uint8_t transfer(uint8_t ulVal)
Definition SW_SPI.cpp:28
#define pinMode(PIN, MODE)
Definition rpi_bcm2835.h:13
#define OUTPUT
Definition rpi_bcm2835.h:11
#define INPUT_PULLUP
Definition rpi_bcm2835.h:9