This commit is contained in:
2025-11-21 17:39:07 +01:00
parent ee55984c93
commit 55a1469b99
10 changed files with 295 additions and 86 deletions

78
src/max31856.cpp Normal file
View File

@@ -0,0 +1,78 @@
#include "pico/stdlib.h"
#include "hardware/spi.h"
#include <stdint.h>
#include "max31856.h"
// max31856 pins
#define SPI_MAX31856 spi0
#define SPI_MAX31856_BOUD 1E6 // 1 MHz (max31856 can go up to 5 MHz)
#define SPI_MAX31856_SPO SPI_CPOL_0
#define SPI_MAX31856_SPH SPI_CPHA_1
#define SPI_MAX31856_BIT_ORDER SPI_MSB_FIRST
#define SPI_MAX31856_BLOCK_SIZE 8
void max31856_init(max31856_t *max)
{
// init GPIO for CS
gpio_init(max->pin_cs);
gpio_set_dir(max->pin_cs, GPIO_OUT);
gpio_put(max->pin_cs, 1);
// init SPI
spi_init(SPI_MAX31856, SPI_MAX31856_BOUD);
spi_set_format(SPI_MAX31856, SPI_MAX31856_BLOCK_SIZE, SPI_MAX31856_SPO, SPI_MAX31856_SPH, SPI_MAX31856_BIT_ORDER);
max->initilzed = true;
}
void max31856_deinit(max31856_t *max)
{
max->initilzed = false;
spi_deinit(SPI_MAX31856);
gpio_deinit(max->pin_cs);
}
int max31856_write8(max31856_t *max, uint8_t addr, uint8_t value)
{
if (!(max->initilzed))
{
return -1;
}
uint8_t buff[2] = {addr | 0x80, value};
gpio_put(max->pin_cs, 0);
spi_write_blocking(SPI_MAX31856, &buff[0], 2);
gpio_put(max->pin_cs, 1);
return 0;
}
uint8_t max31856_read8(max31856_t *max, uint8_t addr)
{
if (!(max->initilzed))
{
return -1;
}
uint16_t buff_tx = (addr & 0x7F)<<8;
uint8_t buff_rx[] = {0, 0};
gpio_put(max->pin_cs, 0);
spi_read_blocking(SPI_MAX31856, buff_tx, &buff_rx[0], 2);
gpio_put(max->pin_cs, 1);
return buff_rx[1];
}
uint16_t max31856_read16(max31856_t *max, uint8_t addr)
{
if (!(max->initilzed))
{
return -1;
}
uint16_t buff_tx = (addr & 0x7F)<<8;
uint8_t buff_rx[] = {0, 0, 0};
gpio_put(max->pin_cs, 0);
spi_read_blocking(SPI_MAX31856, buff_tx, &buff_rx[0], 3);
gpio_put(max->pin_cs, 1);
return buff_rx[1]<<8 | buff_rx[2];
}