Skip to content

Commit 69287af

Browse files
committed
fix SPI operation order #43
1 parent 17be3a5 commit 69287af

File tree

6 files changed

+29
-25
lines changed

6 files changed

+29
-25
lines changed

src/encoders/a1334/A1334.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,10 @@ A1334::~A1334() {
1717

1818
void A1334::init(SPIClass* _spi) {
1919
spi = _spi;
20-
if (nCS>=0)
20+
if (nCS>=0) {
2121
pinMode(nCS, OUTPUT);
22-
digitalWrite(nCS, HIGH);
22+
digitalWrite(nCS, HIGH);
23+
}
2324
//SPI has an internal SPI-device counter, it is possible to call "begin()" from different devices
2425
spi->begin();
2526
readRawAngle(); // read an angle
@@ -42,13 +43,13 @@ A1334Angle A1334::readRawAngle() {
4243

4344

4445
uint16_t A1334::spi_transfer16(uint16_t outdata) {
46+
spi->beginTransaction(settings);
4547
if (nCS>=0)
4648
digitalWrite(nCS, 0);
47-
spi->beginTransaction(settings);
4849
uint16_t result = spi->transfer16(outdata);
49-
spi->endTransaction();
5050
if (nCS>=0)
5151
digitalWrite(nCS, 1);
52+
spi->endTransaction();
5253
return result;
5354
};
5455

src/encoders/aeat8800q24/AEAT8800Q24.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -78,14 +78,14 @@ void AEAT8800Q24::setConf2(AEAT8800Q24_CONF2_t value){
7878
uint16_t AEAT8800Q24::transfer16SPI(uint16_t outValue) {
7979
// delay 1us between switching the CS line to SPI
8080
delayMicroseconds(1);
81-
if (nCS >= 0)
82-
digitalWrite(nCS, LOW);
8381
spi->endTransaction();
8482
spi->beginTransaction(spiSettings);
83+
if (nCS >= 0)
84+
digitalWrite(nCS, LOW);
8585
uint16_t value = spi->transfer16(outValue);
86-
spi->endTransaction();
8786
if (nCS >= 0)
8887
digitalWrite(nCS, HIGH);
88+
spi->endTransaction();
8989
// delay 1us between switching the CS line to SSI
9090
delayMicroseconds(1);
9191
spi->beginTransaction(ssiSettings);

src/encoders/as5047/AS5047.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,10 @@ AS5047::~AS5047() {
1717

1818
void AS5047::init(SPIClass* _spi) {
1919
spi = _spi;
20-
if (nCS>=0)
20+
if (nCS>=0) {
2121
pinMode(nCS, OUTPUT);
22-
digitalWrite(nCS, HIGH);
22+
digitalWrite(nCS, HIGH);
23+
}
2324
//SPI has an internal SPI-device counter, it is possible to call "begin()" from different devices
2425
spi->begin();
2526
readRawAngle(); // read an angle
@@ -230,13 +231,13 @@ uint16_t AS5047::calcParity(uint16_t data){
230231

231232

232233
uint16_t AS5047::spi_transfer16(uint16_t outdata) {
234+
spi->beginTransaction(settings);
233235
if (nCS>=0)
234236
digitalWrite(nCS, 0);
235-
spi->beginTransaction(settings);
236237
uint16_t result = spi->transfer16(outdata);
237-
spi->endTransaction();
238238
if (nCS>=0)
239239
digitalWrite(nCS, 1);
240+
spi->endTransaction();
240241
// TODO check parity
241242
errorflag = ((result&AS5047_ERRFLG)>0);
242243
return result;

src/encoders/as5047u/AS5047U.cpp

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,10 @@ AS5047U::~AS5047U() {
1717

1818
void AS5047U::init(SPIClass* _spi) {
1919
spi = _spi;
20-
if (nCS>=0)
20+
if (nCS>=0) {
2121
pinMode(nCS, OUTPUT);
22-
digitalWrite(nCS, HIGH);
22+
digitalWrite(nCS, HIGH);
23+
}
2324
//SPI has an internal SPI-device counter, it is possible to call "begin()" from different devices
2425
spi->begin();
2526
readRawAngle(); // read an angle
@@ -291,13 +292,13 @@ uint16_t AS5047U::nop16(){
291292

292293

293294
uint16_t AS5047U::spi_transfer16(uint16_t outdata) {
295+
spi->beginTransaction(settings);
294296
if (nCS>=0)
295297
digitalWrite(nCS, 0);
296-
spi->beginTransaction(settings);
297298
uint16_t result = spi->transfer16(outdata);
298-
spi->endTransaction();
299299
if (nCS>=0)
300300
digitalWrite(nCS, 1);
301+
spi->endTransaction();
301302
errorflag = ((result&AS5047U_ERROR)>0);
302303
warningflag = ((result&AS5047U_WARNING)>0);
303304
return result;
@@ -321,26 +322,26 @@ uint16_t AS5047U::writeRegister24(uint16_t reg, uint16_t data) {
321322
buff[0] = (reg>>8)&0x3F;
322323
buff[1] = reg&0xFF;
323324
buff[2] = calcCRC(reg);
325+
spi->beginTransaction(settings);
324326
if (nCS>=0)
325327
digitalWrite(nCS, 0);
326-
spi->beginTransaction(settings);
327328
spi->transfer(buff, 3);
328-
spi->endTransaction();
329329
if (nCS>=0)
330330
digitalWrite(nCS, 1);
331+
spi->endTransaction();
331332
errorflag = ((buff[0]&0x40)>0);
332333
warningflag = ((buff[0]&0x80)>0);
333334

334335
buff[0] = (data>>8)&0x3F;
335336
buff[1] = data&0xFF;
336337
buff[2] = calcCRC(data);
338+
spi->beginTransaction(settings);
337339
if (nCS>=0)
338340
digitalWrite(nCS, 0);
339-
spi->beginTransaction(settings);
340341
spi->transfer(buff, 3);
341-
spi->endTransaction();
342342
if (nCS>=0)
343343
digitalWrite(nCS, 1);
344+
spi->endTransaction();
344345
errorflag = ((buff[0]&0x40)>0);
345346
warningflag = ((buff[0]&0x80)>0);
346347

src/encoders/as5048a/AS5048A.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,10 @@ AS5048A::~AS5048A() {
1717

1818
void AS5048A::init(SPIClass* _spi) {
1919
spi = _spi;
20-
if (nCS>=0)
20+
if (nCS>=0) {
2121
pinMode(nCS, OUTPUT);
22-
digitalWrite(nCS, HIGH);
22+
digitalWrite(nCS, HIGH);
23+
}
2324
//SPI has an internal SPI-device counter, it is possible to call "begin()" from different devices
2425
spi->begin();
2526
readRawAngle(); // read an angle
@@ -103,13 +104,13 @@ uint16_t AS5048A::nop(){
103104
}
104105

105106
uint16_t AS5048A::spi_transfer16(uint16_t outdata) {
107+
spi->beginTransaction(settings);
106108
if (nCS>=0)
107109
digitalWrite(nCS, 0);
108-
spi->beginTransaction(settings);
109110
uint16_t result = spi->transfer16(outdata);
110-
spi->endTransaction();
111111
if (nCS>=0)
112112
digitalWrite(nCS, 1);
113+
spi->endTransaction();
113114
// TODO check parity
114115
errorflag = ((result&AS5048A_ERRFLG)>0);
115116
return result;

src/encoders/mt6816/MT6816.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,13 +44,13 @@ bool MT6816::parityCheck(uint16_t data) {
4444
}
4545

4646
uint16_t MT6816::spi_transfer16(uint16_t outdata) {
47+
spi->beginTransaction(settings);
4748
if (nCS>=0)
4849
digitalWrite(nCS, 0);
49-
spi->beginTransaction(settings);
5050
uint16_t result = spi->transfer16(outdata);
51-
spi->endTransaction();
5251
if (nCS>=0)
5352
digitalWrite(nCS, 1);
53+
spi->endTransaction();
5454

5555
return result;
5656
}

0 commit comments

Comments
 (0)