A collection of Analog Devices drivers for the mbed platform

For additional information check out the mbed page of the Analog Devices wiki: https://wiki.analog.com/resources/tools-software/mbed-drivers-all

Committer:
Adrian Suciu
Date:
Mon Nov 07 16:27:12 2016 +0200
Revision:
33:c3ec596a29c2
Added CN0391, CN0396 and CN0397 shields

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Adrian Suciu 33:c3ec596a29c2 1 #include "ADT7310.h"
Adrian Suciu 33:c3ec596a29c2 2
Adrian Suciu 33:c3ec596a29c2 3
Adrian Suciu 33:c3ec596a29c2 4 ADT7310::ADT7310(PinName CS, PinName MOSI, PinName MISO, PinName SCK) :/* miso(MISO),*/ adt7310(MOSI, MISO, SCK), cs(CS)
Adrian Suciu 33:c3ec596a29c2 5 {
Adrian Suciu 33:c3ec596a29c2 6 cs = true;
Adrian Suciu 33:c3ec596a29c2 7 adt7310.format(8, SPI_MODE);
Adrian Suciu 33:c3ec596a29c2 8 }
Adrian Suciu 33:c3ec596a29c2 9
Adrian Suciu 33:c3ec596a29c2 10 void ADT7310::reset()
Adrian Suciu 33:c3ec596a29c2 11 {
Adrian Suciu 33:c3ec596a29c2 12 cs = false;
Adrian Suciu 33:c3ec596a29c2 13 adt7310.write(0xff);
Adrian Suciu 33:c3ec596a29c2 14 adt7310.write(0xff);
Adrian Suciu 33:c3ec596a29c2 15 adt7310.write(0xff);
Adrian Suciu 33:c3ec596a29c2 16 adt7310.write(0xff);
Adrian Suciu 33:c3ec596a29c2 17 cs = true;
Adrian Suciu 33:c3ec596a29c2 18 }
Adrian Suciu 33:c3ec596a29c2 19 uint8_t ADT7310::read_status()
Adrian Suciu 33:c3ec596a29c2 20 {
Adrian Suciu 33:c3ec596a29c2 21 uint8_t spi_data[2] = {ADT7310_READ | (ADT7310_STATUS << 3), ADT7310_DUMMY};
Adrian Suciu 33:c3ec596a29c2 22 spi_read(spi_data, 2);
Adrian Suciu 33:c3ec596a29c2 23 return spi_data[1];
Adrian Suciu 33:c3ec596a29c2 24 }
Adrian Suciu 33:c3ec596a29c2 25
Adrian Suciu 33:c3ec596a29c2 26 void ADT7310::start_single_conversion()
Adrian Suciu 33:c3ec596a29c2 27 {
Adrian Suciu 33:c3ec596a29c2 28 uint8_t spi_data[2] = {ADT7310_READ | (ADT7310_CONFIG << 3), ADT7310_DUMMY};
Adrian Suciu 33:c3ec596a29c2 29 spi_read(spi_data, 2);
Adrian Suciu 33:c3ec596a29c2 30 spi_data[0] = ADT7310_WRITE | (ADT7310_CONFIG << 3);
Adrian Suciu 33:c3ec596a29c2 31 spi_data[1] = (spi_data[1] & (~(0x60))) | (0x20); // Oneshot conversion
Adrian Suciu 33:c3ec596a29c2 32 spi_write(spi_data, 2);
Adrian Suciu 33:c3ec596a29c2 33 }
Adrian Suciu 33:c3ec596a29c2 34 void ADT7310::write_config(uint8_t data)
Adrian Suciu 33:c3ec596a29c2 35 {
Adrian Suciu 33:c3ec596a29c2 36 uint8_t spi_data[2] = {ADT7310_WRITE | (ADT7310_CONFIG << 3), data};
Adrian Suciu 33:c3ec596a29c2 37 spi_write(spi_data, 2);
Adrian Suciu 33:c3ec596a29c2 38 }
Adrian Suciu 33:c3ec596a29c2 39
Adrian Suciu 33:c3ec596a29c2 40 uint8_t ADT7310::read_config()
Adrian Suciu 33:c3ec596a29c2 41 {
Adrian Suciu 33:c3ec596a29c2 42 uint8_t spi_data[2] = {ADT7310_READ | (ADT7310_CONFIG << 3), ADT7310_DUMMY};
Adrian Suciu 33:c3ec596a29c2 43 spi_read(spi_data, 2);
Adrian Suciu 33:c3ec596a29c2 44 return spi_data[1];
Adrian Suciu 33:c3ec596a29c2 45 }
Adrian Suciu 33:c3ec596a29c2 46 uint16_t ADT7310::read_temp()
Adrian Suciu 33:c3ec596a29c2 47 {
Adrian Suciu 33:c3ec596a29c2 48 uint8_t spi_data[3] = {ADT7310_READ | (ADT7310_TEMP << 3), ADT7310_DUMMY, ADT7310_DUMMY };
Adrian Suciu 33:c3ec596a29c2 49 spi_read(spi_data, 3);
Adrian Suciu 33:c3ec596a29c2 50 return ((static_cast<uint16_t>(spi_data[1]) << 8) | spi_data[2]);
Adrian Suciu 33:c3ec596a29c2 51 }
Adrian Suciu 33:c3ec596a29c2 52 void ADT7310::write_temp_setpoint(uint8_t setpoint, uint16_t data)
Adrian Suciu 33:c3ec596a29c2 53 {
Adrian Suciu 33:c3ec596a29c2 54 uint8_t spi_data[3] = {ADT7310_WRITE | (setpoint << 3), ((data & 0xff00) >> 8), data & 0xff };
Adrian Suciu 33:c3ec596a29c2 55 spi_write(spi_data, 3);
Adrian Suciu 33:c3ec596a29c2 56 }
Adrian Suciu 33:c3ec596a29c2 57
Adrian Suciu 33:c3ec596a29c2 58 void ADT7310::spi_write(uint8_t *data, uint8_t size)
Adrian Suciu 33:c3ec596a29c2 59 {
Adrian Suciu 33:c3ec596a29c2 60 cs = false;
Adrian Suciu 33:c3ec596a29c2 61 uint8_t i;
Adrian Suciu 33:c3ec596a29c2 62 for(i = 0; i < size; i++)
Adrian Suciu 33:c3ec596a29c2 63 adt7310.write(data[i]);
Adrian Suciu 33:c3ec596a29c2 64 cs = true;
Adrian Suciu 33:c3ec596a29c2 65
Adrian Suciu 33:c3ec596a29c2 66 }
Adrian Suciu 33:c3ec596a29c2 67 void ADT7310::spi_read(uint8_t *data, uint8_t size)
Adrian Suciu 33:c3ec596a29c2 68 {
Adrian Suciu 33:c3ec596a29c2 69 cs = false;
Adrian Suciu 33:c3ec596a29c2 70 uint8_t i;
Adrian Suciu 33:c3ec596a29c2 71 for(i = 0; i < size; i++)
Adrian Suciu 33:c3ec596a29c2 72 data[i] = adt7310.write(data[i]);
Adrian Suciu 33:c3ec596a29c2 73
Adrian Suciu 33:c3ec596a29c2 74 cs = true;
Adrian Suciu 33:c3ec596a29c2 75 }