generated from LailaTheElf/rp2040_c
update
This commit is contained in:
78
src/max31856.cpp
Normal file
78
src/max31856.cpp
Normal 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];
|
||||
}
|
||||
Reference in New Issue
Block a user