mirror of https://github.com/ArduPilot/ardupilot
HAL_AVR: changed to 16 byte bulk transfer on SPI0
This commit is contained in:
parent
53c3dff334
commit
11e1cf31c4
|
@ -76,7 +76,7 @@ uint8_t AVRSPI0DeviceDriver::_transfer(uint8_t data)
|
||||||
a specialised transfer function for the MPU6k. This saves 2 usec
|
a specialised transfer function for the MPU6k. This saves 2 usec
|
||||||
per byte
|
per byte
|
||||||
*/
|
*/
|
||||||
void AVRSPI0DeviceDriver::_transfer15(const uint8_t *tx, uint8_t *rx)
|
void AVRSPI0DeviceDriver::_transfer16(const uint8_t *tx, uint8_t *rx)
|
||||||
{
|
{
|
||||||
spi0_transferflag = true;
|
spi0_transferflag = true;
|
||||||
#define TRANSFER1(i) do { SPDR = tx[i]; while(!(SPSR & _BV(SPIF))); rx[i] = SPDR; } while(0)
|
#define TRANSFER1(i) do { SPDR = tx[i]; while(!(SPSR & _BV(SPIF))); rx[i] = SPDR; } while(0)
|
||||||
|
@ -95,6 +95,7 @@ void AVRSPI0DeviceDriver::_transfer15(const uint8_t *tx, uint8_t *rx)
|
||||||
TRANSFER1(12);
|
TRANSFER1(12);
|
||||||
TRANSFER1(13);
|
TRANSFER1(13);
|
||||||
TRANSFER1(14);
|
TRANSFER1(14);
|
||||||
|
TRANSFER1(15);
|
||||||
spi0_transferflag = false;
|
spi0_transferflag = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -112,11 +113,11 @@ void AVRSPI0DeviceDriver::transaction(const uint8_t *tx, uint8_t *rx,
|
||||||
_transfer(tx[i]);
|
_transfer(tx[i]);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
while (len >= 15) {
|
while (len >= 16) {
|
||||||
_transfer15(tx, rx);
|
_transfer16(tx, rx);
|
||||||
tx += 15;
|
tx += 16;
|
||||||
rx += 15;
|
rx += 16;
|
||||||
len -= 15;
|
len -= 16;
|
||||||
}
|
}
|
||||||
for (uint16_t i = 0; i < len; i++) {
|
for (uint16_t i = 0; i < len; i++) {
|
||||||
rx[i] = _transfer(tx[i]);
|
rx[i] = _transfer(tx[i]);
|
||||||
|
|
|
@ -36,7 +36,7 @@ private:
|
||||||
void _cs_release();
|
void _cs_release();
|
||||||
uint8_t _transfer(uint8_t data);
|
uint8_t _transfer(uint8_t data);
|
||||||
// used for MPU6k
|
// used for MPU6k
|
||||||
void _transfer15(const uint8_t *tx, uint8_t *rx);
|
void _transfer16(const uint8_t *tx, uint8_t *rx);
|
||||||
|
|
||||||
static AP_HAL_AVR::AVRSemaphore _semaphore;
|
static AP_HAL_AVR::AVRSemaphore _semaphore;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue