A collection of Analog Devices drivers for the mbed platform

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers ADT7310.cpp Source File

ADT7310.cpp

00001 #include "ADT7310.h"
00002 
00003 
00004 ADT7310::ADT7310(PinName CS, PinName MOSI, PinName MISO, PinName SCK) :/* miso(MISO),*/ adt7310(MOSI, MISO, SCK), cs(CS)
00005 {
00006     cs = true;
00007     adt7310.format(8, SPI_MODE);
00008 }
00009 
00010 void ADT7310::reset()
00011 {
00012     cs = false;
00013     adt7310.write(0xff);
00014     adt7310.write(0xff);
00015     adt7310.write(0xff);
00016     adt7310.write(0xff);
00017     cs = true;
00018 }
00019 uint8_t ADT7310::read_status()
00020 {
00021     uint8_t spi_data[2] = {ADT7310_READ | (ADT7310_STATUS << 3), ADT7310_DUMMY};
00022     spi_read(spi_data, 2);
00023     return spi_data[1];
00024 }
00025 
00026 void ADT7310::start_single_conversion()
00027 {
00028     uint8_t spi_data[2] = {ADT7310_READ | (ADT7310_CONFIG << 3), ADT7310_DUMMY};
00029     spi_read(spi_data, 2);
00030     spi_data[0] = ADT7310_WRITE | (ADT7310_CONFIG << 3);
00031     spi_data[1] = (spi_data[1] & (~(0x60))) |  (0x20); // Oneshot conversion
00032     spi_write(spi_data, 2);
00033 }
00034 void ADT7310::write_config(uint8_t data)
00035 {
00036     uint8_t spi_data[2] = {ADT7310_WRITE | (ADT7310_CONFIG << 3), data};
00037     spi_write(spi_data, 2);
00038 }
00039 
00040 uint8_t ADT7310::read_config()
00041 {
00042     uint8_t spi_data[2] = {ADT7310_READ | (ADT7310_CONFIG << 3), ADT7310_DUMMY};
00043     spi_read(spi_data, 2);
00044     return spi_data[1];
00045 }
00046 uint16_t ADT7310::read_temp()
00047 {
00048     uint8_t spi_data[3] = {ADT7310_READ | (ADT7310_TEMP << 3), ADT7310_DUMMY, ADT7310_DUMMY };
00049     spi_read(spi_data, 3);
00050     return ((static_cast<uint16_t>(spi_data[1]) << 8) | spi_data[2]);
00051 }
00052 void ADT7310::write_temp_setpoint(uint8_t setpoint, uint16_t data)
00053 {
00054     uint8_t spi_data[3] = {ADT7310_WRITE | (setpoint << 3), ((data & 0xff00) >> 8), data & 0xff };
00055     spi_write(spi_data, 3);
00056 }
00057 
00058 void ADT7310::spi_write(uint8_t *data, uint8_t size)
00059 {
00060     cs = false;
00061     uint8_t i;
00062     for(i = 0; i < size; i++)
00063         adt7310.write(data[i]);
00064     cs = true;
00065 
00066 }
00067 void ADT7310::spi_read(uint8_t *data, uint8_t size)
00068 {
00069     cs = false;
00070     uint8_t i;
00071     for(i = 0; i < size; i++)
00072         data[i] = adt7310.write(data[i]);
00073 
00074     cs = true;
00075 }