This repository has been archived on 2026-06-17. You can view files and clone it, but cannot push or open issues or pull requests.
FireWatchTower_2axis/firmware/lib/tmc/ic/TMC6100/TMC6100.c

56 lines
1.7 KiB
C
Executable File

/*******************************************************************************
* Copyright © 2019 TRINAMIC Motion Control GmbH & Co. KG
* (now owned by Analog Devices Inc.),
*
* Copyright © 2024 Analog Devices Inc. All Rights Reserved.
* This software is proprietary to Analog Devices, Inc. and its licensors.
*******************************************************************************/
#include "TMC6100.h"
static int32_t readRegisterSPI(uint16_t icID, uint8_t address);
static void writeRegisterSPI(uint16_t icID, uint8_t address, int32_t value);
int32_t tmc6100_readRegister(uint16_t icID, uint8_t address)
{
return readRegisterSPI(icID, address);
}
void tmc6100_writeRegister(uint16_t icID, uint8_t address, int32_t value)
{
writeRegisterSPI(icID, address, value);
}
int32_t readRegisterSPI(uint16_t icID, uint8_t address)
{
uint8_t data[5] = { 0 };
// clear write bit
data[0] = address & TMC6100_ADDRESS_MASK;
// Send the read request
tmc6100_readWriteSPI(icID, &data[0], sizeof(data));
// Rewrite address and clear write bit
data[0] = address & TMC6100_ADDRESS_MASK;
// Send another request to receive the read reply
tmc6100_readWriteSPI(icID, &data[0], sizeof(data));
return ((int32_t)data[1] << 24) | ((int32_t) data[2] << 16) | ((int32_t) data[3] << 8) | ((int32_t) data[4]);
}
void writeRegisterSPI(uint16_t icID, uint8_t address, int32_t value)
{
uint8_t data[5] = { 0 };
data[0] = address | TMC6100_WRITE_BIT;
data[1] = 0xFF & (value>>24);
data[2] = 0xFF & (value>>16);
data[3] = 0xFF & (value>>8);
data[4] = 0xFF & (value>>0);
// Send the write request
tmc6100_readWriteSPI(icID, &data[0], sizeof(data));
}