Browse Source

1 funkcna verzia

Juraj Ďuďák 2 years ago
parent
commit
2e5f1e3320
2 changed files with 12 additions and 24 deletions
  1. 11 24
      src/SpiManager.cpp
  2. 1 0
      src/icm20948.cpp

+ 11 - 24
src/SpiManager.cpp

@@ -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, &reg_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();
 }
 
 

+ 1 - 0
src/icm20948.cpp

@@ -16,6 +16,7 @@ Icm20948::Icm20948(SpiManager *spi, icm20948_Config *config){
 
 	_activeDevice = spi->addSlave(config->pinCS);
 	_pinINT = config->pinINT;
+	_spi = spi;
 
 	accSensor = new SensorAccel(spi, _activeDevice);
 	gyroSensor = new SensorGyro(spi, _activeDevice);