45 lines
1.4 KiB
C++
45 lines
1.4 KiB
C++
#include "../tmc2130.h"
|
|
|
|
namespace hal {
|
|
namespace tmc2130 {
|
|
|
|
TMC2130::TMC2130(const MotorParams ¶ms,
|
|
const MotorCurrents ¤ts,
|
|
MotorMode mode) {
|
|
// TODO
|
|
}
|
|
|
|
void TMC2130::Init(const MotorParams ¶ms) {
|
|
// TODO
|
|
}
|
|
|
|
uint32_t TMC2130::ReadRegister(const MotorParams ¶ms, Registers reg) {
|
|
uint8_t pData[5] = {(uint8_t)reg};
|
|
_spi_tx_rx(params, pData);
|
|
// _handle_spi_status(pData[0]); /// could be outdated. Safer not to use it.
|
|
pData[0] = 0;
|
|
_spi_tx_rx(params, pData);
|
|
_handle_spi_status(pData[0]);
|
|
return ((uint32_t)pData[1] << 24 | (uint32_t)pData[2] << 16 | (uint32_t)pData[3] << 8 | (uint32_t)pData[4]);
|
|
}
|
|
|
|
void TMC2130::WriteRegister(const MotorParams ¶ms, Registers reg, uint32_t data) {
|
|
uint8_t pData[5] = {(uint8_t)((uint8_t)(reg) | 0x80), (uint8_t)(data >> 24), (uint8_t)(data >> 16), (uint8_t)(data >> 8), (uint8_t)data};
|
|
_spi_tx_rx(params, pData);
|
|
_handle_spi_status(pData[0]);
|
|
}
|
|
|
|
void TMC2130::_spi_tx_rx(const MotorParams ¶ms, uint8_t (&pData)[5]) {
|
|
hal::gpio::WritePin(params.csPin, hal::gpio::Level::low);
|
|
for (uint8_t i = 0; i < sizeof(pData); i++)
|
|
pData[i] = hal::spi::TxRx(params.spi, pData[i]);
|
|
hal::gpio::WritePin(params.csPin, hal::gpio::Level::high);
|
|
}
|
|
|
|
void TMC2130::_handle_spi_status(uint8_t status) {
|
|
spi_status |= status & 0x03; /// update reset_flag and driver_error
|
|
}
|
|
|
|
} // namespace tmc2130
|
|
} // namespace hal
|