|
|
@@ -1,7 +1,8 @@
|
|
|
|
|
|
#include "SpiManager.h"
|
|
|
|
|
|
-SpiManager::SpiManager(SPI_HandleTypeDef *hspi){
|
|
|
+SpiManager::SpiManager(SPI_HandleTypeDef *hspi)
|
|
|
+{
|
|
|
_numDevices = 0;
|
|
|
_activeDevice = -1;
|
|
|
_spi = hspi;
|
|
|
@@ -9,19 +10,21 @@ SpiManager::SpiManager(SPI_HandleTypeDef *hspi){
|
|
|
}
|
|
|
|
|
|
|
|
|
-uint8_t SpiManager::addSlave(McuPin_typeDef *pin){
|
|
|
+uint8_t SpiManager::addSlave(McuPin_typeDef *pin)
|
|
|
+{
|
|
|
_pinCS[_numDevices] = pin;
|
|
|
_numDevices++;
|
|
|
- return _numDevices;
|
|
|
+ return _numDevices-1;
|
|
|
}
|
|
|
|
|
|
-void SpiManager::cs_low(uint8_t index){
|
|
|
- _pinCS[index]->port->BSRR = (uint32_t)_pinCS[index]->pin << 16U;
|
|
|
+void SpiManager::cs_low(uint8_t index)
|
|
|
+{
|
|
|
+ _pinCS[index]->port->BRR = (uint32_t)_pinCS[index]->pin;
|
|
|
}
|
|
|
|
|
|
|
|
|
-void SpiManager::cs_high(uint8_t index){
|
|
|
- //HAL_GPIO_WritePin(_pinCS[index]->port, _pinCS[index]->pin, SET);
|
|
|
+void SpiManager::cs_high(uint8_t index)
|
|
|
+{
|
|
|
_pinCS[index]->port->BSRR = _pinCS[index]->pin;
|
|
|
}
|
|
|
|
|
|
@@ -30,7 +33,7 @@ void SpiManager::cs_high(uint8_t index){
|
|
|
void SpiManager::select_user_bank(uint8_t sensorNum, userbank ub)
|
|
|
{
|
|
|
if(ub == _active_bank){
|
|
|
- return;
|
|
|
+ return; // TODO: overit, ci je toto OK
|
|
|
}
|
|
|
_active_bank = ub;
|
|
|
|
|
|
@@ -58,8 +61,6 @@ void SpiManager::releaseBus()
|
|
|
|
|
|
uint8_t* SpiManager::read_multiple_reg(uint8_t sensorNum, userbank ub, uint8_t reg, uint8_t len)
|
|
|
{
|
|
|
- this->takeBus(sensorNum);
|
|
|
-
|
|
|
uint8_t read_reg = READ | reg;
|
|
|
this->select_user_bank(sensorNum, ub);
|
|
|
|
|
|
@@ -68,8 +69,6 @@ uint8_t* SpiManager::read_multiple_reg(uint8_t sensorNum, userbank ub, uint8_t r
|
|
|
HAL_SPI_Receive(this->_spi, this->_reg_val, len, 1000);
|
|
|
cs_high(sensorNum);
|
|
|
|
|
|
- this->releaseBus();
|
|
|
-
|
|
|
return this->_reg_val;
|
|
|
}
|
|
|
|
|
|
@@ -77,8 +76,6 @@ uint8_t* SpiManager::read_multiple_reg(uint8_t sensorNum, userbank ub, uint8_t r
|
|
|
|
|
|
uint8_t SpiManager::read_single_reg(uint8_t sensorNum, userbank ub, uint8_t reg)
|
|
|
{
|
|
|
- this->takeBus(sensorNum);
|
|
|
-
|
|
|
uint8_t read_reg = READ | reg;
|
|
|
uint8_t reg_val;
|
|
|
select_user_bank(sensorNum, ub);
|
|
|
@@ -88,16 +85,12 @@ uint8_t SpiManager::read_single_reg(uint8_t sensorNum, userbank ub, uint8_t reg)
|
|
|
HAL_SPI_Receive(_spi, ®_val, 1, 1000);
|
|
|
cs_high(sensorNum);
|
|
|
|
|
|
- this->releaseBus();
|
|
|
-
|
|
|
return reg_val;
|
|
|
}
|
|
|
|
|
|
|
|
|
void SpiManager::write_single_reg(uint8_t sensorNum, userbank ub, uint8_t reg, uint8_t val)
|
|
|
{
|
|
|
- this->takeBus(sensorNum);
|
|
|
-
|
|
|
uint8_t write_reg[2];
|
|
|
write_reg[0] = WRITE | reg;
|
|
|
write_reg[1] = val;
|
|
|
@@ -107,15 +100,11 @@ void SpiManager::write_single_reg(uint8_t sensorNum, userbank ub, uint8_t reg, u
|
|
|
cs_low(sensorNum);
|
|
|
HAL_SPI_Transmit(_spi, write_reg, 2, 1000);
|
|
|
cs_high(sensorNum);
|
|
|
-
|
|
|
- this->releaseBus();
|
|
|
}
|
|
|
|
|
|
|
|
|
void SpiManager::write_multiple_reg(uint8_t sensorNum, userbank ub, uint8_t reg, uint8_t* val, uint8_t len)
|
|
|
{
|
|
|
- this->takeBus(sensorNum);
|
|
|
-
|
|
|
uint8_t write_reg = WRITE | reg;
|
|
|
select_user_bank(sensorNum, ub);
|
|
|
|
|
|
@@ -123,8 +112,6 @@ void SpiManager::write_multiple_reg(uint8_t sensorNum, userbank ub, uint8_t reg,
|
|
|
HAL_SPI_Transmit(_spi, &write_reg, 1, 1000);
|
|
|
HAL_SPI_Transmit(_spi, val, len, 1000);
|
|
|
cs_high(sensorNum);
|
|
|
-
|
|
|
- this->releaseBus();
|
|
|
}
|
|
|
|
|
|
|